The Operating Cost of New Features ๐Ÿ’ฐ

And how you can reduce it over time โ€” keeping your sanity and that of your team.

If you work on a digital product, chances are you are familiar with Retention.

Retention stands for the continued use of a product (or feature) by your customers. Good retention improves monetization, lowers acquisition costs, and gives you an edge over competition.

One of the most popular ways of studying Retention is cohort analysis.

Cohort analysis groups users by batches of time (typically days, weeks, or months) based on their first interaction with the product, and shows how these cohorts stay engaged, displaying the share of users that continue using the product over time.

But you may ask โ€” why are we talking of retention and cohorts?

๐Ÿ“ˆ Feature Costs and Retention

In many ways, the retention distribution is similar to the way development costs behave.

For each feature, you can roughly divide such costs in two steps:

  • ๐Ÿšš Delivery Costs โ€” costs you sustain to develop the feature until the first deliverable.

  • ๐Ÿƒโ€โ™‚๏ธ Operating Costs โ€” costs you sustain to maintain and evolve the feature until...forever!

If you work in small batches and iterate fast (which you should), the line between these two steps is blurred, but the costs follow a predictable distribution nevertheless.

They go from being higher before delivery, to become lower when your team moves on to new initiatives.

Here comes the obvious difference with retention: on the long run, good products want to keep retention high. Good engineering wants to keep costs low.

In particular, good design should minimize both delivery and operating costs. And I would argue that, out of the two, it's vastly more important to minimize operating costs, as they โ€” in contrast with delivery costs โ€” compound over time with those of other features.

Just like good retention makes companies thrive by making customers come back, bad operating costs may sink it, by taking up most of your team capacity.

๐Ÿƒ Operating Costs

In my experience, the bulk of operating costs, for any feature or product area, is caused by three offenders:

  1. ๐Ÿ’ผ Business changes

  2. ๐Ÿ› Bug fixing

  3. ๐Ÿ”จ Tech Maintenance

Let's see them more in detail, together with strategies to reduce their impact.

๐Ÿ’ผ Business Changes

These are feature updates and changes prompted by business needs.

The frequency and magnitude of these depend on the market and the environment you are in โ€” whether you are in a fast growing startup, a consolidated business, or anything in between.

Frequent changes lead to misalignment between what business wants and what the code represents, that is the true nature of technical debt.

Strategy:

  • Invest more time on design โ€” To reduce the impact of future changes on your development costs, invest time in understanding both the current requirements, and potential evolutions. Spend time with stakeholders to map the possible scenarios, and create your design accordingly.

๐Ÿ› Bug Fixing

This is time spent on regressions and mistakes made by developers.

Mistakes are inevitable. The best strategy to reduce their impact is to catch them early and frequently.

Strategy:

  • Make your code safer โ€” To catch bugs early, it goes without saying that an efficient testing pipeline is really important. Based on your team and your codebase, you may also evaluate static typing options (e.g. Typescript over Javascript).

  • Invest in Continuous Delivery โ€” To catch bugs frequently, you should release frequently. Companies that work in small batches are also faster at recovering from regressions (it's been proven).

๐Ÿ”จ Tech Maintenance Costs

This is under the hood work related to the specific design or technologies. Like scaling issues, framework and dependencies updates.

Strategy:

  • Invest more time on design โ€” Just like for business changes, many issues can be solved upfront by better understanding what the business needed in the first place. Many scaling issues happen because developers don't expect something to need to scale, at all.

  • Minimize technology risk โ€” This often means: choose boring technology. For critical product parts, choose tech that is proven, well supported, and works (and fails) in a way that is well understood by your team.

  • Buy instead of Make โ€” "Don't reinvent the wheel" is common advice. If you don't believe something should become a core IP of your company, then chances are you shouldnโ€™t be building it, but you should look for ways to buy the functionality.

๐Ÿ“š Resources

And that's it for this week! What's your experience with maintaining features over time? Let me know in the comments or via email ๐Ÿ“ฎ