When a new software development paradigm appears, eager potential adopters often rush into it, not knowing what they do not know. Microservice-based software development is one of the latest hot ideas in the industry. This paper is a succinct yet thorough exposition of what microservices are all about, including and emphasizing important cautions.
The packaging of software systems with many features and capabilities is an important design decision. The model can range from a large monolithic program with many functions to an ensemble of microservice-based software units. The authors distinguish microservices from monoliths with good modularization. Microservices are more autonomous than modules.
A major motivation behind deploying software as microservices is to enable rapid revision of a software functionality without requiring additional revisions to a large, tightly bound monolith, much of which having little or nothing to do with the function being modified.
The authors show that there is “no free lunch” with microservice-based software development versus monolithic software. They state that it is usually more profitable and expedient to begin with an existing monolithic software product, and then carefully extract those portions that require more frequent attention while maintaining necessary connections to the continuing larger monolithic software system. The goal is to ensure that users experience no dislocations and perceive seamlessness in the performance of the system. The user should see a functionally coherent system that performs robustly.
Many organizational changes accompany the adoption of microservice-based software development, especially in the formation of the teams working on the services and the necessary tasks of maintaining an appropriate level of integration among the microservices, the original monolithic portions of the software, and the common database while protecting the desired autonomous character of the microservices. This is a delicate balancing act. The major challenges and efforts of microservice-based software development are centered on the personnel who do the work and how they are managed.