Modularity

Team 6SOs
4 min readJun 19, 2021

Abstract

Software development as a branch evolves continuously. To ensure the stability of evolving software, developers focus on modularity concepts to implement loose coupling and low cohesion. This research article explores why modularity is important and whether one should educate themselves in this principle. For this analysis, both research papers and educatory materials, as well as real-life examples have been considered. This has led to the conclusion and recommendation that a modular approach to software development should be learned and implemented by both new and veteran programmers.

Introduction

Many software engineers are introduced to programming with object-oriented environments and told of the importance of separation of concerns in their code. Furthermore, many programming languages and their frameworks are built on these standards and are held in high regard in education and enterprises. What makes these modularity concepts so important and why would you have to take them into account? This article aims to clarify the importance of modularity and why it can be beneficial for building software over a monolithic approach with examples from my experience.

Related work

In the book ‘Java Application Architecture’, K. Knoernschild (2012, p.4) describes modularity as the disassembly of large structures to make the structure more comprehensible by dividing responsibilities over smaller components. By distributing the responsibilities over multiple components, the behaviour becomes clear, making dependencies and the impact of changes more apparent. K. Knoernschild is surely right about these values being essential in software development as changes happen in programming all the time, making comprehensibility and lowered cohesion in code valuable.

In their research, M. Liu, S. Hansen & Q. Tu (2019) advocate for the importance of modularity in open-source development. They found that in large software projects, working with components instead of a monolithic structure enhances code reusability and knowledge sharing, ultimately coming down to a decrease in programming expenses while maintaining growth and expansion (Liu, M., Hansen, S., & Tu, Q., 2019, p. 14). Furthermore, this underlines the advantages of modularity in software development for large projects. However, the research neglects to assess the impact for small projects.

Analysis

According to K. Knoernschild’s publication (2012, p. 3), many principles and patterns focus on logical design and neglect the physical design of software. The author states that logical design is the focus on flexibility and extensibility while physical design is modularity in the form of deployable packages. According to K. Knoernschild, without a good physical design for the software, dependencies between perfectly logical designs will grow to be unmaintainable and having sparse reusability.

Even though K. Koernschild argues that physical design is an important part of creating any software, in my opinion the scope of a project defines whether time is to be spend on a physical design. From my professional experience, some projects have ceased to expand after programming, especially regarding educational projects as those are not used after completion. Taking modularity into account would not be time effective with a static piece of work. However, in the case of enterprise level software, one should take into consideration that while one’s personal involvement may be finished with the software, another developer could reuse one’s code for another project. Time spend designing is more cost-effective than rewriting code after all.

The research article (Liu, M., Hansen, S., & Tu, Q. 2019, p. 15) concludes that modular structures to achieve stability should be implemented when there is growth and evolution, a big aspect of software engineering. By implementing modular design principles, sustainability in the form of reusability will be maintained, and further growth and updates with loose coupling and cohesion can be guaranteed, especially in community projects.

I fully agree with the recommendation of M. Liu, S. Hansen, and Q. Tu about modularity, as the problems they observed and fixed in their paper are recognizable. In our latest group project, a lot of time had to be spent to rework the backend software to be more modular as the software had become unmaintainable. As many features were dependant of each other, time had to be spent adjusting older features to add new features. This emphasizes the importance of modularity, as the project would have become unusable without making it modular.

Conclusions

Programmers and enterprises benefit greatly from focussing on modular design as the maintainability and reusability of build software decreases time spent on coding and enhances growth and additions to projects. By building software as physically loose parts, new projects can reuse segments of the software, and additions can be implemented easier because of their low coupling.

Recommendations

Software developers would be better off by having both logical and physically clear design, especially in group projects such as enterprises. Anyone would greatly benefit by knowing what modularity entails, augments and how to implement it, whether new to programming or settled in the business. Obtaining this knowledge can help determining when a project requires modularity as it allows for a growth assessment.

Bibliography

Knoernschild, K. (2012). Java Application Architecture (1st ed.). Pearson Education, Inc.

Liu, M., Hansen, S., & Tu, Q. (2019). Keeping the family together: Sustainability and modularity in community source development (Nr. 100274). Information and Organization, Elsevier. https://doi.org/10.1016/j.infoandorg.2019.100274

--

--