The title of this Meditation comes, of course, from the punch-line of a really bad movie with a classic O’Henry Ending:

But in many ways, it also sums up my career.   (Polite pause as the twitter of laughter dies down.)   For most of the past 25 years or so, I’ve been involved in projects.   Generally, not ones that I had started.   Generally, not healthy ones.   Dead ones, or very nearly so.   My task was to try to “turn them around,” and I generally did.   Whether or not my attempts at resuscitation were actually long-term successful, this experience did teach me a lot of the reasons ... and they are human reasons ... why software projects so often go so badly wrong.   I’m not going to do any preaching here, although it may seem so.   I’m just relating some of my personal experiences in a mortuary project triage.   (FYI:   Teams-in-place were anywhere from one to fifteen people, most of whom had “split the coop.”)

First of all, these projects typically started out with “a great deal of enthusiasm, but no real plan.”   The usual justification was that the project needed to “hurry up to market,” or that the stakeholders in the project “would know it when they saw it” and the managers of the project (if there were any ...) simply gave-up trying to ask them to make up their minds.

And, of course, in several cases, those stakeholders were assured that they didn’t have to make up their minds.   “Self-directed teams,” the programmers purred self-confidently, “would produce a ‘potentially viable product(!)’ every two weeks!

“SOP = SOTP.™”   Standard Operating Procedure = Seat Of The Pants.

And yet, what happened ... what inevitably happened ... is that everything in the “software mechamism” turned out to be inextricably coupled to everything else.   As layers of code were piled on, and as changes pinged-and-ponged throughout all those layers, the whole thing fell down in a heap as the programmers sailed on to the next green pasture.

Many software projects are actually the work of one Guy.   (Sorry, ladies ...)   That “one guy” might be surrounded by several other people, but this is simply an attempt to scale-up the only modus operandi that this One Guy actually knows:   himself.   The project “feels its way along” because that’s how he’s used to doing it.   (And, because he is a crackerjack programmer, is used to eventually succeeding producing something.)   There simply isn’t any experience in being part of a successfully managed project:   most programmers, I candidly suspect, haven’t actually seen one.   (And there were no Angelic Choirs that started singing when I showed up either, I’m afraid ... no self-sunshine here.)

The underlying reason for these problems, I think, is:   a very natural human reaction to what is a virtually-unmanageable technical situation.   The objective of the project is to build a self-directing machine ... and to do it perfectly, because nothing less than perfection will do.   Viewed as a mechanism, software would be said to have “unlimited degrees-of-freedom.”   i.e. “Anything is connected to everything else.”   Although the instant-to-instant flow of control within the software is of course described by if/then/else and looping constructs, the actual mechanism is also determined by its internal and external state.   This concern for “state” is what causes the coupling.   (And it’s also one of the reasons why “Functional Programming” is such a hot research topic.)

My biggest criticism of Scrum, and Agile, and XP, and, well, most “methodologies,” is that they ignore this aspect.   They focus, instead, upon the organization and the daily work-activities of the team.   They discuss things like “user stories,” which are simply one possible way of trying to express one’s ideas and plans to a customer, but then omit from consideration exactly how that “story” is to become if/then/else, and how that new web of decision-logic is to be tested, and how it both affects and is affected by (“is infinitely coupled to ...”) everything else.   As a paradigm, useful in one sense though it may be, it does not and probably cannot (IMHO) go far enough.

“We are building a self-directing machine.”   That, quite frankly, is the light-bulb moment that I got from the Managing the Mechanism e-book.   It’s something that we can say to business stakeholders, except that it is extremely likely to scare them off.   It certainly does, I think, cast some useful insights on what we might be missing in our present-day methodologies.   We certainly do need better processes for our work, better ways to describe them, and better ways to inform stakeholders of exactly what we need from them and why.

In closing, one of the most prevalent things that I have seen, in every project that I have tried to turn-around, is disillusionment.   On both sides of the aisle.   Long before the software had broken down, communication had also broken down, and so had business process (if it ever truly existed).   No one builds houses and bridges that way.   (For very obvious, flammable and heavy reasons, no one is allowed to ...)   I suspect that the seeds of project failure are sown almost as soon as the first plow-blade cuts the soil.   This is our problem, as a profession, and we need a better solution to it.   Perhaps a different viewpoint is a start.

