A Tale of Two Cultures

Today I found myself thinking again of what I see as two distinct cultures in the development world: Hackers and Enterprise Developers. This really isn’t any kind of a rant just an observation that I’ve been thinking over lately.

Hackers are really bleeding edge. They have no problem using the commandline, using multiple languages, or contributing back to open source. They’ll find and fix bugs in the opensource software they use and issue pull requests frequently. They’ll always be willing to use new tools that help them produce better software when there might not even be any good IDE support. Finally, they’re always constantly investigating new technologies and techniques to give them a competitive edge in the world.

Now when I say hacker I don’t mean someone who just hacks lots of random shit together and calls it a day (that kind of developer isn’t good for anyone). Just someone who isn’t afraid to shake up the status quo, isn’t afraid to be a bit different and go against the grain. They’re the polar opposite of enterprise developers.

Enterprise Developers on the other hand are fairly conservative with their software development methodology. I’m not saying that a lack of standards is a good thing, but enterprise developers want standards for doing everything and they want it standardized across the company. If there isn’t IDE support for a tool they’ll refuse to use it. Want to use mongodb, riak, etc? Not unless there’s a fancy GUI client for interacting with it. If they find a bug they’ll back away from the framework they’re using and simply declare that the company shouldn’t use the framework until the bug is fixed externally. I find this group prefers to play it safe and work on solidifying their existing practices rather than explore new ideas.

Now don’t get me wrong, this isn’t another rant on IDEs or developers who don’t use the command line. But give me a couple days in any organization and I can quickly point out who the Hackers and Enterprise Developers are. The hackers are always pushing the envelope, trying new ideas out, giving presentations. Most likely they’re facing off against enterprise developers on a daily basis who attempt to rebuff their ideas. The enterprise developers on the other hand are pretty content to do their same daily routine for the rest of their lives without any change or growth. To paraphrase Q from the Star Trek episode Tapestry, “He learned to play it safe. And he never, ever got noticed by anybody.”

What I’ve been considering though is whether or not both are beneficial to an organization. It’s no secret I associate myself with the hacker group (and thus I am a bit biased) but I keep wondering if enterprise developers truly are just the right fit for some organizations. I always think hackers are perfect because they push the envelop and come up with all kinds of interesting solutions to scalability problems, such as using Bitorrent to deploy to thousands of servers. Enterprise developers on the other hand rarely exhibit such innovation and would require shelling out several million dollars for an application to copy a file to multiple destinations. In a nutshell, you can really get more done with hackers (who will seek to automate manual tasks as much as possible) while you can use enterprise developers in bulk to brute force through any problem.

