Big Ball of Mud (1999)
The paper delves into the Big Ball of Mud software architecture, analyzing its causes, challenges, and strategies for improvement. It highlights the balance between pragmatism and long-term architectural considerations in software development.
Read original articleThe paper discusses the prevalent software architecture known as the Big Ball of Mud, characterized by haphazard structure and expedient design choices. It explores the reasons behind its popularity and the challenges it poses to more structured approaches. The authors identify patterns that lead to the emergence of such architectures, including Throwaway Code and Piecemeal Growth. They also propose strategies like Keeping It Working and Reconstruction to address architectural decline and prevent systems from deteriorating into Big Balls of Mud. The text emphasizes the importance of balancing pragmatic concerns like time and cost with long-term architectural considerations. It acknowledges the complexity of software development and the need for continuous refactoring to maintain system integrity. The paper aims to shed light on the gap between ideal architectural practices and the realities of software development, offering insights into improving system design and preventing architectural decay.
Related
Software design gets worse before it gets better
The "Trough of Despair" in software design signifies a phase where design worsens before improving. Designers must manage expectations, make strategic decisions, and take incremental steps to navigate this phase successfully.
Documenting Software Architectures
Documenting software architectures is crucial for guiding developers, facilitating communication, and capturing decisions effectively. The arc42 template and C4 model offer structured approaches to achieve this, balancing detail and clarity.
The software world is destroying itself (2018)
The software development industry faces sustainability challenges like application size growth and performance issues. Emphasizing efficient coding, it urges reevaluation of practices for quality improvement and environmental impact reduction.
The Software Crisis
The software crisis, coined in 1968, highlights challenges in managing software complexity. Despite advancements, issues persist, emphasizing responsible construction, user agency, and sustainable development practices through constrained abstractions and user empowerment.
The IT Industry is a disaster (2018)
The IT industry faces challenges in IoT and software reliability. Concerns include device trustworthiness, complex systems, and security flaws. Criticisms target coding practices, standards organizations, and propose accountability and skill recognition.
Undertale has a single giant switch statement thousands of cases long for every line of dialog in the game. There are other stories of how infamously bad the code is. And none of that mattered one bit.
Banks are another example. The software is horrible. Everyone knows it. Yet all that’s required is minimally working software that fails rarely enough that the bank can maintain their lock in.
Believe it or not, being hired to work on a big ball of mud can be pretty chill. The key is for you to be in a stage in your life where you don’t really care about your work beyond meeting professional responsibilities. Big ball of mud codebases are the best for that, because everyone’s there for the same reasons, and the assignments are always easy drudgery. Neither Scottrade nor Thomson Reuters cared too much what I was up to as long as I was there at 9am.
It’s soul crushing for people who want to create nice things, or seek meaning in their work, which is partly why I left. But when you just need the money, there’s no substitute.
Big Ball of Mud (1999) - https://news.ycombinator.com/item?id=35481309 - Apr 2023 (32 comments)
Big Ball of Mud (1999) - https://news.ycombinator.com/item?id=28915865 - Oct 2021 (23 comments)
Big Ball of Mud (1999) - https://news.ycombinator.com/item?id=22365496 - Feb 2020 (48 comments)
Big Ball of Mud - https://news.ycombinator.com/item?id=21650011 - Nov 2019 (1 comment)
Big Ball of Mud (1999) - https://news.ycombinator.com/item?id=21484045 - Nov 2019 (1 comment)
Big Ball of Mud (1999) - https://news.ycombinator.com/item?id=13716667 - Feb 2017 (6 comments)
Big Ball of Mud (1999) - https://news.ycombinator.com/item?id=9989424 - Aug 2015 (9 comments)
Big Ball of Mud - https://news.ycombinator.com/item?id=6745991 - Nov 2013 (21 comments)
Big Ball of Mud - https://news.ycombinator.com/item?id=911445 - Oct 2009 (2 comments)
The "Big Ball of Mud" Pattern - https://news.ycombinator.com/item?id=10259 - April 2007 (2 comments)
I actually even started enjoying it at some point - it felt like a mixture between a crossword puzzle and archaeology. There was also something nice about being good at something other people hated that was nonetheless very critical.
Somewhat ironically though, the better I got at it, the class of job I got the better the quality of the code I ended up working with.
Now my mud wrestling skills have atrophied a fair bit.
The line was essentially a collection of:
restart instance_N &; restart instance_N+1&;
etcI always assumed that the way you got to 70+ was:
- write the first restart for instance N=1
- add another restart
- keep doing this till you get to about 5-8 restart commands
- AT THIS POINT someone should say "Hey, we should make this a script or something else" BUT CRUCIALLY that didn't happen
- you keep adding restarts till you get to 20+
- Now, doing anything to that giant line other than adding a new restart feels too dangerous so you decide to just keep adding restarts.
Moral of the story: the ball of mud usually doesn't just appear out of nowhere. It appears b/c there were multiple steps were someone didn't say "hey, maybe we should..." (or they said it and no one listened).
https://en.m.wikipedia.org/wiki/Dorodango
There's gotta be some analogy to the software big ball of mud though
Well that’s the idea anyway, but it always turns into a mess and then I have been using a new term to describe it: spaghetti over http
P.S. I love it and still re-read it sometimes.
https://www.ebay.com/sch/i.html?_from=R40&_trksid=p4432023.m...
I've seen some big balls of software mud that formed very nicely under pressure too.
[edit]
After doing the obvious thing and googling "john lennon shovel waiter" it is indeed him from Magical Mystery Tour
It is somewhat of a clichè but I think that (interactive) documentation and tooling can make a difference, but it is very difficult to design the process and the tooling to be as frictionless as possible. Tudor Girba and his team at feenk have been doing a lot of interesting work in that area that's worth a look [1, 2].
The software in question might be an entangled mess, a large part of it might be even inherent due to its requirements or technical constraints, but if that messy web can be readily augmented with background information and sign-posts I think the situation could be significantly improved.
On a related note, there has been a project at Xerox PARC called PIE (Personal Information Environment) [3] which has put forward the idea of organizing software and its artifacts (source code, various kinds of documentation) as a network. Although that particular concept has never been adopted in any major programming system as far as I know, I think that it has huge potential, especially if the software, as a network, can be collaboratively navigated and extended with additional information, where and when needed -- online.
Now that all does not change the fact that we are still dealing with a ball (or a web) of mud, but at least it is accessible and we might have a better chance to understand its evolution and the reasons that made it complicated in the first place.
[3] http://www.bitsavers.org/pdf/xerox/parc/techReports/CSL-81-3...
The moment that someone manages to crack the software visualization problem for the layperson, would be the (moment + delay) that considerable effort would actually be invested in software architecture.
> These patterns [BIG BALL OF MUD, THROWAWAY CODE, PIECEMEAL GROWTH, KEEP IT WORKING, SHEARING LAYERS, SWEEPING IT UNDER THE RUG, RECONSTRUCTION] explore the forces that encourage the emergence of a BIG BALL OF MUD, and the undeniable effectiveness of this approach to software architecture. What are the people who build them doing right? If more high-minded architectural approaches are to compete, we must understand what the forces that lead to a BIG BALL OF MUD are, and examine alternative ways to resolve them.
I think a lot of problems which reduce down to this are done by function-table lookups (as in, look up in a table the index of the next state, and call the function) but for the language I had, that wasn't an option.
Few months later I heard a complaint from my direct manager that I called our code “big ball of crap” and it was a major software company
Related
Software design gets worse before it gets better
The "Trough of Despair" in software design signifies a phase where design worsens before improving. Designers must manage expectations, make strategic decisions, and take incremental steps to navigate this phase successfully.
Documenting Software Architectures
Documenting software architectures is crucial for guiding developers, facilitating communication, and capturing decisions effectively. The arc42 template and C4 model offer structured approaches to achieve this, balancing detail and clarity.
The software world is destroying itself (2018)
The software development industry faces sustainability challenges like application size growth and performance issues. Emphasizing efficient coding, it urges reevaluation of practices for quality improvement and environmental impact reduction.
The Software Crisis
The software crisis, coined in 1968, highlights challenges in managing software complexity. Despite advancements, issues persist, emphasizing responsible construction, user agency, and sustainable development practices through constrained abstractions and user empowerment.
The IT Industry is a disaster (2018)
The IT industry faces challenges in IoT and software reliability. Concerns include device trustworthiness, complex systems, and security flaws. Criticisms target coding practices, standards organizations, and propose accountability and skill recognition.