That’s my Meditation.   Borne, as I said, from a most-interesting career path that has not always been a happy one.   What do you think?   What have your experiences been?   For instance, have you worked-through a spectacular success story from one of these other strategies?   I’d love to hear it . . .   The water in the cooler is ice-cold and there’s beer in the fridge that’s even colder.   May the discussions begin?

Replies are listed 'Best First'.
Re: Software Projects In Real Life: "I See Dead People"
by mr_mischief (Monsignor) on Jun 23, 2015 at 21:29 UTC

    Oddly enough, one of the first things they teach in Scrum classes is that not every type of system is a good fit for Scrum.

    Some software gets very over-specified. This usually somewhere between the customer and the developers by someone called a Business Analyst or a Product Specialist. Things that were never asked for by the customer get added, the logic and basic control flow of the overall application are specified, and then it's lobbed at a development team. Then the developers spend a lot of time developing something, send it back out, and the customer is pissed they spent so much time and cash waiting to get delivered something that is half useless to their case.

    Those over-specified type of projects, it turns out, can have iterations done in which small amounts of work are added to the whole. The core idea can be fleshed out. Then Important Feature A can be added. Then work can move on to Important Feature B. Then the customer may even be able to use the project while work continues on Not-Quite-As-Important-Feature C. The customer asks the Product Owner for some things. The Product Owner makes sure the developers know what the customer wants, even if that means the PO goes back to the customer several times at the request of the developers. Then, get this, the people developing the software get to decide how to best develop it. The UI designer designs the UI. The programmers write the code. The technical writer writes the documentation. The programmers and/or the QA agents (some Scrum teams use a dedicated QA person and others have the main programmers do all the automated test suites) test it. Then they show it to the PO. Then the PO and the team schedule a meeting to show the customer what they've produced the last two to four weeks. The goal of every two to four week sprint is to make a commitment about what to deliver, work on it, and deliver it as a potentially useful part of the overall project. The project may not be totally useful until a few sprints go by because the customer may need multiple features from different sprints as their initial deployment. This works quite well for a lot of types of software.

    What type of software is a good candidate for this flexible specification and iterative delivery? Business process software is one. Document management is another. A shopping cart, content management system, forum... pretty much anything that's a basic CRUD interface with maybe some API calls to a payment gateway, social network, or data transmogrifier of some sort can start really basic and grow features. A word processor can start as a basic text editor, then support marking up text, then support a spell checker, then support templates, etc. The same basic text editor could instead be grown into a programmer's editor or an IDE.

    Where doesn't this work so well? Life support is an example. That's something where you have to have a whole bunch of specifications up front. Fly-by-wire flight control for planes is another. Missile guidance, nuclear plant controls, embedded systems that aren't easily updated in the field, and traffic control systems are probably poor candidates. This is especially true in initial development. It may be useful to have shorter, more responsive iterations for improvements once the initial system passes its rigorous test suite. It's possible to do these with Scrum from the beginning, but expect a whole lot of other effort around auditing all the edge cases. Something else -- maybe even traditional waterfall -- would probably be better for some things. In any case, no matter how it's developed (or how many Scrum sprints it might take), life-preserving or life-risking software or software that's really difficult to update shouldn't be actually put into place until all the parts are present.

    I think the argument "well you wouldn't use Scrum for X" is a strawman considering Scrum is pretty clear that it's only a fit for some projects.

      A very thoughtful reply, mr_mischief.   Thank you.

      A serious “fly in this ointment” is that the “features” of which one is speaking:   (a) are only the parts of the iceberg which are above the ocean, and (b) are tacitly assumed to be independent.   Therefore, the development team, without (as they(!!) say ...) “over-”specifying anything, pursues these highly-visible features one by one, but without proper regard to the whole.   The resulting work-product is too-often extremely brittle, becoming unserviceable in a comparatively short amount of time.   Words like “potentially,” used in the context of words like “useful” or “releaseable,” are, ahhh, “highly overrated.™”

      Again, the “self-directing machine” analogy.   A hopelessly-coupled contraption of highly interwoven parts.   Almost nothing is truly independent, in the general case.   The experienced business-analysts who look for such things might be the bearers of inconvenient truth, especially if they are themselves experienced developers.   (As you may have guessed, I play that role frequently.)

      And I speak, frankly, from the point-of-view of the coroner, or the emergency-room triage nurse.   Projects that have been “scrummed until they have to be scrubbed” are usually where I come into the scene.   This influences my thinking, and prompts this Meditation, but of course is not intended to be a straw man.   We all understand, I think, that I am pointing to something without attempting to gather all of reality into what I am pointing to.

      There is a germ of truth, of course.   There is such a thing as analysis paralysis, but there’s generally a much bigger thing known as “going off half-cocked.”   I agree that the project should be redlined in definite stages and that those stages should be as succinct as possible, but equal attention must be paid both to the parts above the water and to the vastness that is below.   If you let them, business stakeholders who really do not understand the process of building a software machine will seek to manage and micro-manage the activities.   (Not entirely wrong, because they’re the ones paying for it, as well as the ones who will be most-invested in the result.)

      Perhaps my most serious beef with “scrum,” and with most of these methodologies (to be frank), is that they both set and encourage perceptions among stakeholders that the process itself really can’t consistently meet.   This observation comes directly from my self-appointed role; from the dead or near-dead bodies that I see.   One of the first things that I find that I have to do is to (re-)build trust, not only in myself but in the whole damn software-development process!  When “trust” has been shattered, you really can’t get it back.   Sometimes the project can be turned around.   Sometimes the only realistic path is a slightly-softer and less-catastrophic crash landing.   In either case, the damage has already been done ... even though the teams consisted of professionals and no one knowingly acted in bad faith.

        without proper regard to the whole
        is a terrible strawman. If you have developers disregarding the whole and integrating things poorly, they are bad developers. It's not caused by developing small, modular pieces.

        A very thoughtful reply, mr_mischief. Thank you.
        Yet again, you've replied to yourself, not the person you intended. At least this time, you didn't insult yourself. :)

      " Missile guidance, nuclear plant controls, embedded systems that aren't easily updated in the field, and traffic control systems are probably poor candidates."

      Those are operational concerns, not development concerns. Next?

