One of the most fundamental concepts in finance is the notion of compounding interest. Put some money into an investment that makes X% of interest per year, and you get exponential growth of your investment! As X grows, your return can go from meager to handsome to mind-boggling. Everyone knows this, but what’s less obvious is what this has to do with software development and the compounding value of developer time.
How Developer Time Compounds
A skilled development team doesn’t merely fix bugs or add features one after another, though it often looks like that from the outside. Both mediocre and stellar teams practice Agile development methodologies, working through stories in a backlog. In a hypothetical world where two teams are building the same product, you may not notice much difference between the two teams. The stellar team may have better communication and planning. But the pace of development may be the same, or the stellar team may even deliver more slowly.
Over time, though, the teams start to diverge. The mediocre team starts slowing down, missing estimates, having to rework code. The stellar team speeds up over time. New features or behavior in the ballpark of existing functionality get low estimates and “yes, and” responses. The mediocre team gives the same features large estimates and explanations about having to rework code. More often, both teams have their wins and their losses, but the proportion matters in software. A lot.
Why is that? The stellar team is proactively searching for opportunities that can save the project time or add flexibility in the long run. The stellar team is managing risk proactively, avoiding more of the pitfalls. The stellar team — unasked, and whether you know it or not — is automating repetitive tasks. They’re making invalid states unrepresentable and investing in general, composable abstractions that multiply their value with existing and future work.
Because of these things, the stellar team’s efforts compound. Each incremental effort toward implementing a feature will be more likely to provide tailwinds (or insulate against headwinds) for future work. The better the team, the better the interest rate of investment in the software that team is building. The worse the team, the worse the interest rate. It can even go negative.
Bending the Cost Curve
Don’t take these nonlinear effects lightly. One of the primary activities of a technical consultant, tech lead, or developer is to proactively consider how to better bend the cost curve of the project toward success and outsize returns for their organization or client. “Bending the cost curve” means looking for opportunities to exploit and risks to manage. This will maximally drive up the project “interest rate” and increase the frequency at which that interest is earned. Or, it may guard against possible sources of risk to systematically improve the rate at which value is delivered over time.
To get the best results from this dynamic, your team must align every element of the development process, team norms and expectations, and individual contributor practices and mindset. I tend to think about this across three classes of dynamics.
Impact: Seek opportunities to amplify the team’s impact by seeking out designs, abstractions, and infrastructure that will make future work easier, not just accomplish the task at hand.
Acceleration: Compress the timeline in which interest is accumulated. Earning 6% every 6 months is more than twice as good as earning 6% a year, over time. It’s almost three times better in returns over 10 years. Shortening feedback loops has a similar effect. Realtime feedback from type systems, fast test suites, and fast development machines enable more rapid iteration. They also provide a compressing effect that yields nonlinear improvements over time.
Risk Management: Guard against risk to mitigate negative outcomes that can derail the team’s hard work. This kind of derail can cancel out gains or damage or destroy the positive dynamics.
Compounding of Developer Time: Examples
Identifying and executing these goals is a subtle business. Additionally, there can be tricky entanglements between them. It’s crucial to use effective opportunity and risk management as you do so. For example, a powerful abstraction that’s hard to debug or reason about will tend to lengthen feedback cycles. This can mean that any impact-related upside of the abstraction is ultimately canceled out or dominated by the consequences of slower developer cycles that slow acceleration. Fortunately, with practice and experience, we can get better.
Here are some examples:
- Impact – Organize work to help tackle surface classes of problems. That way, developers can converge on solving a class of problems instead of accumulating one-offs.
- Impact – Leverage the diversity of thought on your team to think creatively about where opportunities might lie. But, do this without doing too much so as to slow the pace of work to the point that he benefits are outweighed by slower interest accumulation.
- Impact – Implement a healthy human-centered design process with technical feedback to help fold the design to maximize reuse of components and lower-level abstractions.
- Acceleration – Type systems and make invalid states unrepresentable. Fast test suites to get more rapid feedback from the system on the viability of ideas.
- Acceleration – Developers improve basic “computering” skills. This can help speed up the expression of ideas in order to elicit that feedback.
- Acceleration – Use CI/CD and easy deployment to shorten time until a stakeholder can review.
- Acceleration – Practice healthy team mentorship to strengthen these skills across the team, especially with junior developers. This helps further improve acceleration and impact.
- Risk management – Factor stories and organize the backlog to tackle the most crucial aspects first. This reduces the risk of hidden scope leading to project failure.
Delivering Outsize Value to Clients
There are certainly many more general strategies as well as specific opportunities on a project-by-project basis. Seek them out to deliver outsize value to your client or organization!