portfolio Anshul Bisen
ask my work

How I budget engineering time and why I give 20 percent to platform work non-negotiably

Twenty percent of every sprint goes to platform work. The compounding cost of deferring platform investment is measurable in incident frequency and developer velocity.

Every sprint at FinanceOps, 20% of engineering capacity goes to platform work. Not feature work. Not customer requests. Platform: dependency upgrades, observability improvements, CI pipeline speed, infrastructure hardening, database maintenance, and developer tooling.

This allocation is not negotiable. Not by product. Not by sales. Not by the CEO. Not even by me during crunch periods. The 20% is protected because the consequences of cutting it are invisible for months and devastating when they arrive.

The moment the graph stops being theoretical.

Most of the leadership posts in this phase are me compressing scar tissue into defaults. It also builds on what I learned earlier in “Fifteen years of writing code and I still mass-delete my first draft.” I am less interested in performative management language now and more interested in the boring mechanisms that keep teams aligned when nobody is in a heroic mood.

The meeting-room version of the technical scar.

How I Arrived at 20%

The number is not arbitrary. It comes from eighteen months of data at FinanceOps.

In our first year, platform work was unbudgeted. Engineers did it when they had time, which meant they almost never did it. Dependencies fell behind. The CI pipeline slowed from 8 minutes to 22 minutes. Observability gaps meant incidents took longer to diagnose. The accumulation was gradual and invisible until it was not.

Q3 of year one was the breaking point. We had three major incidents in six weeks, all traceable to deferred platform maintenance. A stale dependency had a known security vulnerability. The CI pipeline was so slow that engineers started skipping tests locally. An observability blind spot in the reconciliation service meant a 4-hour outage went undetected by monitoring.

After that quarter, I analyzed how much time we had been spending on incident response, root cause analysis, and emergency fixes caused by deferred maintenance. The number was 30-35% of engineering capacity. We were spending more time fighting fires than we would have spent preventing them.

The Budget Framework

The engineering time budget at FinanceOps is explicit and visible:

  1. 60% goes to feature work. This is the product roadmap. New capabilities, customer requests, and revenue-generating projects.
  2. 20% goes to platform work. Dependency upgrades, CI improvements, observability, infrastructure hardening, and developer experience.
  3. 10% goes to tech debt reduction. Refactoring, migration completion, and architecture improvements that do not fit cleanly into platform or feature work.
  4. 10% goes to exploration and learning. Proofs of concept, new technology evaluation, and engineering-driven innovation.

These percentages are applied per sprint, not per quarter. Averaging over a quarter hides the deferral. If product borrows from platform in sprint one with a promise to pay it back in sprint three, the payback never happens. Sprint-level enforcement is the only mechanism that works.

Defending the 20%

The pressure to cut platform work is constant. Every sprint, someone has a reason why this sprint should be different. A customer deadline. A competitor feature. A board meeting demo. The arguments are always legitimate. The precedent is always dangerous.

My response is the same every time: show me which 20% of our incidents from the last quarter you are willing to accept recurring. Platform work prevents incidents. Cutting platform work means accepting more incidents. If the person asking me to cut the 20% can look at our incident log and say “I am okay with this outage happening again because the feature is more important,” we can have that conversation. Nobody has ever made that argument.

Measuring the ROI

Platform work has a measurable return. I track four metrics over six-month windows:

  • Incident frequency. Before the 20% allocation: 4-5 incidents per month. After twelve months of consistent 20% investment: 1-2 incidents per month.
  • Mean time to recovery. Before: 2.3 hours average. After: 38 minutes average. Better observability means faster diagnosis.
  • CI pipeline duration. Before: 22 minutes average. After: 9 minutes. Engineers run tests locally again because the feedback loop is fast enough to be useful.
  • Developer satisfaction. Before: 3.1/5 on quarterly surveys. After: 4.2/5. Engineers like working on a well-maintained platform.

The incident frequency reduction alone justifies the investment. Each incident costs roughly 8-16 engineering hours in response and post-mortem. Reducing incidents from 5 per month to 1.5 per month saves 28-56 engineering hours monthly, which is more than the 20% allocation costs.

The Compounding Effect

Boring graphs are the prize.

By the time I wrote this, the lesson was bigger than the tool or incident. The job had become setting defaults a team could trust, then proving those defaults in systems like lifeos and bisen-apps. That is leadership work, not just technical taste.

Platform work compounds. Each month of investment makes the next month slightly cheaper. Each month of deferral makes the next month slightly more expensive. The gap between these two trajectories widens faster than most engineering leaders expect.

Twenty percent is not a tax on feature delivery. It is an investment in the foundation that makes feature delivery sustainable. Teams that cut platform work to ship features faster eventually discover they are shipping features slower because the platform is fighting them. The 20% is not the cost. It is the insurance that keeps the other 80% productive.

The twenty percent allocation worked because it was a hard commitment, not a suggestion. Platform work happened every sprint, not as a backlog item that got deprioritized when feature pressure increased. The consistency mattered more than the percentage. Teams that allocate platform time sporadically never build momentum — they start migrations they cannot finish and accumulate partial improvements that create more complexity than they resolve. The fixed allocation forced us to scope platform work into sprint-sized increments, which produced a steady stream of improvements instead of occasional heroic rewrites.