Digital Transformation has been the focus of most of my 25+ year professional life. In that time, I’ve been involved in countless software development projects across many industries for companies of all sizes and levels of sophistication.
In many cases, my client and business counterparts had a limited appreciation for the Total Cost of Ownership (TCO) of a custom application. They often failed to consider the application’s entire lifecycle in their business strategy. In my endeavor to advise my client-partners over the years, I have found TCO to be more of a “mindset problem” than a math problem.
Here I will provide three pragmatic mindsets to help you approach the TCO of your custom application. First, the Inventor Mindset will help you through the process of building your one-of-a-kind custom solution while the Homeowner Mindset will help you manage and extend its lifecycle. Finally, the Ugly Baby Mindset will allow you to deal with obsolescence and plan for the application’s next generation.
1. Inventor Mindset
The term “custom” inherently means one of a kind. This thing you are building has never been built before. This is an adventure into the unknown – both technically and non-technically. You know the stories of famous inventors in history: they didn’t get it right the first time, and neither will you or your team. Having the mindset of an inventor will help you adapt to this environment. It may be helpful for you to refer to work items as “experiments” instead of “backlog items”. Adapt your mindset to think in terms of experiments.
The software industry has gravitated to agile delivery methodologies over the last ten years as a best practice for delivering software projects. The Inventor Mindset helps you thrive in this environment, especially if you are new to this style of execution. Working on the right priorities is key to success. Focus on the highest value and most complex experiments first. Remember that there is no such thing as a failed experiment, just unexpected outcomes you can learn from. When expected outcomes become the norm, maybe you’re ready for production. Release that MVP and start adding business value!
2. Homeowner Mindset
Have you ever heard the phrase, “Every home is a fixer upper”? Every homeowner knows it’s true. Likewise, a custom application is like owning a home. If the water heater breaks or you want new siding, you can’t call the landlord to get them fixed. Those costs are yours to bear.
In the software world, the equivalent of renting your home is Software-as-a-Service (SaaS). With a SaaS product, the cost to maintain a platform is spread across the subscribers. With a custom solution, you own the total cost of ownership. Recognizing this will help you understand and plan for these costs more effectively.
Where I live, we sometimes refer to homes as a “teardown”. These are typically cheaply built homes from the 60s or 70s that have not been well maintained. These homes often get razed rather than remodeled. At the same time, there are many lovingly maintained properties that are over 100 years old and in great shape. The typical lifespan of a custom application is 5 to 7 years. This can be longer for internally facing applications or shorter for applications involving emerging technologies. If this seems like a short timeframe, consider how frequently new operating systems (or even new cell phones) are released.
A good lifecycle management strategy (with Managed Services) can extend the life of your application in the same way maintaining a home gives it longevity. Lifecycle management is more than just fixing things when they break, it is a matter of continuous improvement that addresses technical debt, changing business conditions, and new features.
This doesn’t mean that a custom solution must be expensive to maintain. Consider that SaaS subscribers are also bearing the cost of sales, marketing, and other overhead not necessarily needed when you build your own solution. A well-architected and built custom solution can be very cost-effective to support, but you do need to consider the complete lifecycle.
3. Ugly Baby Mindset
Product owners can be just as protective of their custom solution as a parent is of their baby. This is especially the case if they have been involved with the product for much of its lifespan. The Ugly Baby Mindset is about accepting an unfortunate reality with grace and poise. Denial is not a healthy response.
There are times when you need to rewrite an application. If you’re unsure, just ask your technical team. They’ll tell you. This scenario is inevitable and will happen sooner if you cut corners on the initial build and don’t address lifecycle management.
If you’re a Product Owner or other decision maker, you will be tempted to ignore your technical team and instead ask them to update the existing application. Be wary of this temptation. It could be that you’re in denial, especially if you find yourself uttering phrases like this:
- “We don’t have time to rewrite the software.” You don’t have time for an epic crash and burn either. Sometimes you have to slow down to speed up.
- “We’ll fix the code this time.” How do you know this time will be different? Optimism bias can be a dangerous paradigm.
- “We can’t afford to rewrite the software.” Chances are you will spend more fixing what you have.
- “The code can’t be that bad.” Actually, it can. Trust your team when they tell you it’s that bad.
- “The software is not that old.” Is it older than your cell phone? Your computer? Your car?
A rewrite is not an end-of-the-world scenario. It’s often a natural part of the life of a custom solution. Accepting your reality (Ugly Baby Mindset) allows you to work on realistic options and focus on potential positives. However, a rewrite is not a start from scratch scenario. At a minimum, you have a proven use case and very likely have identified tangible business value. The knowledge you’ve gained is reusable, and (sometimes) so are portions of the code.
Common Rewrite Scenarios and Their Causes
- Premature Launch: If your rewrite scenario happens sooner than you expect, it could be that your current state is a beta, pilot, or first version. Consider how much you’ve learned in that process. All that knowledge and experience will expedite the development of version 2.
- Outdated Technology: A rewrite is often precipitated by outdated technology. If this is your scenario, then it’s likely your application has had a decent lifespan generating significant business value. Focus on this business value as you consider your future state. It’s likely that value will continue to justify future investment.
- External Factors: A rewrite might be a response to external market factors or opportunities. Maybe you’re going from one technology (e.g. desktop) to another (e.g. web or mobile). Emerging technologies like Augmented Reality or Artificial Intelligence might enable new business models. Ask yourself if this move could create opportunities for additional ROI to justify future investment.
Regardless of your scenario, a rewrite is an opportunity to take what you’ve learned and improve. Once you accept that your baby is ugly, you’re more easily able to focus on a better future. Remember the story of the ugly duckling that became a beautiful swan? Think of this scenario as a transformation into something better.
Success Depends on Your Mindset
Creating a custom solution is complex and challenging, but it’s also rewarding and worthwhile. This one-of-a-kind solution is yours to imagine and create. During initial development, thinking like an inventor will help you anticipate and adapt to unexpected outcomes. Once your product development stabilizes, your focus should shift to that of lifecycle management. The mindset of a homeowner (you’re not a renter) will help you budget for ongoing maintenance and plan for major updates or additions. Finally, there are times when a rebuild is warranted. Accepting the reality that your “baby” might be ugly will help you evaluate your options with clarity and avoid the pitfalls of denial.
When building custom applications, having the right mindset will help you plan for the unexpected, optimize the lifespan, and address obsolescence with poise. With a pragmatic understanding of your application’s complete lifecycle, you will be better equipped to make value-based decisions that optimize your Total Cost of Ownership.