The plumber programmer

I called someone a plumber programmer the other day. The person I was speaking to didn’t realize that “plumber programmer” is a term of great respect. The plumber is often the most experienced programmer on a team.

As with literal plumbing, software plumbing connects things together. It deals with things other people don’t want to see or think about. And it’s crucial.

Thomas Guest made a couple diagrams that illustrate this. Managers draw software diagrams with big boxes and little arrows. The boxes represent software components and the arrows represent the code that connects them together.

This gives the impression that the boxes are the hard part and the arrows are easy. The opposite is probably true. Thomas says if we drew the diagram so that the size of the components is proportional to the effort, it might look like this:

Related posts:

Where does programming effort go?
Your job is trivial (but I couldn’t do it)

Tagged with:
Posted in Software development, Uncategorized
33 comments on “The plumber programmer
  1. Omar Kooheji says:

    I completely empathise, I am going to have to change all my business cards from developer to plumber…

  2. Mike says:

    A different take on an aspect of this is
    Whatever Happened to Programming? by Mike Taylor

  3. nyrulez says:

    Plumbing together software components is probably one of the most critical skills for a software engineer. Proper delegation, API design, thin interfaces and testing these is hard.

    Most engineering professions could be seen from this perspective. The modern Boeing Dreamliner is a super complex and critical plumbing job.

  4. Sean McBeth says:

    I always knew this was a crappy job.

  5. Credentiality says:

    Glad to see the idea is catching on! I wrote about this back in 2009: Engineering is plumbing, not math.

  6. Matt Lanier says:

    heh. my title has been “Software Plumber” for years. I’m glad to see it catching on.

  7. Matt Doar says:

    Excellent point about the size of the arrows. And plumbing is what we do and do it well.

    ~Matt

  8. ambert ho says:

    nyrulez made a really good point. Look at all other engineering discplines:

    - circuit design is basically plumbing
    - building a car is plumbing the components made by the OEM’s subcontractors
    - building a bridge is plumbing together subcontracted (or on site assembled) components

    Back in the early days of each of these engineering disciplines people made their own components too, but decades later as the level of complexity rose (Wright Bros. vs. the 777) people stopped making their own shit, and relied on layers of abstraction to do “plumbing” to make ever more complex things.

  9. Brendan Dowling says:

    Meanwhile, most plumbers are smart enough not to make their own pipe and fittings. Software engineers on the other hand…

  10. Josh Simmons says:

    @Brendan Dowling

    More importantly their pipe sizes and fittings are standardised.

  11. Chris Quinn says:

    I have been described by “Software Architects” as the equivalent of a bricklayer, but have retorted that I’m more like a structural engineer, having to explain why the whole system will collapse into a heap of rubble if we follow the architect’s plans to the letter.

  12. Bruce Roeser says:

    I always refer to myself as a “software mechanic”. Similar idea to “plumber”. I’ve always worked on the lower level code (like my Rules Engine) and let the other developers build the presentation layer.

  13. Steve Jones says:

    At least 30 years ago, someone (maybe me) observed that “the programmer is a plumber; if he’s doing his job right, everything flows.”

  14. Stuart Rubin says:

    There is a rumored fact that if every toilet flushes at the same time, your pipes will explode. I think the analogy holds true to the software plumbing as well.

  15. John says:

    Chris: I like structural engineer too. Better analogy than architect in some ways.

  16. Charlie says:

    People always said that automation doesnt obsolete jobs, it just shifts them. Now I know where all the plumbers went.

  17. David says:

    I usually go by boilerplate gremlin.
    But plumber sounds… oh wait… Software Plumber sounds better.

    Earlier in the day when I said I used VB6 they said I’m an app developer… I said.. what’s an app? I’m working with interfaces/COM – DCOM Hell code, DLLs and all the stuff that makes those fancy screens work :) (To balance my guilt, I also programmed quite a bit in C). I also liked Microsoft PDS Basic 7.1 better than any VB crap until .NET came along. At least I could make stuff in Turbo C, MASM/TASM and add it to my PDS 7.1 stuff.

  18. Maciek says:

    And most of the plumbing is about retrofitting new appliances to a system that was designed with no capacity to support anything like that.

    I did some new plumbing once…

  19. Lim says:

    Did some plumbing as a 20 something and learned there are 3 thing you need to know to be a plumber; $|-|it runs downhill, don’t bite your nails, and payday is on Friday.
    So for the modern programmer/plumber I guess the 3 things to know are; loop until all the $|-|it is processed, don’t bite your bosses head off, and payday is every other Friday.

    When people ask me what I do I tell them I’m descended from a long line of sheepherders, and these days I shepherd electrons from place to place.

  20. Winston says:

    The thing about being a plumber is you have to be willing to get your hands dirty. Very dirty. Stinky dirty. I was a one man show for many years, I did design, all the coding, all the UI, all the implementation, training, and support. Nice, but limited earnings. I realized my best skill, and the one most in demand, was building those pipes. That’s what I have mostly done recently. I would MUCH rather be a plumber than try and make a web site both look pretty enough for the salesmen but still work enough to where the day to day user can stand to touch it. Not my problem anymore!

  21. Chanoch says:

    That’s why the consultants call that integration – writing the units is easy making them work together, $$

  22. Anuj says:

    A common term that we use is “spanner” – it’s someone who’s familiar with multiple technologies sufficient to get the job done effectively.

  23. John says:

    Anuj: Any connection to “spanner” as in the British term for a wrench? :)

  24. Andrew Au says:

    Let’s not forget the component themselves are big effort as well. It takes years to build a descent database, a scalable web server, or other middleware like queues.

    It is just that the cost is amortized, and people are adopting it instead of building their own, doesn’t mean they are not big at its own right.

  25. One of my application developers sent me this link….I’m the manager that draws the bass-ackward diagrams. Thanks for correcting my paradigm!

  26. Fabio says:

    So true. Few people realize how the arrows can be the hard work (at least the good ones). At least good arrows.

    All those shiny sketches say nothing about it and they are crucial in good software design.

  27. Crusty Coder says:

    John, thanks for that much more understandable decsription. I’ve always called this work “platform integration” (not entirely accurate, I know), which accounts for about 90% of what I do for any given project.

  28. Winston says:

    I have always worked for small companies, so the concept of a glossy design is something I read about in textbooks. I once worked for a larger (to me) company that had about 80 developers. They did have a glossy design. It consisted of some very high level circles and arrows and sample menus. Even after all these years, I’m still asked why the skinny arrows take so much time and “can’t you get that already done”? As if you could walk into Home Depot and say “I want to buy plumbing for my house already done”. It doesn’t matter if they understand or not, the important thing is they know who to call when the pipes break in the middle of the night.

  29. ias says:

    plumber huh. I’ve always described it as smithing, not a software engineer, but a software smith

  30. Matt Doar says:

    re smithing., my business card says “Chief Toolsmith”. Software Toolsmith is a good name for the integration work I do.

  31. Nirmalya says:

    Great! Now, I know that I have always wanted to be a great Software Plumber (perhaps, Software Smith sounds more ‘business-cardy’), corporate designations may go to hell! Thanks all of you for making the point clear, forceful and undeniable!

  32. Plumber and plumber software are two different thing. Plumber Software is a software that is used in plumbing whether it’s a spreadsheet, a tax program, or a scheduler. Plumbing software programs can help save small companies time and money. Plumber is a person who perform plumbing work. Software plumber design and develop software that help in plumbing.

  33. Samuel A. Falvo II says:

    Anyone who says software development isn’t math is deluding themselves, as any plumber who doesn’t know algebra does. Have you seen a good book on plumbing lately?

    More software would just work, and so much glue wouldn’t be necessary, if coders would just document their preconditions and postconditions, and that requires math.

5 Pings/Trackbacks for "The plumber programmer"
  1. [...] The plumber programmer [...]

  2. [...] The plumber programmer A simple diagram illustrated the concept really well [...]

  3. [...] in the math language, someone specialized in the application language, and someone fluent in plumbing the two languages together. If you have be all three people, you might wonder whether you could do [...]

  4. [...] 英文原文:http://www.johndcook.com/blog/2011/11/15/plumber-programmers/ 返回 [...]