Some days ago, there was an intense debate in AIFW on a Forbes Article. The Article was on how India is leaving behind rest of the world in adopting technologies to aid in governance. Since India Stack is resting primarily on Aadhar, its detractors immediately pounced on the article. The comments showed the lack of knowledge of the Software Development Process. Like personal finances, the software also has goals to achieve. The Aadhar is essentially biometric digital ID system. That is the goal for Aadhar. Its a software, which tells biz the customer is exactly the same person he pretending to be.

There is a well-established software development process to achieve that goal. Many coding humor sites portray a coder building gobbledygook because of disregarding this process. The coding is a small part of the software development process. In essence, coding is a small part of 80:20 rule of software development.

If you give me 6 hours to chop a tree, I would spend the first 4 hours sharpening the saw.

I don’t know who said this

The software development process also follows the above-said principle. It consists of following steps.

  • Requirements
  • Architecture
  • Design
  • Coding
  • Testing
  • Deployment

Requirements:

The first step in the software development process is to get the requirements of the system to be built. Here customers give all features required. The requirements have a significant bearing on architecture. It’s for this reason, Linux kernel development has a release cycle of 6 months. Feature integration takes time to implement. Some significant feature can bring a total change in architecture. For example, WordPress brought this feature called blocks. As a result of this small addition, It brought sweeping change in editor architecture. Bjarne Stroustrup wanted a feature called classes introduced to his version of C. Due to that small addition, It changed C++ into an object-oriented language. It’s because of this reason, requirements need to be collected properly.

Architecture:

This is the second step in the software development process. This is the guts of the software. Once requirements are drawn up, the architecture is built. Satoshi Nakamoto’s whitepaper is the architectural blueprint of Bitcoin. The intent system in Android is also an architectural component. The Linux kernel is another implementation of monolithic kernel architecture. The architectures of each software are always unique. The architecture of Windows OS and Mac OS are different. The architecture of WebAuthn and Aaadhar are different. Aaadhar does biometric matching in its servers. WebAuthn does that biometric matching in the client device. But both are authentication mechanisms. In simple words, Architecture is like the skeletal structure of software.

Design:

Finer design begins after the proper architecture is set. This phase oversees all the design aspects. Ex: programming language, the code structure, the modules to implement, coding style, the algorithm, the kind of development mechanism, the testing framework etc… Without guiding framework of architecture, the design is useless. Since design looks at finer prints, there will be reuse of design elements of other projects. Here knowledge of various design patterns will aid.

For example, I had to implement a screen in SKDRDP app. The screen contained the EWI & Saving amounts and names of members. The data EWI & Saving money was prepopulated. Absent member or lower collections – then this data needs to be updated. Apart from that, the totals also needed to be displayed to aid the collector. The logical way for this was to implement view holder pattern in custom cursor adapter instance. The adapter would hold the most updated data, hence asking it for totals was the correct thing to do. For changing algorithms on the fly, the strategy pattern would be useful.

Coding & Testing:

This comes at the end. Once the design phase is over the coding and testing phase begins. This constitutes the final 20% of work. Nothing meaningful can be achieved by coding if previous phases are not done. In the new work order, this is the new blue collar job. The code is tested before going to deployment. The bug hunting happens in this phase. But bugs can be introduced in the previous phases too. The performance enhancement happens in this phase.

Conclusion

All the great software is built by following some type of software development process. Shortcircuiting it guarantees failure. Coding &Testing is always the smallest part any software project. The code style, design patterns, coming up with architecture is not taught anywhere, not even in MITs and IITs. These things are learned by experience.

Hence, it is better to critique a software based on architecture or design. That ability too comes with experience. Its impossible to escape bugs, hence report it if you find one. Read some really good books like mythical man month, programming pearls, code complete 2. These books would definitely help in getting stripes of being a critique of architecture for sure. If the process detailed above feels like the waterfall model, good guess. The process is a modified version of the waterfall model.