To repeat the beginning of my post… this isn’t a rant. And I don’t mean to put “enterprise developers” in a negative light. This is all just some random thoughts going through my mind about the two cultures I commonly see in every organization I have been in. What’s your opinion?

  • http://jessitron.blogspot.com Jessica Kerr

    This is a useful distinction, thanks! Now I know what people mean when they call me a hacker.

    Many company cultures are more about CYA than getting anything done. Only Enterprise Developers fit in there. When the manager’s objective is to build an empire in order to get that next promotion, he needs Enterprise Developers.

  • http://www.andrewfuqua.com andrew fuqua

    The principal is valid and the classification makes sense as a continuum. But I’m not wild about the labels. craftsman and not craftsman would be better though still controversial. Polyglot perhaps. Or maybe conventional versus creative and exploratory.

  • http://eriwen.com Eric Wendelin

    One distinction I usually find between the 2 groups you’re talking about here is the will to break rules. I think that the more “enterprisey” developers don’t have the ability to break arbitrary rules (due to being nervous of consequences or lack of pride). Perhaps the difference is that some programmers have learned to ask for forgiveness instead of permission.

    Oftentimes, I’ve found myself having to take things away from other people or do things that others might consider objectionable to get a better result. I basically took the freedom I have and because of that it made me a more effective programmer (or hacker as you’d call it). For example, switching to git without telling anyone, then making it painful to go back. Now we all love and use git :)

    Funny how these things work out.

  • http://trystans.blogspot.com Trystan

    I guess that makes me a hacker on my spare time who has become something of a standards advocate at work then – but I don’t think it’s a lack of pride, or fear, or being content to stagnate, or a lack of craftsmanship, or whatever. It’s because I’m tired of having to pay what I call Yesterday’s Silver Bullet Tax.

    When you work on a 10+ year project that has had dozens of developers come and go then having to mess with the inconsistencies and half-abandoned was-bleeding-edge-five-years-ago ideas and tools *really* slows you down. After all, Research-oriented development and Switching tools in the middle of a project are both Classic Mistakes (http://www.stevemcconnell.com/rdenum.htm) precisely because they introduce new ways to fail and extra barriers that everyone on your team must overcome. I won’t even get into what happens when you discover that all these tools and frameworks don’t play nice together. How do you avoid that on a long term project where everyone wants to be bleeding edge, use languages no one else knows, and start using some random thing just because they’re bored?

  • Frisian

    The enterprise developers won’t reject mongodb on grounds of not having a GUI, but because it doesn’t support ACID. To me, the one reason MVCC and by extension datatbases, that supportet it, became so popular so quickly was, because you don’t have to deal with “uncommitted read” anymore. And the next step will be to check if it supports XA transactions. If you need to deal with multiple transactional resources, you learn to appreciate two-phase commit.
    And even they complain about the lack of IDE support, they mean “lack of community” and “lack of traction”. If the shiny new tools fails in a mission-critical situation, you want at least to be able to google about it. Enterprise developers not only want a framework or library to be well-known, but also their bugs! That’s why Apache stuff is so popular among them.
    Unlike a hacker an enterprise developer has to be concerned with long-term sustainability. That includes introducing new colleagues to a system. So, the less learning needed, the better. That’s, when “the one right way” pays off.

  • http://jalexoid.blogspot.com/ JAlexoid

    “This is all just some random thoughts going through my mind about the two cultures I commonly see in every organization I have been in. What’s your opinion?”

    That you color the world into black and white. Or you haven’t worked in enough agile and involved organizations to notice that “hackers”(that you describe) are as a negative force as the “lazy enterprise developers”.

    Those “hackers”, that you describe, rarely are willing to have discussions on the merits of their ideas. They want change for the sake of change. And in my experience the bleeding edge “hackers” are the least likely bunch of people to actually give a presentation.

  • Flo

    Both types of developers are useful, depends on the project.
    We just let go a few days ago a “hacker” from a critical high traffic real time document processing project. He was excellent from the technical point of view, best from the team but never delivered in time, always late because he tried using some cool technology, worked only on the tasks he liked with the tools he liked. Caused too much hassle to worth struggling with him. For that project we chose and tested carefully each framework and each deploy as we couldn’t afford the system to have any failures. Only “enterprise conservative developers” made it there.

    Another “hacker” on another project: excellent technical skills, brilliant and innovative ideas but always breaking the build by adding new cool stuff, each new cutting edge library made the application more and more unstable (but very nice code, I admit it) loosing valuable team time. The entire team was affected by being focused on stabilizing the changes instead of making new features. Let him go because the whole team had serious troubles delivering and spending too much time fixing replaced stuff that didn’t need replacement. In sports after all the final score matters (not the tricks that superstars do during the game). In software it’s about delivering. If we don’t deliver at a good quality it doesn’t matter that we use the latest (and untested/unexpectedly crashing) technologies.

  • http://sourcevirtues.wordpress.com/ Adrianos Dadis

    Hi James,

    nice idea for a post, I really like it :)
    Many years ago, Aristotle defined the kinds of predication and the definition of the kind. Most of the times, when someone separates a crowd of people (developers) in 2 kinds of predication, these kinds of predication are categories and not the generic kinds of Aristotle.
    So, you wrote here that there are 2 categories of developers, the Hackers and the Enterprise Developers. I believe that there is one more category (based on your definition) and this is the Hybrid Developer. A developer who has passion to investigate new technologies and techniques, and also help others to find and solve bugs. They know very well to use command line and they do not care if theirs IDE does not support a “feature”, even they use it everyday. On the other hand, they likes to follow a particular software development methodology. They like to use an IDE and they like to work in large projects, where “hacks” in every class in not good, as make the project very fragile and difficult to maintain it for years.

    Regards,
    Adrianos.

    Democary requires Free Software.

  • Ronald Miura

    What I see is those ‘so-called hackers’ come into the organization, ‘push their innovative ideas forward’, leave the company before the project is finished, and the ‘enterprise developers’ have to:

    - figure out what the hell they did, because they’ve left no documentation behind;

    - finish the project, that is, that ‘boring’ phase of fixing bugs, writing user documentation, help defining operation procedures, and actually shipping the product;

    - hunt down really crazy bugs, caused by ‘workarounds’ the ‘so-called hackers’ did to make some 0.1-alpha lib they got from github (the new sourceforge, but much worse) to work the way they wanted;

    - integrate the ‘thing’ that uses REST services (aka ad hoc JSON/plain text/CSV/binary responses to ad hoc HTTP GET/PUT/POST/DELETE/PATCH?! requests) to the other corporate applications, that all use boring XSD-defined SOAP messages.

    I really like my IDEs and tools, because they warn me when I do something wrong (because, different from ‘so-called hackers’, enterprise developers do make mistakes sometimes). And I don’t think being capable of program using vi is something to be proud of.

    I don’t really need a ‘fancy GUI’, but I need the management/administration tools my task (and the operation team) requires.

    New, shiny NoSQL databases? That require you to write a Map-Reduce algorithm to extract a simple consolidated report to your manager, instead of a simple SELECT with JOINs and SUMs? That assume your application code is perfect, because they simply don’t care about data integrity? Well, I’m sure they have their uses when implementing massively scalable systems, but that’s definitely not the usual case in the enterprise. 100 users? 1000 users? 10000 users? Postgres will cope with it just fine. I’m not implementing Facebook or Twitter (and different from them, I do care about not losing any data).

    And I do like trying new things, but in my pet projects. I only suggest the use of a new technology by my company if I’ve tested it enough to understand it, and see clearly its benefits and shortcomings. I don’t like to use my payer’s money to make my experiments (aka enhance my CV to get a better job).

    Competent, responsible, professional developers will neither be on the ‘bleeding edge’, nor stuck with COBOL forever (well, some will). They will advance, with care.

    Oh, and this was a rant by the way.

  • http://blog.james-carr.org James Carr

    Thanks for the responses everyone. They were varied, as I expected they would be.

    I think my original thesis is not holding up one kind of developer archetype above another but rather my thoughts lately. I think a healthy organization needs a right mix of both to have a lot of success. I have also found myself wondering a lot if maybe some organizations are fine to have development teams frozen in time tech wise.

    Ronald, you made a lot of really good valid points in your post that I think are a great counterpoint to mine. I too have actually been thrust into a project where they used ten different frameworks that were immensely popular at the beginning of the last decade. Juggling between these were indeed an absolute nightmare. I think you make a good closing point, that teams should seek to advance with care.

  • Frisian

    @Ronald Miura: But your rant was spot on!

  • Darren Cruse

    Sorry late to the party but I loved the post I think a lot about the differences you wrote about – I think mainly because I tend more toward what you termed a Hacker (e.g. always investigating new tech), and have sometimes had conflicts (which I don’t like) with more conservative Enterprise folks.

    A fun thought I wanted to share is that maybe your Hacker/Enterprise distinction is related to what (in the non tech world) is termed Liberals/Conservatives.

    e.g. I really loved this ted.com talk from 2008 it really helped me understand some things about myself and other people and why we see things differently:

    http://www.ted.com/talks/jonathan_haidt_on_the_moral_mind.html

    Note at the beginning of the talk he says one of the most reliable differences between Liberals and Conservatives is “openness to new experience”.

    It’d be interesting to know if when you say you can pretty quickly spot the Hackers/Enterprise guys if you could do a little experiment and say “so you’re open to node.js and NoSQL databases, do you mind me asking what you think of legalizing marijuana, and gay marriage?” :)

    If you do the experiment please e-mail me your findings I’d like to know. :)

  • http://techoctave.com/c7 TVD

    I agree with @Andrew, I’m not too wild about the label either. I believe the difference are more fluid and less black and white. It probably mirrors more closely a Convential vs Creative vs Exploratory vs Etc. paradigm.