Trailblazing the first delivery of a software system requires courage and conviction, especially on projects that replace existing business critical software. When I’ve been acting as system architect I’ve employed a number of tricks in order to structure functionality and technical solutions in such a way that we can complete these early deliveries without sleepless nights. The most important solution is to find a subset of the functionality that can be used with the rest being completed and investing in bridges from the old to the new.
In this blog post, I will explore the topic of replacing business critical software step by step.
As an architect, I haven’t always had the joy of seeing my projects through all the way to completion. But of those projects, the ones where I can see the software in the hands of my users early on are the ones I enjoy the most.
This article is not about streamlining a working delivery team to get from releases every few months to continuous deliveries. Many others talk about that. This is about how to get to production early the first time on a greenfield project. I will illustrate with two of my favorite projects.
Getting to the production the first time on a greenfield project takes courage and conviction, especially when you’re replacing part of business operations with a new system. Project stakeholders have many reasons to wait and often see no compelling reason to deliver a partial solution early. But when you get to production the first time, it’s like the sun has finally risen. The priorities and discussions in the project totally change. Now it’s real!
The first project I want to talk about was one I worked on with the Norwegian electricity transmission system operator, Statnett. We spent 4 years replacing the system that handles all the reserve capacities of electricity deliveries on the Norwegian grid, but less than a year after the contract was signed, the users started using our software to control the power grid. Without any sleepless nights. Actually, they considered it such a non-event that they forgot to inform the development team about it!
The second project I would like to talk about is an app for internal mobile workers in the private sector. As it is a project which is part of the competitive strategy of my customer, I cannot mention the purpose of the software, but I can describe techniques and technologies.
The mobile workforce app is especially interesting. Just like with Statnett, we were replacing an existing system in business use and integrated it with other business functions. But in this project, we were live with the first users after 3 months, most of the user base after half a year, and the remaining users after around 9 months.
Here is what we did:
- We realized that the journey is going to feel long and temporary investments made to ease the journey are often worth it. In both cases, I made sure the new system integrated well with the old system. I cannot stress how much it lowers everyone’s stress level when you can say: 'why don’t we try the new system and if you experience problems, you can continue the very same process in your old system.'
- Isolate functionality that is small enough to deliver with a small fraction of the total project effort, yet interesting enough to care about. In the case of Statnett, we were able to replace the most used feature in the old system (while preserving the path of retreat). Even though the feature was a small part of the system, it was a large part of the usage. In the mobile workforce app, we found a business process that was missing in the old system and implemented this first.
- Don’t wait for the rest of the world to complete their work. All projects I’ve been on have been part of a larger landscape of change where several of your dependencies are still under development by other project teams. In the case of the mobile workforce app, we were dependent on core data that was to be owned by a system still under development. Realizing that our integration model would, in any case, be based on synchronizing copies of data, we decided that our copy of the core data would have several sources:
- A manual CSV file exported by a SysAdmin.
- An automated dump from the legacy source which we established after half a year.
- A feed from the new system (which is still not completed).
- Spend effort making your system faster to deploy and easier to monitor. When you make a greenfield project, there is actually nothing that stops you from creating the production environment immediately (as long as you don’t put production data there before it’s hardened!). I’ve never regretted spending a few extra hours making it easier to deploy a new version or making my logging smoother. Currently, I receive error logs on Slack with a clickable stack trace and a link to the user who experienced the problem.
When you do a major rehaul of a building, you may end up spending a lot of your effort setting up the scaffold to make sure the work is safe and effective. When you build a new software system, you should do the same!
If you do, you may be able to get users on your new system sooner rather than later without losing your sleep.
And when you get actual users to use your system the primary question of the project changes from “when is it all going to be done” to “what can we do next to deliver value?” And that’s much more fun.