Programmers are brain surgeons

I sent out a mail recently to some managers in my company (before you start rolling your eyes, I’m a manager too) about project scheduling, something which I’ve been very frustrated about for a long while. In that mail I quoted something from the book “The Art of Project Management” by Scott Berkun — “Programmers should be trusted. If your brain surgeon told you the operation you need takes five hours, would you pressure him to do it in three?”.

Craig was quite amused at this quote, asking if I compared myself with a brain surgeon. While it was friendly banter, I thought that this was one of the problems with the software industry. Maybe it is the naming/association with the construction industry where architects design the building, engineers oversees the construction and anyone doing the actual work is considered menial laborers. Maybe it is the thousands working ‘software factories’ for outsourcing body-shoppers. Maybe it’s the large software projects that suck up thousands upon thousands of man-days with huge teams of programmers that gave rise to the myth that only large teams of programmers can produce software of any significance.

Whatever it is.

I believe programmers are not given enough respect that we deserve. Every time I interview someone or do performance appraisals for programmers and ask what kind of career paths they want, it’s always ‘management’. It could be project management or technical management, but almost inevitably it ends up to be some sort of ‘management’ or ‘getting away from low-level coding’ (even though they are already programming in Java) as if it’s a dirty job. It really infuriates me. Some time back I met an undegraduate from the Singapore Management University who was doing a Bachelor of Science in IS Management and apparently they’re going to graduate miraculously into IT project managers.

Laugh as you will if you recognize this scenario but can we blame them? What’s really the career opportunies for a programmer today? In tragic reality there isn’t a great deal. The zenith of the career of a programmer in a really technical path (barring starting up your own YouTube or Google) is probably the ‘Technical Expert’ or ‘Principal Engineer’, depending on what your HR hoist on you. And you’ll be reporting to a project manager with maybe a quarter your skills and experience telling you when you should be delivering code that is perfect.

I believe programmers should be given more respect as programmers. I was quite intrigued with Shao Pin‘s idea of a software company being organized in the form of a law firm. In this organization, programmers are like lawyers who are responsible for their hours clocked and for their own deliverables. They manage their own schedules and does almost every aspect of the delivery but will sometimes contract out work to specialists (e.g. graphics designers). Every project is handled by one programmer unless it is too big then he will have a junior programmer or two to help out, but the one programmer is the sole owner of the project. To this I will add the list of professionals like doctors (in clinics rather than hospitals), accountants and architects who set up their own practices and run their own shows.

But is this practical? Can software be really delivered this way? How about the timeline in delivery, how about testing, training, writing documentation and whole horde of other non-programming activities? It is common for lawyers work together for large cases, teams of surgeons perform complicated surgeries and big accounts are normally handled by large accounting firms with a number of accountants.

Why not? Lawyers and doctors work together on large complicated projects, but not all the time. Not all software needs to be large. Take business related software for example, there are more small companies than large companies, so there is naturally more need for small, to the point and useful software than ‘enterprise-level’ software. If the project is really large then groups of independent programmers can work together like lawyers and doctors do. Even actors are usually independent operators who are tied in to movie or television projects.

I want people to stop considering programmers as a replaceable and swappable ‘resource’ in a gang of workers but acknowledged as a true professional, with respected expertise and equal responsibilities. I don’t know when that day will come though.

