*
We
didn’t
use
Circuit
breakers
at
the
start,
so
we
didn't
have
Back
Pressure.
*
We
had
unbounded
queues
(Which
can
cause
RabbitMQ
to
run
out
of
memory)
9
*
We
Thought
all
services
had
the
same
storage
requirements
and
created
a
shared
AP
storage
that
could
get
saturated
by
a
single
service...
*
We
are
not
a
db
company,
so
our
custom
sharing/rou:ng
logic
wasn’t
the
best.
*
Our
consistent
hashing
didn’t
spread
par::ons
enough
and
created
hotspots.
*
Sharing
storage
also
complicates
tracking
state
changes
and
makes
database
migra:ons
a
nightmare.
10
*
JSON
is
awesome
and
lightweight…
But
it's
schema-‐less,
so
you
can't
deprecate
old
endpoints
easily
and
you
will
need
to
create
new
endpoints
for
adding
new
required
fields.
• Integra:on
tes:ng
is
vital
11
*
Created
some
Mini-‐Monoliths
*
Model
dependencies
are
bad,
Services
dependencies
are
ten
:mes
worse
(SLA
degrades
exponen:ally
as
your
dependencies
increase)
If
you
have
two
services
at
99.99%
availability
now
you
are
down
to
99.95%
(Note:
These
numbers
are
made
up,
but
some:mes
it
is
that
bad.)
*
Graceful
degrada:on
should
not
be
an
aferthought.
*
We
didn’t
enforce
strict
boundaries
which
created
dependencies
on
their
internals.
This
creates
fragile
services.
12