You’ve acquired a codebase; let’s outline the situation you’re likely experiencing.
You’re tasked with extensive work within codebase technologies you’ve never seen before. Maybe the codebase has been abandoned. Perhaps key developers have left the organization without a knowledge transfer plan. You may be part of a group that has been tasked with taking it over and rewriting it or modernizing it. All you know is that you have plenty of learning to do and not enough time to learn it. How do you approach it?
Software-intensive systems are generally hard to understand. They contain source code, databases, configuration, and many other artifacts. Often they are very intricate and detailed, and it is hard to get an overview of them. If we are lucky, there are people we can interview who can act as guides as we learn more about the system. But, let’s face it, the deep history or knowledge that people acquire when they work in a system isn’t always easily accessible, and that is what we really need as we start work, no matter what that entails. We must understand where things are, how they work, and the background necessary to work with them.
Although understanding the systems we work in is a vital part of our work in software development, it is rarely seen that way. In fact, it is hard to find much guidance in this area. Moreover, once we are on the road toward understanding a system in depth, we are often faced with making the system workable – able to support the work that needs to be done efficiently.
Over the past year, we’ve been working to fill these gaps by documenting Patterns of Systems Renewal; they fall into two categories:
- Understanding systems that aren’t new but are new to you
- Bringing existing systems to a workable state
The patterns cover a variety of activities, from code reading and interviewing/investigation techniques to the work strategies that make it possible to continuously deliver value with little prior experience of the code you’ve inherited.
Within the next few months, we’ll be publishing this work with the goal of you being able to use it as a resource regardless of whether your team is encountering a completely unknown codebase, or you are just onboarding people who are unfamiliar with your system and you need to transfer knowledge to them rapidly.
If you’d like to be notified when our Patterns of Systems Renewal is published, please email the author, Michael Feathers, at firstname.lastname@example.org with your email address in the subject line to subscribe.