Photo by Alfons Morales on Unsplash

“The Problem With Software”

Root Causes

Unlike in other engineering disciplines, having a degree in software engineering does not guarantee that you understand a known corpus of programming tools and techniques, because such a thing does not exist.

“There is a unique maintenance aspect called ‘knowledge recovery’ or ‘program understanding.’ It becomes a major cost component as software ages (assume 50% of both enhancements and defect fixing).” Half your future maintenance costs will be spent relearning the details of your program that you will have forgotten in the meantime!

”…Hence most programmers cannot effectively test their own programs because they cannot bring themselves to form the necessary mental attitude: the attitude of wanting to expose errors.”


I could mentor people on how to navigate the waters of corporate life, but that was generic advice that they could get from anybody. Like others, my guidance was vague: “Well, in this one case I remember this sort of thing worked OK, so why not try that?”


If you told members of one Microsoft team about the engineering experience of another team, they would immediately be able to identify — because of their knowledge of the internals of Microsoft — the ways in which that other team was different from their team, and therefore dismiss the guidance as not relevant. Meanwhile, they would happily slurp up guidance on Scrum, even if it was completely inapplicable to their team, because they weren’t aware of the details of the environment in which it had been successful.

Although grounded software architects, at this moment in time, are considered better than oxygen-deprived ones, the fact that architects need continual immersion in their team’s current project is another sign that there is not enough accepted knowledge and vocabulary around software engineering.

While Agile may make easy problems a bit easier, it doesn’t help with the hard problems. It’s appealing to programmers, but to make software engineering more of an engineering discipline, something else is needed.


Coding Dojo

Software projects done at universities generally don’t have to be maintainable, usable, or testable by another person.


Currently, software engineers coming out of college are viewed as fungible; it is expected that any programmer, if found competent by whatever hiring procedure is used, can go work on any part of a program. As software becomes more and more complicated, however, it makes more sense for people to specialise in different areas.

Intellectual Humility

KI labs Technical Blog

Recommended from Medium

Building Web Stuff in 2018

Whacking DynamoDB’s p99 and Max Latency

Questions for a live technical interview — what questions I like to ask and why

SFTP access to Google Cloud Storage

Spark study notes: core concepts visualized

The Cloud Resume Challenge, or How I Learned to Stop Worrying and Love the Cloud

Most Software Projects Are Doomed To Be Late

Should You Consider Test-Driven Development? Challenges and Benefits of TDD

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Felix Raab

Felix Raab

Working @ | Der aktuelle Stand des Irrtums |

More from Medium

“How to” enrich your abilities with the open-source world NOW!

ราคาทองฟิวเจอร์ปรับตัวแคบในวันนี้ โดยถูกกดดันจากการแข็งค่าของดอลลาร์…

On the Compactness of Propositional Logic

STEM vs STEAM @DTU 12/02/2022