> I think there is something uniquely magical about software, and part of that magic might stem from this tension in how we define it.<p>Well, yes, but I'd phrase this differently. To me, there is something uniquely <i>unprofessional</i> about software, and part of this <i>unprofessionalism</i> stems from our <i>lack of understanding</i>.<p>If you do get a computer science degree, congratulations! You have more knowledge than 90% of the people I've worked with in my 20-year career. But even then you only have the "book knowledge"; you still lack the real-world knowledge that comes from practicing a profession. Tradespeople are required to have both the book knowledge, and the practical knowledge (from working under a master). This solves a lot of problems by filling in the gaps that books leave out or haven't updated to yet.<p>Software feels like magic because there's so much to know. Even for experts, knowing "how to do something right" isn't totally clear. I think the cause of the uncertainty is software engineering's lack of standardization.<p>Not long ago, the world had no standard units for making buildings. Nails, bolts, wooden beams, sizes of walls, framing layout, roof design, etc varied widely. Making a building strong enough not to fall over, be blown over, shaken apart, or burn down in 10 minutes, required over-building it, because you didn't actually know how to figure out if it would fall over or not. But now the component parts of a building are made to a set minimum standard. Building codes lay out exactly how you can construct a building so that it's safe to use. It's still not <i>easy</i> to construct a building, but at least we know exactly how to do it, and we can check that it was done correctly. In this way, an expert <i>can</i> know exactly how to build a building the right way. Because of this, construction isn't magic. In fact, it's often derided as a job for people who aren't smart, yet you have to be fairly skilled to do any part of it well!<p>Software engineering still lacks the certainty that physical engineering figured out long ago. Apparently software isn't important enough for people to need to quantify it yet. As is usual with humans, it takes a busload of kids getting creamed by someone speeding through an intersection for us to finally put stop signs in place. I expect after the next world war, when our society is brought to its knees by a simple computer virus, security will become standardized and required, with liability for the "engineers" who don't follow the protocol.<p>....none of this has to do with organizations, though. Nothing magic about organizing software engineers. Successful management strategies that work at other companies, also work in software companies. There are additional management strategies that can help the lowest level of work become more efficient (<a href="https://www.atlassian.com/agile" rel="nofollow">https://www.atlassian.com/agile</a>), but those things require the boring, old, "normal" management to be done correctly first. This has been written about to death by people who've studied it all their lives. But software people stick to their software people blogs, and software people management strategies, and never branch out to see how the wider world works. Then they wonder why it all seems like magic.