One of the most challenging piece of software development is the integration phase. In the entire software development process: design, coding, integration, testing, coding is the easiest phase. It is because if you allocate time to think through before you write your code, chances are you write code that is of high quality. Integration is the toughest part. Because often time a small part of your change has to work with the entire system that have many third party components that you have no control over, many legacy components that have to be in the system, and many components that you and your team have written separately.
And because of that, many software development veterans advocate continuous integration. It enforces discipline among developers. In Martin Fowler’s article, he said it is communication among developers.
To put a continuous integration in place is difficult, especially you have a huge legacy code base. When integration is a painful phase, you know you have a problem. And in today’s environment when everyone wants things to get done fast and cheap, we tend to defer fixing the problem. That is the real issue. Recognizing a problem but putting it off as if you can move on with that problem unfixed.
In the financial industry, reliability is the key. And to increase high reliability on our code, continuous integration is an essential part. And the testing that is part of the continuous integration process should be automated. It has to be ready to be fired off as soon as the build is complete.
When you put in a new feature in your financial switch to accept EMV messages, you need to be sure your non-EMV transaction still works as before (or as you expected). And you should not need to have to allocate expensive resources/hardware just to send a message through your development switch to regression test your feature. It should be as easy as just firing up a card processor simulation and send out messages to your newly compiled switch. All you need for testing should be just some pre-setup messages.
How often financial institutions, and switches do that? I have not been in this industry long enough to tell. I know they are doing it, but is regression testing the last piece they (dreaded) do, or is it part of their frequent integration process?
Testing is more important than coding, because it tells you if you have broken something that has worked previously. A new feature is nice to have, but existing functionality is critical to have.
It is important to have the most easy-to-use,”high-end” IDE for developers (yes, you really need to setup the right environment to get the productivity level you expect from software developers), but it is equally important you put in place an integration process that includes regression test. It affects the quality of your end product, which your company’s future depends on.
And it is hard to get continuous integration in place especially you have a huge legacy code base that is very difficult to test. But you have to start somewhere. The sooner you can start, the sooner you get over it. Yes it is painful because the team I am working with is going through the beginning of continuous integration. It is painful to automate builds. It is hard, but I think it is worth it.
Really, I think when I went for a computer science degree, I always thought the hardest part of being a software developer is learning to code. With more than two years into this industry, I realize that the hardest part is to manage the process to ensure you have a high quality product. You can have the most coolest product on a most advanced platform technologically, but if your product only works 50% of the time on these cool features, it would not fly in the financial industry. And probably not long as well in other industries.
Same goes with life in general. You can be most talented, but if you are going to excel in the corporate world, you need to learn to work with different people often.