Re: Software Projects In Real Life: "I See Dead People"
by SuicideJunkie (Vicar) on Jun 23, 2015 at 19:31 UTC

    Personally, I think it is a problem of *marketing* methodologies to developers with *engineering* mindsets.

    All these things are pushed as the holy grail to make everything work, but it is always vague, handwavy and reeks of BS. Engineers will consider the merits of an extra horsepower on their motor or a 10% reduction in friction on a guide, or two more cores in their CPU. There is at that point a known, hard benefit, and the engineer will look for all the hidden downsides before buying in. Methodologies on the other hand, lack numbers or hard facts; trying to sell it falls flat at the first step (except that management buys right in, to the derision of the engineers). It becomes just one more silly thing that management has latched onto and forced on everybody. Same as that one more useless collaboration app auto-installed that nobody asked for, that one more layer of lag-inducing security checks, or that shuffling of everybody to a new cubicle yet again.

    The people pushing it claim that it will be a benefit but there are no numbers, no guarantees, and it has all been lies and empty promises before. Then it becomes a self-fulfilling prophecy of doom.

      "Personally, I think it is a problem of *marketing* methodologies to developers with *engineering* mindsets."

      Scrum/Lean/Agile were developed by engineers for engineers, not the other way around.

      "All these things are pushed as the holy grail to make everything work, but it is always vague, handwavy and reeks of BS."

      Citation? Oh never mind, you are making all this up.

        Citation? Oh never mind, you are making all this up.

        It is an anecdote. Personal experience. Stop trolling please. I'm sure somewhere it has been done well, but not where I've seen it.

        It doesn't matter if it was developed by engineers, if it is being sold by marketing or management. That's the problem in my opinion. I think we need an engineer to sell it to engineers.

      A reply falls below the community's threshold of quality. You may see it by logging in.
