Transcript
This transcript was autogenerated. To make changes, submit a PR.
Hey everyone.
My name is Rodney Genta.
I'm a senior software engineer with over 15 years of experience, and
I'm excited to have the opportunity to speak at this conference.
And I want to thank you all for joining today's session.
The topic we are going to explore today is Microservices Business Monolith, a
platform engineering decision framework.
As platform engineers, we face an architectural crossroad in almost
every large scale crowd project.
Should we stick with the simplicity of a monolith or embrace the flexibility
and scalability of microservices?
The choice is not just technical as it affects the development velocity,
team productivity cost, and how systems evolve over the long term.
My goal today is to walk you through the structured decision framework,
one that takes into account platform maturity, team structure, and
infrastructure capabilities, so you can align the architecture with
business outcomes rather than hype.
So cloud computing has completely changed the way we build applications.
It has unlocked scalability, global reach, and agility.
But with this evolution comes a crucial decision point.
Do we build as a monolith or do we break things down into microservices?
And this decision impacts four big areas.
One is the speed of development and team productivity, the operational
complexity and maintenance burden that we take on the cost structures and how
efficiently we use resources and the long-term adaptability of our systems.
In other words, the decision we make at this architectural fork
sets the tone for how sustainable, flexible, and maybe cost efficient our
platform will be for years to come.
So let's take a look at microservices first.
Microservices, they just break applications into small and
independent services that talk to each other through APIs, and each
of the server is independently deployable, scalable, and manageable.
But what does it mean in practice?
So independent scaling means that the each service scales on its own.
Which means the granular resource control and auto-scaling can be
configured based on load variations.
And studies show 30 to 40% cost savings through efficient scale
and the deployment flexibility.
The frequency increases dramatically if five to 10 times higher, a deployment
downtime is reduced by as much as 90%.
Microservices work hand in hand with continuous integration and
continuous deployment pipelines.
And the failures are mostly contained.
A problem in one service does not cascade across the system.
This distributed fall tolerance is what enables 99% availability.
Technology, diversity, right?
Each service can use the most suitable tech stack.
This allows incremental adoption of new technologies and supports
polyglot programming approaches.
This also allows for a certain level of autonomy in the teams.
So microservices are about resilience, speed, and flexibility.
They are backbone of the cloud native innovation.
But microservices is not a silver bullet.
They come with their own challenges, right?
First is interservice communication.
Every service call introduces network latency, anywhere from 10 to
hundreds of milliseconds per call.
You also need service discovery.
A good API, versioning and mechanisms like circuit breakers and retry logic.
Second, data consistency management.
In distributed systems, transactions become far more complex.
Eventual consistency models.
They need careful design.
Synchronizing data across services can be difficult, and patterns like saga are
often required for complex workflows.
Third is the operational overhead Microservices demand, sophisticated
monitoring, logging, distributed tracing, and observability.
There are simply more moving parts, more infrastructure to manage.
So this also increases the cognitive load for development teams.
So while microservices unlock cloud native innovation, they also require
a higher level of maturity, both organizationally and technically.
And as someone famous once said, with great power comes great responsibility.
So now let's look at microservices in the context of DevOps.
Integration.
Microservices don't operate in isolation.
They depend on a strong platform foundation.
First, being the orchestration of containers tools like
Kubernetes are essential.
They provide service me mesh integration, automated rollouts and rollbacks,
and self-healing capabilities.
And without this operating microservices at scale quickly becomes unmanageable.
Second is the CICD pipeline.
Sophistication with independent service pipelines build times are reduced by 60
to 80%, and teams can deploy in parallel use feature flags to control releases, and
even run automated cross service testing.
And third is the observability infrastructure with dozens
or even hundreds of services.
We need distributed tracing, centralized logging, and service
level metrics to understand system behavior and troubleshoot effectively.
So microservices and DevOps, they go hand in hand.
Without this integration, the promised benefits of
microservices cannot be realized.
Now let's talk a little bit about the monolithic architecture.
So the monolith is a single unified code base, and despite what we often
hear, monolith offers some advantages, which is that they make development more
efficient, especially for smaller teams.
Onboarding is quicker, debugging is more straightforward, and testing is
simplified in a unified environment.
So ramp up time for new developers is usually reduced by up to 50%.
They have performance advantages in the sense that like the in-process
method calls are a hundred times faster than network calls.
The database connection pooling improves efficiency by about 40 to 60%, and
because there is no network protocol overhead, you get much better raw speed.
So monoliths deliver simplicity, cohesion, and speed when
applied in the right context.
So when does monolith excel?
There are a few scenarios where monoliths shine.
One is the early stage applications.
When we are building MVPs or prototypes, the time to market is the priority.
So teams are small, often fewer than 20 developers and domain
boundaries are still unclear.
So here a monolith will accelerate delivery when there
are predictable workloads.
If you have a stable user base with known growth patterns or internal
tools with limited concurrency, a monolith is easier to manage.
Strong consistency requirements.
I think financial transactions or business processes with complex data
dependencies real-time consistency and simplified transaction rollback
are much easier in a monolith.
In all of these scenarios, monolith gives us speed, cost, efficiency,
and reduced operational overhead.
But monoliths do have some limitations.
As applications grow larger, monolith become harder to manage resource over
provisioning, it can lead to costs that are two to three times higher Development.
Speech slows down by 20 to 30% each year in a large complex code base, and this is
where the balance tips and microservices begin to offer clear advantages.
So now we get to the million dollar question.
At least the question worth hundreds of thousands of dollars.
How do we decide?
The first step is to assess organizational readiness.
Team maturity is critical.
Monolith fits small teams under 20 developers with basic CICD
and limited cloud experience.
Whereas microservice requires larger teams, often with over 50 developers,
with advanced automation and distributed systems expertise and the
cultural indicators, they also matter.
Is ownership centralized or distributed?
How is the communication?
Is that synchronous or asynchronous?
Is the organization conservative or experimental?
And does it have a strong learning culture?
So teams with distributed ownership, comfortable with asynchronous
communication, experimental and learning mindset would be more
adept to incorporate microservices.
So the bottom line here is that even before technology look at the people
and culture, architecture must align with the organizational maturity.
Next we need to evaluate our technical requirements.
Look at the application complexity, what are the number of business
domains, integration points and consistency requirements, and then
look at scalability projections.
How quickly will the user base grow?
How variable are traffic patterns and what geographic distribution will be needed?
Because at this stage, it's critical for the organization to be realistic,
overly optimistic forecasts or assumptions drawn from limited data.
It can mislead the teams and result in wasted effort.
And you also need to consider cloud platform capabilities, which is the
container orchestration, service measures, serverless integration, managed
database, and cost optimization features.
So a decision between monolith and microservice is just not
about software architecture.
It's also about the maturity of your cloud platform.
If the platform is not ready to support microservices at scale, then the
architecture will struggle no matter how well designed it looks on paper.
So with these steps, you'll be able to assess whether microservices are
a right fit for your organization or if sticking with a monolithic
approach makes more sense.
So one thing we need to keep in mind though is that
architecture is evolutionary.
It doesn't have to be a leap.
It can be a journey.
And a typical roadmap that I would recommend to teams to consider would look
something like this, which is to start with the modular monolith or assist the
current system, and then use domain-driven design to identify logical service
boundaries, incrementally extract services using patterns like strangler, fig, or
optimized modules within the monolith.
And then build operational capabilities, observability
automation, and CICD in parallel.
On an average, a full migration to microservices takes 18 to 24 months.
Optimizing a monolith with future flexibility can take six to 12 months.
Both are valid, but it depends on the context.
Let's let me share a real world example where we use
this decision framework, right?
In our domain, we had a monolithic routing application that
was slowing everything down.
Scaling was difficult, deployments were bottleneck, and along with the technical
lead, the team's maturity and culture were ready to adopt microservices.
The solution was to decouple the routing function into modular microservices.
We created reusable libraries, symphony plugins, and a DR template, which
we used to record our architectural decisions, and we implemented service
auto wiring and internal utilities, which was used to streamline development.
And the results were powerful.
The deployments became three times faster.
Code to production speed improved 21 times, uptime increased by 8.5%.
The meantime to recovery was cut in half, and the system scaled to handle
tens of millions of contacts per month.
And this transformation wasn't just technical, it improved AC developer
efficiency, maintainability, and the overall business outcome.
And what made this possible, right?
Three things.
One is architecture and planning, breaking requirements into like clear technical
tickets, designing decouple structures, and then documenting those decisions and
the implementation itself, where building share utilities like feature toggles,
cache and logging, and then fixing deep framework issues and leading through
code reviews, resolving blockers for the team, and then knowledge sharing.
So architecture is ne never just technology.
It's part people.
Processes and leadership working together.
So realizing this and facilitating this is what an experienced professional
is expected to bring to the table.
Now having spoken about two sides of the coin, I would be remiss if I
don't elaborate on the current state.
The truth is the conversation is moving just beyond monolith
business microservices.
S because there are advancements that teams and organizations
should be considering while addressing the business needs.
And this is not an exhaustive list, but I would highlight these to anyone
considering their roadmap, which is like the serverless or function as
a service combines benefits of both.
It is even driven with minimal overhead and automatic scaling.
Modular monolith maintain a single deployment, but it
enforces clear boundaries.
So this reduces complexity while keeping migration options open.
And just like AI is penetrating every other aspect, AI driven architectures
are also emerging where it uses machine learning to predict, scaling,
recommend service decomposition and intelligently route traffic.
The bottom line is that the future of architecture, it is not.
Binary.
It's nuanced and it's evolving.
To conclude, let me leave you with four takeaways.
First is that architecture is evolutionary.
Start simple and then evolve as a system and organization demanded.
Second context matters more than trends.
So Joe, don't just copy Netflix or Amazon or any other company that has made it big.
Make decisions based on your own needs and or your own reality.
And third is that hybrid approaches often win.
Combining elements of monolith, microservices, and serverless
can deliver the best outcomes.
And finally, and probably the most important business value
drives architecture, the most elegant technical design.
It's meaningless if it does not serve business goals.
Thank you once again for joining this session and allowing
me to share my thoughts.