Large Scale Software Development
What do I mean by "Large Scale Software Development"? Well, I mean software development in environments which have at least one of the following characteristics:
- contain a multitude of software features and/or projects developed and delivered together as monolithic products (for example Linux distributions or large embedded software products like storage devices or networking equipment, etc.)
- cover very large monolithic codebases (10s of thousands of files or more)
- cover various codebase mixes (multiple types of proprietary, 3rd party and/or open source repositories)
- involve large and/or geographically or culturally diverse developer communities
- have high velocity - average daily commit rates of dozens or more
Each one of these characteristics raises specific pain-points affecting various aspects of the software development
activities, for example:
- monolithic deliveries mean difficulty/inability of using techniques of slicing the product into easier to manage pieces (like components, microservices) with independent development cycles or significant effort required to integrate such slices efficiently
- large codebases typically translate into scalability issues for the SCM and build infrastructures
- codebase mixes often require difficult/custom solutions for handling the different technologies, processes, requirements or restrictions of the mix parts
- diverse developer communities usually lead to lack of trust and bloated verification requirements weighing down the development processes
- high commit rates can severely affect the reliability of the typical continuous integration systems
Most of these hurdles can be individually addressed by various techniques, however when they are encountered together in the same project the respective techniques can collide with each-other or significantly affect the scalability of the end-to-end development process.
At ApartSW Consulting we aim to establish techniques and build highly scalable tools to efficiently serve end-to-end software development processes presenting any combination of the above-mentioned characteristics.