Re: Software Projects In Real Life: "I See Dead People"
by marinersk (Priest) on Jun 24, 2015 at 13:13 UTC

    Your note deserves a more well-thought-out reply than I have time to provide for the moment.

    I see both Art and Science in Software Engineering, and while the scales tip in many places toward the Science and process and controls and aversion to risk, it is not yet gone in this profession that new things can be created -- and notably new things of value are rarely created in the stifling environment of controlled process.

    Therefore, I disagree in general with your assertions, but I lack the time to back this up in this discussion at this time. I hope to be able to fill this out later, but given the general trend in the Monastary to bully you regardless of what you have to say, I doubt the conversation will retain any useful dialogue by the time I am able to contribute more fully in my arguments against you.

    For that, I apologize.

      Certainly, certainly.   (Software Engineering, like all other forms of Engineering, is both an Art and [Applied ...] Science.)   I certainly look forward to your further thoughts about “stifling” environments, and perhaps more-generally about the necessary balance between “creativity” and “process.”   Please, take your time.

      All that I can do, frankly, is to try to ignore “the bullies among us.”   This profession that we mutually chose turns out not to be such a simple thing, so there is much to talk about.   I do look forward to what you ... and others ... will have to say, my esteemed colleague.   (And, I mean that.)

Re: Software Projects In Real Life: "I See Dead People"
by einhverfr (Friar) on Jun 25, 2015 at 07:33 UTC

    Most successful projects I have worked on have been more than one person. Ideal seems to be about 2 to 5. Little management except from them.

    The problem with single person projects is there is often not enough feedback and checks on what seem like good ideas at the time. Too many people and suddenly you have management.

      The problem with single person projects is there is often not enough feedback and checks on what seem like good ideas at the time. Too many people and suddenly you have management.

      This is an awesome quote.

      Well, it would be interesting to know if anyone else has any insights as to team-size.   2-3 people seems most typical; teams of 4-5 are usually on two projects at once. And as long as they know how to manage, or are, more likely, under the purview of a project manager who knows how to give them a little distance (but, not too much), it seems to work okay.   But I have definitely found (as Mechanism openly states) that “a project manager who knows everything about project management but nothing about software ... can’t manage a software project.”

      Single-person projects, or teams or departments that are led by an autocrat who styles himself “head geek,” invariably are a certain recipe for disaster.   (Especially the latter.)   I think it’s really important that the key people on the team have knowledge of facilitation ... and diplomacy ... as well as above-average technical “chops.”

        Single-person projects, or teams or departments that are led by an autocrat who styles himself “head geek,” invariably are a certain recipe for disaster.

        CPAN disproves this quite conclusively.

Re: Software Projects In Real Life: "I See Dead People"
by chacham (Prior) on Jun 24, 2015 at 12:38 UTC

    <rant>
    methodologies

    Will everyone please stop using "methodology" (or "methodologies") when they mean to say "method" (or "methods".) :(

    Methodology is the study of methods. Hence the "ology." To have multiple "methodologies" would be quite the feat, unless you enjoy studying methods from multiple angles.

    Next time you are about to use the word "methodology", stop, drop, and roll your eyes. Then use "method" instead.

    When writing a message, or posting online,
    And you think "methodology" will fit in just fine.
    Stop in horror, once it's detected.
    Do not rest until it's corrected.
    For that, we know, is the correct method.
    </rant>

      Will pedants please stop ranting about the limitations of their own vocabularies.

      method /ˈmɛθəd/ noun - a particular procedure for accomplishing or approaching something, especially a systematic or established one.

      methodology /mɛθəˈdɒlədʒi/ noun - a system of methods used in a particular area of study or activity.

      A prescribed "system of methods" is not the same as "method" or "methods".

      Life and language moved on since the 1960s. Burying your head in the sand and bellyaching: "it wasn't a word when I was at school" won't change that.

      A reply falls below the community's threshold of quality. You may see it by logging in.
      A reply falls below the community's threshold of quality. You may see it by logging in.
Re: Software Projects In Real Life: "I See Dead People"
by chacham (Prior) on Jun 24, 2015 at 12:48 UTC

    Many software projects are actually the work of one Guy.

    I couldn't agree more. I have seen this so often, especially in large companies. Managers often rely on the one person, and a mutual trust and understanding develops. It's that trust and understanding that makes many projects successful.

Re: Software Projects In Real Life: "I See Dead People"
by Anonymous Monk on Jun 23, 2015 at 18:25 UTC
    "Software devs were probably doing agile before it was called agile. And most likely because because they had to get the job done despite management obstacles. As a matter of fact it's true even within Perl ... Stuff that now has a name and an acronym and an O'Reilly book, and an interview question/litmus test, used to be simply best practices ..."

    So that explains why those companies are failing to scale while companies that have adopted Scrum/Agile are succeeding.

A reply falls below the community's threshold of quality. You may see it by logging in.