29 thoughts on “Programmers are brain surgeons

  1. I agree 100%. And thank you for that quote, I’ll be using it regularly.

    Often people are pushed to “move up” into management when they get to a certain level of experience. This often increases the number of low quality managers as well as decreases the number of high quality developers.

    The assumption, of course, is that management is A) a higher position, and B) that anyone who is competent at their current job can be “made” a manager without any skills or training. A is insulting to programmers, and B is insulting to managers.

    Management requires a very special skill-set, and good managers need both personality and the training to perform well. Although it is a very important position, it isn’t’ higher than the engineers, it is simply different.

    Of course many programmers also have the personality to be a good leader/manager, but they still require education and experience to build their management skills.

    I like the doctor analogy; the Chief of Surgery is a surgeon first, manager second; I believe there should be a Chief Programmer, and that person should be a programmer first. Everyone else would be under this person, including the Project Manager.

    There would be a clear progression of technical positions for programmers to strive for, from Junior Programmer, all the way up to Chief. In addition, there are auxiliary positions such as Project Manager, QA, etc., whose jobs are to help facilitate the projects. Actually I like that term better, we should have Project Facilitators, not Project Managers.

    As for people giving programmers respect for the true professionals they are, well people rarely give anyone anything. We have to demand that respect and not settle for anything less, period.

  2. I’ve noticed a big difference in how programmers are treated depending on which side of the profit line they are.

    Programmers on the profit side, making products that are sold, are often treated very well – they are seen as creators who drive the business. Talk to programmers at Google or Microsoft: many of them will tell you how much respect they get in the organizations. Some of them are treated more like rock-stars than engineers.

    Programmers on the cost side, working in IT departments or support groups, are often not treated well. They are seen as a cost to the company bottom line, a hindrance, rather than an asset.

    So I think how programmers are treated has much to do with the organization they’re in, and where in the organization they are.

  3. @scott: good note about the profit line

    One question though, when prompted to “do in 3 hours instead of 4”, programmers usually replies “ok”, “i’ll try”, “very hard” or “sorry can’t” – all but the last means “ok” to the client actually.

    How many times do we reply immediately with: “what can you leave til next phase?”, or “this feature will be postponed then”

    Same goes for price.

  4. Todd, I agree with your commments, that’s very true.

    Scott, thanks for your comments, I find your book very insightful. Unfortunately not all organizations who depend on their programmers for profit treat their programmers well. Management in these companies consider their people cogs in their software churning factory. It’s telling when people start calling programmers ‘resources’ as though they are raw material in a production line. I hate this dehumanizing of people though the very name ‘Human Resource’ is a huge euphemism.

    Choon Keat, unfortunately even if we answer that it means nothing because programmers doesn’t have the economic leverage to influence the outcome.

  5. Sausheong: Of course, you’re right, many don’t. But I think odds improve when you’re on the profit side of the business.

    Choonkeat: you’re right too. But if the programmer says yes to something unrealistic, whose problem is it? Sanity demands saying no some of the time. (By the same token, you can spot a bad client right away when they ask for the impossible and refuse to accept no as an answer).

    I think smart clients want honest answers. They don’t want to gamble – they want an expert’s assessment, not an answer aimed to please their schedules (thus the brain surgeon joke :)

    I think there is something to be said for choices – a smart programmer might choose not to work with a client who only accepted unrealistic commitments. In the short run they might not have as many clients, but in the long run they’ll do better work, and earn more clients on their own terms.

    Nothing prevents a good programmer from leaving a bad situation and trying to find an environment more worthy of their talents, or creating an environment/company of their own. It’s certainly a harder path, but that’s often the price of more control.

  6. I believe you’re right…Programmers should be given more respect. However, in many instances Programmers bring this upon themselves. They underestimate the time a project will truly take, because they don’t think about all the time needed to test, document, train, implement, and fix the bugs. Never mind about holidays and sick/vacation days or the unexpected. They’re also arrogant. If they see a software utility that will save time, instead of using it, they want to “build their own”, because they think they can do a better job. (How many frameworks or CMS’ does the world really need?) That’s why they all want to be Managers…they think they can run the company better than anyone else.

  7. I fundamentally believe “programmers” will graduate into the type of field that is more similar being a doctor than being a construction worker.

    Part of what drives this belief is the nature of the task (abstract problems/solutions, problem solving) as well as the hands on aspect.

    Being able to detail the project and make it so monkeys could code through a waterfall approach *simply will never be a practical reality*. This to me is a key reason why everyone hates waterfall, and why everyone hates the quality of outsourced code. This is like having a doctor write the requirements for a surgery and then having a labtech perform it. Funny isn’t it?

    I do think programmers need to graduate to the level of real scientists- More statistics, more repeatable practices etc. Right now it’s just a bunch of opinions and ill-groomed geeks having passive aggressive battle over someone else modifying their code. This will build credibility with other teams in our organizations.

    Ultimately the analogy between construction workers and architects and engineers is broken one. I believe these “roles” will be consolidated into one person in the future.

  8. I like your article – reminds me of the surgical team essay from “Mythical Man-Month.” Your article talks more about why this idea could work and Brook’s essay is more about how such a team could be structured.

  9. I found a reference to this post from a university lecturer’s website in which he asked his students this question : ‘Should they resent you for going straight for “management” without spending any time “in the trenches” as a programmer?’

    My interpretation of his/her statement could be wrong, but it seems to me that he/she has drawn a clear line between ‘IS suits’ and ‘IT geeks’, and that the IS suits are in the management level above the IT geeks.

    I think this perspective is fundamentally wrong, akin to the flawed separation ‘white-collar’ and ‘blue-collar’ workers. My whole point is not that programmers should understand the business needs of the software they are developing, that there are no two artificial groups but a single professional called the ‘programmer’ very much like the ‘lawyer’ or the ‘surgeon’. I don’t have the answer to this now, (otherwise I won’t be blogging about it) but I hope to be able to change this someday, somehow.

  10. “Every project is handled by one programmer unless it is too big then he will have a junior programmer or two to help out, but the one programmer is the sole owner of the project. To this I will add the list of professionals like doctors (in clinics rather than hospitals), accountants and architects who set up their own practices and run their own shows.”

    Congratulations, thats straight out of Brooks ‘Mythical Man Month’. Circularity, feel it, round and round, and round again….

  11. When i was in college our professor told us that programming is as good as encoding, and it really hurt me because I’m the best programmer in the class, she said that we should target the managerial positions, and when i think of it, when i was in college I’m the project manager,I’m the systems analyst, I’m the DB administrator and I’m the PROGRAMMER because in school that’s how it goes, that’s why i say YES a PROGRAMMER can handle a single project.

  12. Personally i felt that its difficult to convince people to put level programmers with doctors and lawyers.

    Doctors and lawyers are really niche in their skills. Not anyone can become a doctor or lawyer overnight or “miraculously”. They need to go through industrial experience before they can become doctors/lawyers.

    But anyone can become a programmmer. Perhaps it is this ease of “becoming a programmer” has created an unfavourable perception.

    There was mention of unrealistic schedule. Lets not talk about the accuracy of the expert assessment (very individual and subjective) many realistic schedule becomes unrealistic simply because of improper prioritisation.

    Smart clients ask for honest answer but they also demand full attention once commited a schedule. Should there be reprioritisation, smart managers need to make the proper response to both the clients AND the programmers. Programmers do deserve respect when they put in that extra mile to make it happen.

  13. Sorry, but this doesn’t work in a lot of situations. The unspoken assumption is that this mythical “single programmer” will have a well-defined and specified set of software to produce. To often (most often, probably), this is not the case. The analogy with a doctor or lawyer is flawed, in that in both those cases, the end goal (a trial, a lawsuit, a cure for a disease, whatever) is basically fixed. In the case of software, the goal is almost never fixed. I would also submit that this mythical single programmer is not generally particularly qualified to determine what exactly is the desired end-product of whatever they’re doing–somebody else (e.g. a Product Manager, or a real customer) needs to be able to do that. I can certainly agree that a programmer (I prefer ‘software engineer’, to distinguish a level of competence from just a coder) could in theory just sit back and say “if you can tell me EXACTLY what you want me to build (whoever “you” is), then I can certainly build it for you.” That’s often what a software consultant does. But if you really think that the programmer will actually be able to just think up a problem and then solve it and expect people to beat a path to their door, that’s most often not the case (notwithstanding things like YouTube or Google.) Basically, I think your argument, while interesting, doesn’t hold water in the real world. I say that based on 30+ years of working as a programmer/software engineer/software architect.

  14. Dave, thanks for your comments. I believe this boils down to what you define as a ‘programmer’.

    If I understand your comments correctly, what you are saying is that generally programmer lacks the competence to resolve the problems a customer has and can only provide technical answers to the given problem.

    For me, ideally a programmer should provide more value than simply that of technical skills. While I know today such functions are played by different roles such as ‘consultants’ or ‘architects’, I’m suggesting that all these functions can be performed by a single person. Call him/her a programmer or an architect or a consultant but essentially a single person should see through the creation of the software that resolves the customer’s problem. In this case, a person who only knows how to code is not really a programmer, any more than a person who only knows how to type letters are lawyers or a person who only knows how to apply a bandage is a doctor.

    Admittedly I’m stretching the analogy a bit but nonetheless I wanted to compare our profession to that of recognized professionals in other fields.

  15. Mark, I haven’t read ‘The Mythical Man-Month’ for a long while now and I can’t remember most parts of it (blame it on my short term memory) but you are probably right. I can’t be the only person who thinks this way :)

  16. The IT industry is second only to Hollywood in it’s desire and ability to glorify itself, exagerate it’s own value, and bestow compliments on itself.

    Programmers are at the heart of this problem, perhaps because of their nature: working in relative isolation promotes individualism and self-absorption.

    While software is certainly an integral part of modern society, and growing ever more complex, it’s development is often hindered by the elitism, narrow individualism, and social apathy of its developers.

    In other words, for an industry that spends so much time patting itself on the back, we sure make some crappy software.

    I believe that programmers will go the way of the weavers. They’ll be replaced by machines that can generate code.

    As higher levels of abstraction in software development become possible, and artificial intelligence becomes viable, programmers will fall into two classes: the vast majority that service the equipment, and those that design it. The latter class will be highly trained professionals, and constitute a small fraction of the army of code monkeys out there today.

  17. “Maybe it is the naming/association with the construction industry where architects design the building, engineers oversees the construction and anyone doing the actual work is considered menial laborers.”

    “Ultimately the analogy between construction workers and architects and engineers is broken one.”

    Then again, perhaps the analogy holds, but not in the way it’s been traditionally thought — it appears to me that the programmers and software architects are the professionals — the architects and engineers — and it’s the *computers* that are the menial laborers. When we write code, in a way we’re developing a blueprint for a program — it’s up to other computer software — the compiler, the runtime system, and such — to do the brick-laying, that is, turning the code into activity.

  18. looks like some of you are miss-interpreting the industry analogy construction-programming

    the programmer is the same as the lowest level construction worker, the builder … he works according to a plan made by an architect and fills & matches the last bits .. the builder puts the bricks together and the programmer writes the actual code for predefined classes/functions/etc

    the “programmer” mentioned in the original article is more like a SoftwareEngineer or a SoftwareArchitect … that is the BrainSurgeon/Lawyer correspondent in the IT world… and the SoftwareArchitect role has quite the same level of “prestige” as an expert Lawyer role or BrainSurgeon or etc .. and there are enough companies that provide software architecture services and are organized like Lawyer firms.

    as a conclusion …compelling idea .. nice article .. unfortunatelly looks like a confusion of terms and a bad analogy

  19. In #13, guest says, “But anyone can become a programmer…” I don’t believe that anyone can become a programmer any more than I believe anyone with a knife can become a surgeon. Sure, a guy with a knife can hack you open and might even get lucky enough not to kill you and beyonf that, might even acheive his goal (kinda, sorta). But do you want him operating on you? Would you want to fly on a plane controlled by software written by a person who one day declared themself a programmer? You might get lucky…

    The problem is that there are no standards of capability/knowledge/quality for programmers as there are [or seem to be?] for doctors/lawyers. We need either some sort of legal protection for and measurable standards to earn the title ‘programmer’ (like those against using Doctor of you’re not one) or at least some form of standardized apprentice, journeyman, craftsman, master sort of arrangement (which I believe might actually work better).

    With sensible controls over (and penalties for) claiming the title “Programmer”, we would not need to earn respect. It would come with the title … but we’d need to earn /that/ the hard way: by actually being GOOD at our craft!

  20. That was EXACTLY the same Idea (worded much better) I had the other day when I was driving home from work after being on the losing end of a shitstorm… Thanks. You are now my homepage

  21. I don’t think that the comparison with brain surgeons is true, because I see more “medical errors” in programming that in the hospitals. A lot of programmers can do a lot of things in less time than expected… because they will never test if their program works correctly. And you can wait until intergration to see that it don’t work…. ;o(

  22. As a career programmer (30 years on the line), I have noticed the following;

    1. Programmers can do more harm or good than just about anybody else in the organization.

    2. Management respects nobody. They do give lip service to respect.

    3. Do you realy think it’s wise to pis off the employees that can do the most damage? Whould you piss off someone who carried a gun? I think not.

    4. like it or not, we all have lives.

    That said, the big problem that I see is that the growth path for programmers has never evolved. It is almost always expected that a programmer wants to go into management.

    Good programmers want to program, they don’t want to manage, but if you’ve been in a company for a couple of years as a programmer, there’s no up, just stagnation.

    If you’re a good programmer, chances are that you are stuck at a particular level that will will never escape (think caste system) until you leave the organization.

    Programmer’s are much more like doctors and lawyers than just about anything else. We practice law, we practice medicine and we certainly practice programming.

    I’m not sure I’d go along with the medical/legal practice model though.

    I think it’s a lot more like the ancient scribes, sooner or later, everyone will learn how to program and THEN things will get interesting.

    Reading, writing, arithmatic and computer programming.

    Yes, it’s true, I hold a definite bias towards people who use logic, I guess I’m just funny thaat way. While my career is pretty much in autumn, that doesn’t mean I think others should follow in my footsteps, after all, we all want our children to live better than we did, don’t we?

  23. Definitely imagine that that you stated. Your favourite reason appeared to be on the web the simplest factor
    to have in mind of. I say to you, I definitely get irked while other people
    consider issues that they just do not recognise about.

    You controlled to hit the nail upon the highest and
    also outlined out the whole thing without having side-effects , people could take a signal.
    Will likely be back to get more. Thank you

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s