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:
33 thoughts on “The plumber programmer”
I completely empathise, I am going to have to change all my business cards from developer to plumber…
A different take on an aspect of this is
Whatever Happened to Programming? by Mike Taylor
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.
I always knew this was a crappy job.
Glad to see the idea is catching on! I wrote about this back in 2009: Engineering is plumbing, not math.
heh. my title has been “Software Plumber” for years. I’m glad to see it catching on.
Excellent point about the size of the arrows. And plumbing is what we do and do it well.
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.
Meanwhile, most plumbers are smart enough not to make their own pipe and fittings. Software engineers on the other hand…
More importantly their pipe sizes and fittings are standardised.
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.
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.
At least 30 years ago, someone (maybe me) observed that “the programmer is a plumber; if he’s doing his job right, everything flows.”
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.
Chris: I like structural engineer too. Better analogy than architect in some ways.
People always said that automation doesnt obsolete jobs, it just shifts them. Now I know where all the plumbers went.
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.
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…
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.
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!
That’s why the consultants call that integration – writing the units is easy making them work together, $$
A common term that we use is “spanner” – it’s someone who’s familiar with multiple technologies sufficient to get the job done effectively.
Anuj: Any connection to “spanner” as in the British term for a wrench? :)
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.
One of my application developers sent me this link….I’m the manager that draws the bass-ackward diagrams. Thanks for correcting my paradigm!
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.
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.
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.
plumber huh. I’ve always described it as smithing, not a software engineer, but a software smith
re smithing., my business card says “Chief Toolsmith”. Software Toolsmith is a good name for the integration work I do.
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!
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.
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.