> [!hint] Listen here > https://open.spotify.com/episode/6FDklu4LsC1IkupweLDM2h > > ![[Jan Hegewald - LAM.png|400]] # Advices for handling legacy > [!quote] Jan Hegewald > Software modernization isn't a matter of black and white, distinguishing between what's new and exciting versus what's outdated and considered legacy. In reality, there's a continuum between these states. Recognizing this continuum is an essential first step. > > This understanding leads to my second recommendation: be mindful of the need to invest in any software that is in production. The goal is to either slow down its progression towards becoming legacy or, ideally, prevent it altogether. This proactive approach helps avoid the necessity for extensive, disruptive migrations down the line. Also, remember the [[Boy Scout Rule]] - this proactive approach ensures sustainable software development and effective legacy management. ![[Boy Scout Rule definition]] # Key takeaways ## 1. Defining [[Legacy]] Software Legacy software fails to meet current requirements, lacking adaptability, scalability, or reliable operability. It becomes problematic when it no longer serves its intended business purpose or becomes inoperable. ## 2. The Role of Business Value Modernization efforts should always begin with the business value in mind, addressing the software's ability to meet current and future business needs. Even software that is not maintainable might be acceptable if it does not require changes. However, changes driven by business or regulatory requirements necessitate a reassessment and potential modernization to ensure the software continues to serve its intended purpose. ## 3. Identifying Levels of Legacy Distinguishing between **micro and macro legacy** issues can guide the modernization process. Micro issues might include inadequate test coverage or suboptimal coding practices within a service, whereas macro issues involve more significant structural problems, such as poor data storage practices or unclear domain design. ## 4. Strategies for Avoiding Legacy Pitfalls Proactive and systematic investment in software architecture and continuous modernization can prevent software from becoming outdated. Allocating a portion of development time to addressing technical debt and preventing legacy formation is crucial for maintaining software relevance and operability. ## 5. Justifying Modernization to Business Stakeholders It's crucial to articulate the impact of legacy systems on business operations, including effects on customer satisfaction, scalability, and operational efficiency. Engineers must communicate the importance of addressing technical debt to non-technical stakeholders, using quantifiable metrics where possible to justify the need for modernization. ## 6. Approaching Legacy Modernization Effective modernization requires a balance between understanding the existing software's problems and the criticality of its services. Estimations should be realistic and flexible, acknowledging the inherent uncertainties in dealing with complex, legacy systems. ## 7. The Learning Opportunity in Legacy Working on legacy systems offers valuable insights into software design and maintenance, highlighting the importance of making informed decisions to avoid future legacy issues. ## 8. Cultural Perspectives on Legacy The perception of legacy software varies among developers, with some seeing it as an opportunity for learning and improvement. It's important to frame legacy modernization as a valuable and integral part of software engineering, essential for ensuring the long-term fitness and value of the software.