Uploaded by comekar550

The collapse of complex software Read the Tea L…

advertisement
Menu
Searc
Read the Tea Leaves
Software and other dark arts, by Nolan Lawson
The collapse of complex
software
In 1988, the anthropologist Joseph Tainter
published a book called The Collapse of Complex
Societies. In it, he described the rise and fall of
great civilizations such as the Romans, the
Mayans, and the Chacoans. His goal was to
answer a question that had vexed thinkers over
the centuries: why did such mighty societies
collapse?
In his analysis, Tainter found the primary enemy
of these societies to be complexity. As
civilizations grow, they add more and more
complexity: more hierarchies, more
bureaucracies, deeper intertwinings of social
structures. Early on, this makes sense: each new
level of complexity brings rewards, in terms of
increased economic output, tax revenue, etc. But
at a certain point, the law of diminishing returns
sets in, and each new level of complexity brings
fewer and fewer net benefits, dwindling down to
zero and beyond.
But since complexity has worked so well for so
long, societies are unable to adapt. Even when
each new layer of complexity starts to bring zero
or even negative returns on investment, people
continue trying to do what worked in the past. At
some point, the morass they’ve built becomes so
dysfunctional and unwieldy that the only solution
is collapse: i.e., a rapid decrease in complexity,
usually by abolishing the old system and starting
from scratch.
What I find fascinating about this (besides the
obvious implications for modern civilization) is
that Tainter could have been writing about
software.
Anyone who’s worked in the tech industry for
long enough, especially at larger organizations,
has seen it before. A legacy system exists: it’s
big, it’s complex, and no one fully understands
how it works. Architects are brought in to “fix”
the system. They might wheel out a big
whiteboard showing a lot of boxes and arrows
pointing at other boxes, and inevitably, their
solution is… to add more boxes and arrows.
Nobody can subtract from the system; everyone
just adds.
Endpoint
AGEREEATRA
CLOGGER
ZURTI
GARY
BINGO
NPP|RATMAN
/onl
RACCOON
EKS
TRY
Paper°
Balon
e
MAsP
MI
(ABS)
OMEGA
STAR
HELL
BREAD
REPLICA
“EKS is being deprecated at the end of the month
for Omega Star, but Omega Star still doesn’t
support ISO timestamps.” We’ve all been there.
(Via Krazam)
This might go on for several years. At some point,
though, an organizational shakeup probably
occurs – a merger, a reorg, the polite release of
some senior executive to go focus on their
painting hobby for a while. A new band of
architects is brought in, and their solution to the
“big diagram of boxes and arrows” problem is
much simpler: draw a big red X through the
whole thing. The old system is sunset or
deprecated, the haggard veterans who worked
on it either leave or are reshuffled to other
projects, and a fresh-faced team is brought in to,
blessedly, design a new system from scratch.
As disappointing as it may be for those of us who
might aspire to write the kind of software that is
timeless and enduring, you have to admit that
this system works. For all its wastefulness,
inefficiency, and pure mendacity (“The old code
works fine!” “No wait, the old code is terrible!”),
this is the model that has sustained a lot of
software companies over the past few decades.
Will this cycle go on forever, though? I’m not so
sure. Right now, the software industry has been
in a nearly two-decade economic boom (with
some fits and starts), but the one sure thing in
economics is that booms eventually turn to
busts. During the boom, software companies can
keep hiring new headcount to manage their
existing software (i.e. more engineers to
understand more boxes and arrows), but if their
labor force is forced to contract, then that same
system may become unmaintainable. A rapid and
permanent reduction in complexity may be the
only long-term solution.
One thing working in complexity’s favor, though,
is that engineers like complexity. Admit it: as
much as we complain about other people’s
complexity, we love our own. We love sitting
around and dreaming up new architectural
diagrams that can comfortably sit inside our own
heads – it’s only when these diagrams leave our
heads, take shape in the real world, and outgrow
the size of any one person’s head that the
problems begin.
It takes a lot of discipline to resist complexity, to
say “no” to new boxes and arrows. To say, “No,
we won’t solve that problem, because that will
just introduce 10 new problems that we haven’t
imagined yet.” Or to say, “Let’s go with a much
simpler design, even if it seems amateurish,
because at least we can understand it.” Or to just
say, “Let’s do less instead of more.”
Simplicity of design sounds great in theory, but it
might not win you many plaudits from your peers.
A complex design means more teams to manage
more parts of the system, more for the engineers
to do, more meetings and planning sessions,
maybe some more patents to file. A simple
design might make it seem like you’re not really
doing your job. “That’s it? We’re done? We can
clock out?” And when promotion season comes
around, it might be easier to make a case for
yourself with a dazzling new design than a
boring, well-understood solution.
Ultimately, I think whether software follows the
boom-and-bust model, or a more sustainable
model, will depend on the economic pressures of
the organization that is producing the software. A
software company that values growth at all cost,
like the Romans eagerly gobbling up more and
more of Gaul, will likely fall into the “addcomplexity-and-collapse” cycle. A software
company with more modest aims, that has a
stable customer base and doesn’t change much
over time (does such a thing exist?) will be more
like the humble tribe that follows the yearly
migration of the antelope and focuses on
sustainable, tried-and-true techniques. (Whether
such companies will end up like the hapless
Gauls, overrun by Caesar and his armies, is
another question.)
Personally, I try to maintain a good sense of
humor about this situation, and to avoid giving in
to cynicism or despair. Software is fun to write,
but it’s also very impermanent in the current
industry. If the code you wrote 10 years ago is
still in use, then you have a lot to crow about. If
not, then hey, at least you’re in good company
with the rest of us, who probably make up the
majority of software developers. Just keep doing
the best you can, and try to have a healthy
degree of skepticism when some wild-eyed
architect wheels out a big diagram with a lot of
boxes and arrows.
Related
The balance has shifted away from SPAs
May 21, 2022
In "Web"
More thoughts on SPAs
May 25, 2022
In "Web"
Introducing the Cordova SQLite Plugin 2
April 10, 2016
In "Webapps"
 10 Replies
