Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Having gone from sole developer at a tiny company to a developer at Microsoft (and now back again), I'd like to propose a corollary to Hanlon's Razor: Never attribute to either malice or incompetence what can be explained by complexity that you don't know about.


Isn't allowing complexity to grow to such an extent that you cannot fix critical bugs in a reasonable amount of time a form of incompetence?


In my view, it is a form of incompetence so common and, in practice essential for growth as a business that it has become a ubiquitous baseline against which we should strive to differentiate ourselves from.

It is complexity that is accepted in small amounts across dozens of projects over many years. Projects that add real value to the business while contributing to this invisible debt that from the business point of view, matters only once it has started directly affecting your revenue.

Eventually an organization can't scale without a major refactoring, rewrite, or an entirely new market vertical.


It's simply not economically viable to build software at the scale of windows without such issues. There are thousands of teams (not people) working on it and hundreds of thousands of people over the lifetime of the software. Even companies like Microsoft have pressure to deliver on time and be frugal, not just startups.

Incompetence is to spend too much time making software into a golden, egg laying donkey. As is building software that becomes impossible to change after a couple of years. Finding the fine line in between these extremes is what professional software engineering is all about.


Which is why there is a bussiness cycle, where every once in a while a startup will wipe the floor with a big inflexible competitor despite not having even a thousandth of the resources.


Or just end being bought by the competitor and turned into yet another of their departments.


That's organizational incompetence not technical one however.

IMO there is no good fix for that past certain company size.


It's impossible to have software as massive as Windows with 30+ years of backward compatibility that is not extremely complex.


Your comment is about 20-25 years too late.

Most of these problems are likely contributed to legacy code and backwards compatibility.


You’re talking about Microsoft.

It takes me a couple of lines of code now to spin up a web server than can handle thousands of connections. Or an app with beautiful fluid UI.

But I remember that I am standing on the shoulders of giants. What seems like zero complexity to someone on the shoulder is actually not.

Sometimes the giants fuck up too. Ultimately it is incompetence. But not the kind that is attributable to laziness or stupidity. Engineers at Microsoft, I would assume are like engineers everywhere - no smarter, no dumber.

Just because I can build a Lego bridge perfectly, doesn’t make the guys who’ve built an imperfect actual bridge are incompetent. They’re just solving very different problems.


It sounds like what you are saying is that over the long term, there are no competent developers or organizations.

Or perhaps that due to survivorship bias, the evidence for incompetence that we see sticking around longest is also the most pathological.


I have a modification to Hanlon's Razor: anyone who invokes it is both.


Except the user of a commercial application does not need to know about the complexity. They just care if a security loophole is fixed.


This is very true. So often I hear people arguing that something surely is simple to do and obviously people are idiots for not being able to, all while having no idea whatsoever about the system to which they are referring.





Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: