Foote, B. & Yoder, J. (2000) Big Ball of Mud. IN HARRISON, N., FOOTE, B. & ROHNERT, H. (Eds.) Pattern languages of program design 4. Addison Wesley.
Beck, K. (1999) Embracing Change with Extreme Programming. Computer, 8.
Foote & Yodder’s article deals with the question that why a system’s initial well defined architecture get muddled and prone to structural erosion. The article not only limits it to software architecture but takes the similar analogy to urban planning and explains the emergence of shanty towns & unplanned networks in big cities. They present seven patterns of such muddled systems
- Big Ball Of Mud
- Throwaway Code
- Piecemeal Growth
- Keep It Working
- Shearing Layers
- Sweeping It Under The Rug
The interesting note in the article is that the authors don’t think that the big balls of mud are necessarily bad. The note that the “reasons that good programmers build BIG BALLS OF MUD. It may well be that the economics of the software world are such that the market moves so fast that long term architectural ambitions are foolhardy, and that expedient, slash-and-burn, disposable programming is, in fact, a state-of-the-art strategy. The success of these approaches, in any case, is undeniable, and seals their pattern-hood.”
Back’s article is a brief summary of the different concepts behind Extreme Programming.
Planning game. Customers decide the scope and timing of releases based on estimates provided by programmers. Programmers implement only the functionality demanded by the stories in this iteration.
Small releases. The system is put into production in a few months, before solving the whole problem. New releases are made often anywhere from daily to monthly.
Metaphor. The shape of the system is defined by a metaphor or set of metaphors shared between the customer and programmers.
Simple design. At every moment, the design runs all the tests, communicates everything the programmers want to communicate, contains no duplicate code, and has the fewest possible classes and methods. This rule can be summarized as, “Say everything once and only once.”
Tests. Programmers write unit tests minute by minute. These tests are collected and they must all run correctly. Customers write functional tests for the stories in an iteration. These tests should also all run, although practically speaking, sometimes a business decision must be made comparing the cost of shipping a known defect and the cost of delay.
Refactoring. The design of the system is evolved through transformations of the existing design that keep all the tests running.
Pair programming. All production code is written by two people at one screen/keyboard/mouse.
Continuous integration. New code is integrated with the current system after no more than a few hours. When integrating, the system is built from scratch and all tests must pass or the changes are discarded.
Collective ownership. Every programmer improves any code anywhere in the system at any time if they see the opportunity.
On-site customer. A customer sits with the team full-time.
40-hour weeks. No one can work a second consecutive week of over-time. Even isolated overtime used too frequently is a sign of deeper problems that must be addressed.
Open workspace. The team works in a large room with small cubicles around the periphery. Pair programmers work on computers set up in the centre.
Just rules. By being part of an Extreme team, you sign up to follow the rules. But they’re just the rules. The team can change the rules at any time as long as they agree on how they will assess the effects of the change.