Review this plan. An internal claims application with 220 named users and about 400 claims a day is to be re-architected into eleven services on Kubernetes with a service mesh, Kafka between every service, CQRS with separate read models, and a new front end. The team is five engineers, none of whom has run Kubernetes in production. The stated driver is that a release currently takes three weeks. What would you remove, what would you change, and what would you leave alone?
Show the full answer Hide the answer
What is actually required
One number settles most of the plan: 400 claims a day is about 0.005 claims per second. At that volume, no part of this design is justified by load, throughput, or availability maths. The stated driver is release time, which is a delivery-pipeline property, not an architecture property.
So the requirement is: reduce release lead time from three weeks to days, without adding operational surface that five engineers cannot carry.
What I would remove, and why it is safe to
- The eleven services. Nothing in the problem statement needs independent scaling or independent deployment of eleven parts, and the team is too small to own eleven deploy pipelines, eleven sets of dashboards and eleven on-call surfaces. Removing them removes the distributed-systems failure modes the application currently does not have.
- The service mesh. Its value is uniform observability, mTLS and traffic control across many services. With one or two services it is a control plane to upgrade in exchange for nothing.
- Kafka between every service. Asynchronous messaging between components in one transaction boundary converts a function call that either works or does not into an eventual-consistency problem with a dead-letter queue and a reconciliation job.
- CQRS with separate read models. Justified when read and write load differ by orders of magnitude or the read shape cannot be served from the write model. At 400 claims a day, an index is the whole answer.
The one change that matters
Find out why a release takes three weeks, then remove that. Almost always it is one of: a manual regression pack, a shared environment with a booking queue, a change-advisory board meeting weekly, or a database change that requires a DBA ticket. None of those is fixed by any item in the plan, and each of them is fixable in weeks: automate the highest-value regression cases first, give the team an environment it can create on demand, move the approval to a standard-change classification, and put schema changes in the same pipeline as code.
Then, if the structure is still in the way, make one cut along the seam that actually changes independently - typically the document-generation or integration edge - and see whether lead time moves.
What I would leave, even though it looks odd
The new front end. The existing one is almost certainly the reason users route work around the system, and replacing a user interface is low-risk, independently deliverable, and the only item on the list a claims handler will notice. It is also the part that builds the credibility to argue for the rest.
How I would argue this in the review
Not as "this is over-engineered", which reads as a judgement on the authors. As a measurement: ask what each element is sized for, and compare that to the measured load. Then offer a trade: I will back the funding request if the first milestone is lead time below five days with no new infrastructure, because that proves the diagnosis. If lead time does not move, the structural argument gets stronger and we will have evidence for it.
Common weak answers
- "Approve it; the team will learn Kubernetes." Five engineers learning a platform while rebuilding a live application is two risks multiplied, and the application will be down while they learn.
- "Reject the whole thing." The release problem is real and the front end is worth doing. A flat refusal loses the chance to fix either.
- "Compromise on three services instead of eleven." Splitting the difference on a number nobody derived from a requirement produces a smaller version of the same mistake.