Wednesday, November 06, 2024

Mythical Man-Month

Mythical Man-Month, The: Essays on Software Engineering, Anniversary Edition by Frederick Brooks Jr.

The details of software engineering have changed a lot in the last 50 years. There is a section devoted to memory usage and concerns of the cost of using kilobytes of memory. Documentation on paper was a thing as was talking on telephones. Programs had to be punched into a computer and run. A lot of the slow "overhead" has now been reduced. However, some of the core problems remain the same. Engineers do a poor job of estimating. The focus tends to be on the actual coding process, which is likely only a sixth of the actual time needed to develop. Then there is the root problem of the "man month".

There is a temptation to add more programmers to a project to deliver faster. However, this often fails. When done late in the cycle, this can even slow production. New team members need to be trained in the current project and culture. They also need to communicate with others. This causes immediate reduction in productivity of the existing team before producing anything of value. There are also hidden differences. Every person does things a little bit different. Incomplete understanding may cause extra communication or extra work.

Working as a smaller team may seem like a solution. In some sense it is. Start ups typically consist of a few engineers rapidly producing software. This works great for small projects with limited scope, but does not scale out. These small startups end up becoming large corporations with the struggles of large teams. To work together, they must manage different roles and responsibilities. This book proposes a few ways to manage projects, primarily focussing on limiting architects to design and set the spec, with development teams managing implementation of parts. 

The book includes an update from 1995 - which is still almost 30 years ago. The scope of changes from 1975 to 1995 are extreme, especially in comparison to those from 1995 to today. In 1975 development was on mainframe computers. New computers would often have new operating systems. Customers would have custom software written for their computers. Computing resources were costly and limited. There were few programmers, and most programming was very low level. By 1995, microcomputers were everywhere. There was abundant software that could be purchased as well as obtained for free. It is easy to write software on your local computer. Hardware has become commoditized. The same operating system will run an a large number of different hardware configurations and the same program can often be compiled or run on different operating systems.

In the past 30 years, what has changed? Hardware is faster. More memory is available. There are a greater number of tools and they are more easily available. GitHub and StackOverflow allow instant access to code samples and programming questions. AI has potential to write more code for programmers. The book even mentions AI as being something that people hoped would be "almost there" decades ago. It is still "almost there", but the almost seems to be much closer than it was back then.

No comments:

Post a Comment