June 9, 2022
« Previous
Leave a Reply
Your email address will not be published.
Required fields are marked *
Comment *
Name *
Email *
Website
Post Comment
Notify me of new comments via email.
Notify me of new posts via email.
This site uses Akismet to reduce spam. Learn
how your comment data is processed.
Jim Boyland on June 9, 2022 at 1:43 PM
This article hits the nail on the head,
well done.
 Reply
Pingback: Futureseek Daily Link Review; 10
June 2022 | Futureseek Link Digest
cataraducan on June 9, 2022 at 4:54 PM
I do not agree with this premodern
boom-and-bust cyclical take,
something else much more interesting
and profound is going on (think of
imanent antagonisms between Kants’s
contingent pathological objects and
universalities, the OOP vs FP debate is
problably fits well here). For a guy who
worked in software industry and
perceived it as a mess, the real
question to ask is “how that anything
works at all?”
 Reply
Rich Astone on June 9, 2022 at 5:02 PM
Some great food for thought and an
example of the value of applying
knowledge of the humanities (History)
to the world of business and
technology. I’m sharing on LinkedIn if
that’s ok. I’m very appreciative of the
insights from folks like you in the HN
community.
 Reply
James Parker on June 9, 2022 at 6:16 PM
Not all engineers embrace complexity,
even in their own work. I often quote
Turing award winner CAR Hoare, who
said a system has either “no obvious
defects” (due to over complexity) or ”
obviously no defects”. It is typically
those outside of engineering
(marketing or management) that push
for complexity, even if they don’t intend
to.
 Reply
