3 ms·
<rant>I don't think most people know what they're doing when it comes to managing the delivery of software. The field is full of canards, facile simplifications
by DanielBMarkham 7y ago
<rant>I don't think most people know what they're doing when it comes to managing the delivery of software. The field is full of canards, facile simplifications, and self-referential, circular reasoning. A few examples.
- The problem is requirements. Is the system broken? Yes. Do the requirements say for it to be this way? Yes. Must be broken requirements, right? Since requirements are the "driver" of the process, if the process is broke so must be something about requirements.
- Software is never done. Bullshit. Do I need somebody to reprogram my decades-old mp3 player? I do not. Would it be nice if somebody did? Maybe, but it's not required for me to enjoy the software. The software is written, does its job, and needs no maintenance. It's done. There's plenty of software being updated today for pretty good reasons that for all intents and purposes is done. Just nobody wants to admit it. If it's possible to add stuff or update it, we do. It's what we do.
- FTA, "...Requirements change. Every software engineering project will face this hard problem at some point..." That's true, but woefully incomplete. Your job creating software is not to meet the requirements, it's not to change and add stuff as the requirements change. That's viewing the work, once again, as requirements-driven. No matter what your process or paperwork, the work is ultimately user-driven, not requirements-driven. Your job is to scope a domain, anticipate change in that domain, and provide easy-to-use configurable software that anticipates that change. You do that by knowing the users and the work, not by reading requirements or responding to updated requirements. That kind of thinking removes the key piece of the entire work, the user. By the time somebody gives you a requirement, it's too late. Your design is whack.
How do we make aviation and space travel gear safe? We fly the hell out of it. What's the wrong way to go? Build one-at-a-time and ask for changes and complete reworks for every new project. How do we build software today? Like we used to build rockets; using the wrong metaphor. We need reusable, configurable, capabilities-driven software, not endlessly worked-on huge hunks of bytes from BigCorp feature factories.</rant>
EDIT: Just to clarify the rocket metaphor, we'd be far, far better off using COTS tools and writing minimalist, simple code that only does a few things, then pounding the hell out of it with actual usage to figure out which "axes of change" we missed. Instead, more and more everything has some unique tech stack, a byzantine testing and deployment deployment system, the entire thing fun of tons of complex one-of code everywhere ... then we stick on new features one at a time every time there's something a user wants that it doesn't have. From a managing-complexity and managing-cost standpoint, it's actually worse than the Big Project rocket situation we had for decades.