Hacker News new | past | comments | ask | show | jobs | submit
One of my favorite quotes: “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.”

I think about this a lot because it’s true of any complex system or argument, not just software.

This is indeed a great quote (one of many gems from Sir Tony) but I think the context that follows it is also an essential insight:

> The first method is far more difficult. It demands the same skill, devotion, insight, and even inspiration as the discovery of the simple physical laws which underlie the complex phenomena of nature. It also requires a willingness to accept objectives which are limited by physical, logical, and technological constraints, and to accept a compromise when conflicting objectives cannot be met. No committee will ever do this until it is too late.

(All from his Turing Award lecture, "The Emperor's Old Clothes": https://www.labouseur.com/projects/codeReckon/papers/The-Emp...)

"At first I hoped that such a technically unsound project would collapse but I soon realized it was doomed to success. Almost anything in software can be implemented, sold, and even used given enough determination. There is nothing a mere scientist can say that will stand against the flood of a hundred million dollars. But there is one quality that cannot be purchased in this way-- and that is reliability. The price of reliability is the pursuit of the utmost simplicity. It is a price which the very rich find most hard to pay."

This explain quite a lot actually!

Very poignant, thank you. I can see my absolute core principle - KISS reflected in this. I still struggle to find a single use in my career where it wouldn't be the best approach, especially long term.
From the linked lecture, which I printed out to read as part of a new less is more screen time management regime (where I print out longer form writing for reading) I found this very interesting tidbit in the context of Tony having made a delivery miscalculation and his team failing to deliver on one of their products; which is where I think a lot people are today with LLMs:

"Each of my managers explained carefully his own theory of what had gone wrong and all the theories were different. At last, there breezed into my office the most senior manager of all, a general manager of our parent company, Andrew St. Johnston. I was surprised that he had even heard of me.

"You know what went wrong?" he shouted--he always shouted -- "You let your programmers do things which you yourself do not understand." I stared in astonishment. "

"No committee will ever do this until it is too late."

The software I like best was not written by "teams"

I prefer small programs written by individuals that generally violate memes like "software is never finished" and "all software has bugs"

(End user perspective, not a developer)

One of my biggest accomplishments was shipping a suite of 5 apps from four divisions where three of them resented each other’s existence and seemed bound and determined to build rules in the system that made sure the other two couldn’t function. Which made no goddamn sense because it was a pipeline and you can’t get anything out one end if it gets jammed in the middle.

I was brought in to finish building the interchange format. The previous guy was not up to snuff. The architect I worked for was (with love) a sarcastic bastard who eventually abdicated about 2 rings of the circus to me. He basically took some of the high level meetings and tapped in when one of us thought I might strangle someone.

Their initial impression was that I was a prize to be fought over like a child in a divorce. But the guy who gives you your data has you by the balls, if he is smart enough to realize it, so it went my way nine times out of ten. It was a lot of work threading that needle, (I’ve never changed the semantics of a library so hard without changing the syntax), but it worked out for everyone. By the time we were done the way things worked vs the way they each wanted it to work was on the order of twenty lines of code on their end, which I essentially spoonfed them so they didn’t have a lot of standing to complain. And our three teams always delivered within 15% of estimates, which was about half of anyone else’s error bar so we lowly accreted responsibilities.

I ended up as principal on that project (during a hiring/promotional freeze on that title. I felt bad for leaving within a year because someone pulled strings for that, but I stayed until I was sure the house wouldn’t burn down after I left, and I didn’t have to do that). I must have said, “compromise means nobody gets their way.” About twenty times in or between meetings.

These are the projects that give us confidence.
Also, this software is free. Generally the authors were not paid to write it
It's the committee vs the dictator issue - a small driven individual (or group) can achieve a lot, but they can also turn into tyrants.

A committee forms when there's widespread disagreement on goals or priorities - representing stakeholders who can't agree. The cost is slower decisions and compromise solutions. The benefit is avoiding tyranny of a single vision that ignores real needs.

We are poorer for him having waited to drop that sentence at his Turing Award acceptance speech. I use it all the time.

Tony might be my favorite computer scientist.

There was an article posted here a few weeks ago titled "Nobody Gets Promoted for Simplicity."

I've been thinking about it a lot, and now, in turn, the memory of Mr. Hoare.

It seems that with vibe coding our industry has finally, permanently embraced the latter approach. RIP Tony.
> permanently

don't bet on it

Can’t argue with the quote. However my current boss has been pushing this to the extreme without much respect for real-world complexities (or perhaps I’m too obtuse to think of a simple solution for all our problems), which regrettably gives me a bit of pause when hearing this quote.
Reminds me of another good one: Make everything as simple as possible, but not simpler. (-- probably not Einstein)
aged very well
Reminds me of this Pascal quote: "I would have written a shorter letter, but I did not have the time."

https://www.npr.org/sections/13.7/2014/02/03/270680304/this-...

"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."

Antoine de Saint-Exupéry

"The greatest ideas are the simplest."

- William Golding

{"deleted":true,"id":47330395,"parent":47328998,"time":1773187902,"type":"comment"}
Reminds me of this quote... “A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work.”
https://en.wikipedia.org/wiki/John_Gall_(author)#Gall's_law

The book is well worth reading.

https://news.ycombinator.com/item?id=9948767

Seconded.

Someone once described Systemantics as the book that systwm designers read under the covers at night with a torch.

or should do!
loading story #47334666
https://openlibrary.org/books/OL4904457M/Systemantics

(Systemantics is available for borrowing, Systems Bible is not yet, a copy has been sent for digitizing)

One of the policies of The Rhinoceros Party in Canada was to increase the complexity of the taxation system so much that nobody could find the loopholes to exploit.
Had to look them up (WP), wasn't disappointed. We have the Monster Raving Loony Party in the UK.

One of the Rhino's Party policies stands out - are you sure Trump wasn't born a Cannuck and was stolen at birth by racoons and smuggled down south?

"Annexing the United States, which would take its place as the third territory in Canada's backyard (after the Yukon and the Northwest Territories—Nunavut did not yet exist), in order to eliminate foreign control of Canada's natural resources"

Good thing we now have technology that allows us to crank out complex software at rates never-before seen.
Complex software full of very obvious deficiencies that nobody bothered to look for.
It can also be used to simplify existing code bases.