This section presents the modernization model that is proposed in this book. You are introduced to the principles that guide the modernization model and a prescriptive set of phases that you can follow to achieve your modernization goals.
A model or a methodology
Before you learn about the modernization model, it is necessary to have a clear understanding of what is a model and what is a methodology. Sometimes these terms are mistakenly used as synonyms. A model defines an approach and is a scheme to do things. A model defines what you need to do, not how to do it. On the other side, a methodology defines every activity that must be done to achieve every step of the model. A methodology can be thought of as the implementation of a model.
This book defines a modernization model instead of a methodology. Modernization can be approached in different ways and it might be hard to track every new technique, but a model can be time-proof. It is your responsibility to adapt this model to your specific situation, keeping in mind the principles, guidelines, and phases that every modernization effort should have.
Modernizing applications is more than just following steps and performing some activities. It implies a set of principles that you must remember. The modernization model that is proposed defines this set of principles and also a set of phases to achieve your modernization goals.
The modernization model is shown in Figure 2-1. As you can see, the model defines an iterative modernization cycle that is repeated as many times as you need. Every iteration contributes to the main objective: build a modern application.
After every iteration, you should stop and reassess the situation. You can change your modernization approach or any specific technology that you selected. The key point is that you can see results early and you can stop as soon as your modernization goals are achieved.
Phase 0: Prepare
This phase deals with the planning that you need for the iteration. You must select the part of the application that you are going to modernize and define how you are going to measure your progress. Every iteration must have planning activities so you can effectively adapt to the immediate situation.
Phase 1: Experimentation
You must try new things in each iteration. You must understand the technologies that are available in the market and determine whether they fit your situation. This phase is about experimenting.
Phase 2: Off and running
This phase is about doing the real work and applying what you experiment with to achieve the goals of the iteration.
Phase 3: Evaluate and expand, future thinking
This phase involves analyzing the work that is done so far, including all previous iterations. In this phase, you can see how to introduce new technologies to enable greater flexibility in the modernized application. This phase is dedicated to analyzing how to expand the current functions of the application.
Phase 4: Deployment
You must deliver the software as soon as possible. Every cycle ends with working software. You must carefully select the deployment strategy to reduce risks.
The application of these principles can help you with the modernization project, especially when you must face specific unexpected situations and make important decisions.
Iterative and incremental process
The modernization process can be thought of as an iterative and incremental process. It is iterative because the whole project can be separated into smaller projects that are easier to manage and faster to finish. It is incremental because with each finished iteration, you make the application more modern, one component at a time. This is also called an agile approach.
Sometimes, people that are involved in a modernization project try to follow a “big-bang” approach and end up being overwhelmed or frustrated. So, with each modernization project, remember to divide and conquer.
Things change. What is cutting edge technology today can be obsolete in a matter of a few months. To keep yourself modern, make it a habit to read and research modernization theory and technologies. Read about the latest tendencies and try them. Go to seminars and conferences. Talk to your colleagues and look for successful experiences (or failures) about applying modernization approaches or technologies.
Modernization is not something that only you are dealing with. It affects many companies, platforms, and programming languages. Find time to experiment with technologies. Create proof of concepts to both learn and to prove the technology in your environment.
Automating what you can
Occasionally in a modernization project, you find yourself doing the same task over and over again. Think about how you can automate these steps. There are always better ways to do things. Look for commercial modernization tools or create them yourself.
Testing, testing, testing
Tests are the only way to ensure that you are not breaking anything that was not already broken. There are plenty of different testing approaches that you can use in your project. Here are two of the most common ones:
This type of test focuses on comparing the results of an application against a pre-established base line, in this case, the original application. One key aspect of this type of test is that you do not need to understand the system before testing it. This can help when you are starting your modernization project and your comprehension of the code is not complete.
Automatic unit tests
With unit tests, you can test a small part of the application. Unlike regression tests, unit tests require more understanding of the code that you are testing. So, start creating automatic unit tests as soon as possible. Unit tests must be designed in a self-configured way, meaning that you should not need to configure anything before running the tests. Also, the units must be able to run fast. You might need to run them after every compilation.
All of these approaches can complement each other, so figure out a way to use them in your modernization project and automate them. Remember, you should be able to run your tests fast and often; it is the only way to feel more confident while changing your code.
Do not overanalyze
Modernization is about experimentation. Sometimes fear can derail your efforts, so do not be afraid and do not overanalyze things. Start working as soon as you can.
The old code that you are modernizing causes surprises every occasionally, no matter how much you analyze it. Remember the iterative and incremental nature of the process and plan and analyze in the same way.
Modernization projects must be agile, so focus on avoiding activities and documentation that do not add value to the process. Keep in mind the following agile principles:
Deliver working software frequently.
Plan your iterations in a way that you can deliver working software fast and frequently. Your executives must believe in the value behind a modernization project, so do your best to deliver value to them in early stages of the process. A true agile project is broken down into two-week iterations. You are continually and regularly delivering progress. However, do not get hung up on breaking things into the smallest units possible. The purpose is to be flexible and deliver small incremental updates.
Focus on the software over documentation.
Avoid any documentation that does not add value to the modernization process. Look for dynamic documentation that can be easily maintained and reused for different purposes. There are many content management systems that can help you create collaborative and dynamic documentation. Using a tool such as a wiki can be useful because it allows the user community to contribute to the documentation effort.
Simplicity is essential
Keep things as simple as possible. Resist the temptation to add features that might be used in the future but are not needed immediately. Unnecessary complexity is a source of bugs that can damage your process.
Give continuous attention to technical excellence.
Do not forget that modernization is about improving. Focus on applying better practices and technologies. Become an advocate of excellence. Promote preferred practices and transmit your knowledge. You must help others to understand the importance of doing things correctly.
Business people and developers must work together.
Build good communication lines between developers and business experts. The
application that you are modernizing is what supports the business. Do not underestimate the contributions that non-IT personnel can make to the project.
Always use modern tools
Stop using obsolete tools. Modern tools help you do things faster and better than before. Modern tools are valuable resources that can help accomplish amazing tasks. Do not let your current tools stop your modernization journey.
Naturally, you are more productive with tools with which you are familiar. Do not mistake this advantage of your familiarity as proof of the superiority of the tools. Changing tools require a period of adjustment before their productivity gains are realized. With time (and often it is not much time), modern tools allow you to be even more productive than before. It is vital to attract new talent to the organization, and new developers feel comfortable with tools that resemble the tools that they use. “Green screen” development tools can give the impression that you are using obsolete technology, so avoid using them. Many developers see significant productivity improvements, normally 20 - 50%, depending on each developer, by switching from a green-screen based development environment to a modern integrated development environment (IDE).