Nolan Lawson on June 10, 2022 at
12:17 PM
That’s fair. OTOH I do think it’s
easy to be seduced by your own
design, at least while it fits in your
own head, and to forget about the
potential unintended
consequences.
You’re right that business
requirements often drive
complexity. I think this is
something I was trying to get at:
sometimes software complexity is
a symptom, not a cause, e.g.
because the organization that
produced it is complex (think:
Conway’s Law).
 Reply
tetsuoii on June 10, 2022 at 10:09 AM
Yes, this is all true and for this exact
reason I only write software in C and
avoid modern paradigms. It’s better to
write small programs with low
complexity and high performance. That
requires skill and craftmanship.
Programs should be minimalist and
have as few dependencies as possible.
It’s often better to cannibalize a
program than to extend it. The socalled modularity and extensibility of
object orientation often causes the
exact opposite result. Data is hidden
behind abstractions, unnecessary
layers of complexity, copied and
handled adding performance loss to
obscurity. Then this is iterated upon
across components creating a tangled
mess.
 Reply
Pingback: Links 10/06/2022: ExTiX Deepin 22.6
and Diffoscope 216 | Techrights
Louis on June 10, 2022 at 6:45 PM
Lookin at you, Dependency Injection!
 Reply
Pingback: Links 11/06/2022: Qt 6 in Debian |
Techrights
Recent Posts
The collapse of complex software
State is hard: why SPAs will persist
More thoughts on SPAs
The balance has shifted away from SPAs
The struggle of using native emoji on the web
About Me
Hi, I'm Nolan. I'm a web developer
living in Seattle and working for
Salesforce. Opinions expressed in
this blog are mine and frequently
wrong.
Archives
June 2022 (1)
May 2022 (3)
April 2022 (1)
February 2022 (1)
January 2022 (1)
December 2021 (3)
September 2021 (1)
August 2021 (6)
February 2021 (2)
January 2021 (2)
December 2020 (1)
July 2020 (1)
June 2020 (1)
May 2020 (2)
February 2020 (1)
December 2019 (1)
November 2019 (1)
September 2019 (1)
August 2019 (2)
June 2019 (4)
May 2019 (3)
February 2019 (2)
January 2019 (1)
November 2018 (1)
September 2018 (5)
August 2018 (1)
May 2018 (1)
April 2018 (1)
March 2018 (1)
January 2018 (1)
December 2017 (1)
November 2017 (2)
October 2017 (1)
August 2017 (1)
May 2017 (1)
March 2017 (1)
January 2017 (1)
October 2016 (1)
August 2016 (1)
June 2016 (1)
April 2016 (1)
February 2016 (2)
December 2015 (1)
October 2015 (1)
September 2015 (1)
July 2015 (1)
June 2015 (2)
October 2014 (1)
September 2014 (1)
April 2014 (1)
March 2014 (1)
December 2013 (2)
November 2013 (3)
August 2013 (1)
May 2013 (3)
January 2013 (1)
December 2012 (1)
November 2012 (1)
October 2012 (1)
September 2012 (3)
June 2012 (2)
March 2012 (3)
February 2012 (1)
January 2012 (1)
November 2011 (1)
August 2011 (1)
July 2011 (1)
June 2011 (3)
May 2011 (2)
April 2011 (4)
March 2011 (1)
Tags
accessibility alogcat
android android market
apple app tracker blobs boost bootstrap browsers bug reports
catlog chord reader code contacts continuous integration
copyright couch apps couchdb couchdroid developers
development grails html5 indexeddb information
retrieval japanese name converter javascript jenkins
keepscore listview localstorage logcat logviewer lucene
mobile web modules nginx
nlp node nodejs npm offline-first
open source passwords performance
pokedroid pouchdb pouchdroid query expansion
relatedness calculator relatedness coefficient s3
sectioned listview
security semver social
safari satire
media socket.io
software development solr spas
supersaiyanscrollview synonyms
crossword
twitter ui design ultimate
w3c webapp webapps web platform web sockets
websql web workers
Links
Mastodon
GitHub
npm
Keybase
View Full Site
Blog at WordPress.com.
Download