Meeting Charleston
Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...
Mythical Man-Month - Does adding more labor to a project linearly reduce the time to completion? Or does it do the opposite, particularly to an already late project? In his book Mythical Man-Month, by Frederick P. Brooks, Jr., explores this myth in the context of software engineering projects.
Brooks introduces the concept of a man-month as follows: “cost does indeed vary as the product of the number of men and the number of months. Progress does not. Hence the man-month as a unit for measuring the size of a job is a dangerous and deceptive myth. It implies that men and months are interchangeable.”
So why, then, aren’t men and months interchangeable? Well, they are in some contexts like picking cotton or folding laundry. That’s because these tasks are, for the most part, performed independently from “co-workers.” Software engineering is a different ballgame.
According to Brooks, this lies in its highly collaborative nature. Sure, software engineers work on tasks independently much of the time. However, it’s crucial for the integrity of the product that engineers communicate regularly with any co-workers whose code communicates with their code. When more people are added to a software project, the complexity of those communications within the team spikes. New hires also require extensive training. Once they’re trained, they add to the tally of hands included day-to-day communications, hands that must be kept in the loop, hands whose work can delay or interfere with the work of others. I watched a really neat video to supplement reading the book which compared this to clinking wine glasses (giving cheers). When there are just a few glasses, everyone can easily reach the other, but when there are dozens, things get…messy. And take much longer.
This brings us to Brooks’s Law: “Adding manpower to a late software project makes it later.” There are sequential constraints (like debugging) that simply cannot be reduced with more hands. When the schedule is already off and you add more labor, this combined with the aforementioned increase in communication complexity gives rise to this law.
Brooks suggests several ways to work with all of this in mind. One that I found particularly interesting - the main focus of chapter three - is the surgical approach proposed by Harlan Mills. In this approach, instead of all team members working on the same problem, one “chief programmer” does the “cutting” while everyone supports him with all the tools he needs. This is called the “surgical approach” because of how important that single, lead set of eyes are in surgery. Imagine if everyone in the operating room was trying to cut at the patient? Not only would there be non one to assist with tools but room for noncohesive cuts would skyrocket.
The main surgeon is equivalent to the chief programmer. He and his copilot oversee all of the code, making sure it falls into the design. This supports something Brooks calls conceptual integrity: keeping the vision of the product pure. He even calls conceptual integrity the most important consideration in system design. To maintain the company “why,” features should reflect one set of design ideas at the cost of omitting certain off-hand features.
Of course, these issues become more and more important as the scale of a project increases - up to, think, Google scale. If it’s possible within the scope of a project to keep a team at ten sharp minds, this is commonly believed the best way to go with the mythical man-month in mind. Fortunately, this applies to our teams for the final project. We’re not building a full-on software project, but these principles apply to other computer science projects as well. With just three people, we haven’t had a hard time keeping everyone on the same page so far. :)
Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...
The journey does not end after a software project has gone live. This week’s reading was “Continuing the Journey” - Chapter 9 of Client-Centered Software Dev...
“Databases reside at the heart of most software applications” (SD Chapter 6, pg 168). This week’s readings cover Chapter 6 of our textbook, Client-Centered S...
This week’s reading (Chapter 5 of Client-Centered Software Development) covers domain classes and unit/system testing. According to the text, “domain classes...
Proper documentation for both internal and external users of a software application is crucial to its sustained success after deployment. This week, we read ...
This week, we read “From STUPID to Solid Code!” by William Durand. This article is packed with high-level do’s and dont’s of programming. The “dont’s” are co...
This week, our class chose and reflected on articles from Software, Computer, or CoACM magazines. While perusing software magazines (finding good ones was an...
6.4. Exercise - Find the Oldest Bug Find the oldest bug that’s still open in your chosen project. Write a blog entry describing the problem, with a theory ab...
This week, our assignment was to explore http://opensource.com/, reading at least two medium-length articles from the site and blogging about what we learned...
This class, CSCI 462, is centered around contributing to an open-source software project through bug fixes, documentation fixes, and other improvements. Befo...
Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.
24.6 Explain why program inspections are an effective technique for discovering errors in a program. What types of error are unlikely to be discovered throug...
I feel like our team made great progress on the most recent deliverable (deliverable 4)! We met via Zoom more often than we did between any other two variabl...
23.6 Figure 23.14 shows the task durations for software project activities. Assume that a serious, unanticipated setback occurs, and instead of taking 10 day...
21.4 Explain why an object-oriented approach to software development may not be suitable for real-time systems.
This is my first reflection on our team’s testing project. I think this will be a helpful exercise as we move into the final stages of building our testing f...
20.10 You work for a software company that has developed a system that provides information about consumers and that is used within a SoS by a number of othe...
19.3 Why is it impossible to infer the emergent properties of a complex system from the properties of the system components? In the words of Ian Sommerville,...
18.4 Define an interface specification for the Currency Converter and Check Credit Ratings services shown in Figure 18.7.
17.10 Your company wishes to move from using desktop applications to accessing the same functionality remotely as services. Identify three risks that might a...
16.9 Design the interfaces of components that might be used in a system for an emergency control room. You should design interfaces for a call-logging compon...
9.8 Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them? Fault repairs to fix bugs and v...
15.10 The reuse of software raises a number of copyright and intellectual property issues. If a customer pays the software contractor to develop a system, wh...
8.7: Write a scenario that could be used to help design tests for the wilderness weather station system. Context: According to Chapter 7, Design and Implemen...
Mythical Man-Month - Does adding more labor to a project linearly reduce the time to completion? Or does it do the opposite, particularly to an already late ...
5.3: You have been asked to develop a system that will help with planning large-scale events and parties such as weddings, graduation celebrations, and birth...
2.1 Suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems. Explain ...
4.5: Using the technique suggested here, where natural language descriptions are presented in a standard format, write plausible user requirements for the fo...
Our readings this week began with a focus on several software engineering failures which resulted in devastating incidents such as plane crashes (Space Craft...
11.4: What is the common characteristic of all architectural styles that are geared to supporting software fault tolerance? Architectural styles geared to su...
The Complexity of Software and Its Evolution Software is, by definition, complex. Frederick P. Brooks, in his article “Essence and Accidents of Software Engi...
1.3: What are the four important attributes that all professional software should possess? Suggest four other attributes that may sometimes be significant.
Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.