Software Development: Managing Complexity
by admin.
Developing software is all about managing complexity.
It’s true.
Steve’s mention of lessons learned from The Mythical Man Month is an important reference worth re-visiting. Written by Fred Brooks and released in 1975, the book’s primary theme focuses on the idea that “adding manpower to a late software project makes it later”. Further elaborated by Brooks:
This then is the demythologizing of the man-month. The number of months of a project depends upon its sequential constraints. The maximum number of men depends upon the number of independent subtasks. From these two quantities one can derive schedules using fewer men and more months. (The only risk is product obsolescence.) One cannot, however, get workable schedules using more men and fewer months. More software projects have gone awry for lack of calendar time than for all other causes combined.
This is a simple yet powerful observation which takes into consideration the human elements of software development. The resulting realization offered to the reader is an advocacy of whole system planning, prototyping, progress tracking and revision control for software development initiatives. This perspective has set the stage for the development tools we use today.
Version control systems (VCS) are now a core element for most development projects, providing a protocol and mechanism for applying and managing changes on a given set of files for a project. A typical project today consists of a team of developers concurrently working on the same codebase from multiple remote physical locations. Development teams are increasingly favoring the adoption of low-barrier [free] open-source version control systems for projects, allowing continuity of revision management protocol for all current, past and future projects. One example of a popular contemporary open-source VCS is Git.
Git is a performance-oriented distributed revision control system that has been designed with an emphasis on fast and comprehensive workflows. Git was created in 2005 by Linus Torvalds for use on the Linux operating system development project. With thousands of developers simultaneously working on the development of Linux, the demand for a faster and more reliable VCS was realized. Torvals designed Git to be ultra-fast, with support for a distributed Bitkeeper-like workflow and strong safeguards against file corruption. At its essence, Git is a tool for managing complex data structures. In Torvalds’s own words (2006-08-28):
Git actually has a simple design, with stable and reasonably well-documented data structures. In fact, I’m a huge proponent of designing your code around the data, rather than the other way around, and I think it’s one of the reasons Git has been fairly successful […] I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
Git greases the wheels for distributed development initiatives by providing developers with a complete copy of a project’s central file repository while allowing for the creation of different working file sets, or branches, within a given project. Developers can also share between different file branches, known as merges, allowing for an easy way to concurrently support and develop different versions of a software package. The Git VCS provides developers the ability to share in-progress branches without the need to first commit to a central repository, allowing for unimpeded exploration of new ideas and patches for existing projects. At the end of the day, Git is all about making it easy to manage complex project resources, teams and workflows.
Again, developing software is all about managing complexity. The good news is that it’s never been easier to implement a smart well-documented distributed revision control system for development projects. With free tools like Git as their disposal, developers can manage complex up-to-date content and development requirements among many team members, a paramount factor if we are to fully realize the foundation lessons learned from our Mythic Man Month reference readings.
Managing multiple codebases, team members and overlapping workflows is a complex task. We believe that the most successful projects going forward will be the ones that fully take-to-heart the underlying considerations of the human element in software development. We’re excited to have powerful project management tools already at our disposal today, and we’ll continue to share with you our observations of other factors for successful development initiatives.
