What Do Programmers Want?

I got an e-mail last week from three students at Halmstad University doing a three month project on what programmers want in a job, and how companies can attract talented programmers. Here are my answers to their questions, in order of importance. Obviously people have different preferences, so it would be interesting to hear what items you agree and disagree with, how you would rank them, and what you think is missing.

The product is software. I like the programs I work on to be the main business of the company. This rules out working in an IT-department, since their job only supports the real business (whatever it is) indirectly. I also like to work on the central parts of the system – the more important it is, the better. If my parts stop working, it should immediately become an emergency issue. Finally, I don’t want to merely configure, adapt and glue together software from other companies – I want to write significant chunks of functionality myself.

Great colleagues. It is very stimulating to work with smart programmers who are passionate about software development. Time and again I see how discussing a problem or a design with a colleague leads to a solution that is better than either of us would have come up with by ourselves. Not only does it lead to better code, the process itself is also very enjoyable.

How do you know if someone is a good programmer? A very good sign is if they keep learning and improving their skills, for example by reading books and blogs, taking courses, and going to conferences. It is not a necessary condition though; I’ve worked with plenty of really great developers that don’t. Finally, good developers tend to attract other good developers, because of the reasons above. The fact that a company has many great developers makes it easier to recruit more.

Challenging problems. Programmers like solving problems with code. There should be at least  some aspect of the product that requires clever solutions, be it requirements on low latency, many concurrent requests, or limited hardware resources. However, a lot of productions software consists of regular code without any particularly difficult parts. So you should not expect to only work on “hard problems” and shun everything else. Besides, it is a big challenge to organize even the boring code in a way that makes it easy to understand and maintain.

Cool technology. This is mainly about using interesting programming languages (for example Clojure, Erlang or Go), but also includes frameworks and applications (for example Hadoop or Cassandra). This is one area where a company may have a problem. If their application is written in a certain language (say C++), it won’t change. So if you want to change to using some new language, you pretty much have to change jobs. For example, if you want to work with Erlang in Stockholm, you could try Klarna or Campanja.

Users. One of the joys of coding is making something that is useful to others. Making something that nobody uses is boring. Having users (the more the better) focuses the development effort and gives valuable feedback. The only exception would be a start-up, but then the overriding priority must be to get users as soon as possible.

Good salary. Companies that have a lot of good developers know the value of great people. Since the variation between great and average programmers is big, it makes economic sense to pay for quality developers – the variation in productivity is much greater than the variation in salary. On the flip side, companies that don’t pay their programmers well tend to be the companies that view programmers as interchangeable “resources”. Those are the companies you want to avoid for other reasons as well, not just for the low salary.

Good tools. This is almost self-evident. Having a fast computer and several monitors speeds up development – who’s against that? (OK, pointy-haired bosses that only see the cost, not the benefit, would be against).

40 hours a week. If you constantly have to work overtime to ship, something is wrong in the organization. Besides, working long hours don’t equate with being productive.

Minimal bureaucracy. For the development process, this is more or less fixed with agile development methodologies, which seem almost universally adopted. General administrative overload is mostly a problem at larger companies in my experience.

Working from home. It’s handy to be able to work from home sometimes, but it is not high on my list. I like being at the office and interacting with people. I’ve worked with a remote office using video conferencing, chat and e-mail, but it didn’t come close to the kind of productivity you get from being co-located.

Short commute. Obviously hard to influence, but not spending hours each day in traffic is really great.

Comments

If you are a consultant, some things on the list change. I’ve always liked working for product companies, mostly because I prefer to really get to know a system deeply and seeing it evolve over time. So I don’t have any first-hand knowledge of working as a consultant, but my take is this. As a consultant, it is much easier to get exposed to cool new technology, since you have a chance to work with many different clients. However, even if you have great colleagues, you probably won’t work with them day to day, since you may be with different customers.

So this is the list, in order of importance, of what I look for in a company. In real life there are always some compromises, but the higher up something is on the list, the less willing I am to compromise on it. What are your priorities?

36 responses to “What Do Programmers Want?

    • Thanks for the link. Great article, I wholeheartedly agree.

    • People like the to make their own choices rather than having things imposed. This includes tools, processes, architecture, requirements etc.

      So programmers might resent the use of cool technology if it makes their life difficult if someone else made the choice. But if they made that choice they might feel differently.

  1. Job satisfaction in software development is a very interesting subject. Thanks for sharing your thoughts, Henrik!

    One thing that I would have added to the list is “a closed office” (or something along those lines). Basically a peaceful work environment with people who understand how programmers work, so that I wouldn’t get interrupted all the time.

    Another good thing would be if the employer supported my professional development by buying books, sending me to conventions and training/workshops, etc. That there was a certain amount of time set aside per week for my professional development.

    Kind regards,

    –Leif (http://irleif.com)

    • Hi Leif, I agree completely on quiet working conditions. In the past, I’ve had my own office, but for the past several years I’ve been sharing an office with one or two colleagues. Sharing works great, provided that we all work on the same or related products.

      At all the companies I have worked, I’ve been able to go to conferences and order as many books as I want (but I’ve been reading them on my own time). Paying for a book for an employee has got to be one of the cheapest ways of professional development there is.

  2. Good article Henrik 🙂 The point about challenging work is the main one for me. Nothing is harder than to stay motivated enough to program!

  3. I personally don’t mind if the product is software, as long as the company realizes that the rest of what they do won’t work without the software. That is, as long as the development team gets respect.

    I also agree with Leif, time and budget set aside for professional growth is crucial.

  4. I work for UCSF and they have a serious talent retention problem when it comes to good programmers. The needs you’ve outlined here are very much the reason why. My boss gets this, but UCSF, as you can imagine, is quite a monolithic organization, if you call it organized at all.

  5. +1 for companies providing their developers with good tools. Waiting on your computer causes stress and wastes tons of time.

  6. Agreed good hardware, new programming language and work from home a must for me too. New programming language is something for which I am changing my job 🙂

  7. As a 20+ year experience programmer I agree with everything said. Minimal bureaucracy is an absolute must. No question about it. Nothing kills the job like managers managing! Absolutely nothing!

  8. I was thinking about this last night, and thought of one more thing. If 40 hour weeks aren’t possible, I want overtime. Not even time and a half, just straight time.

  9. The people part is tops – both the great colleagues, those with 10+ years of experience, and the users, those with a great deal of excitement about what you’re building for them, and are very willing to be part of the process. Often we can get this but still be in a place where management is dull, for example they pay developers six-figure salary but then don’t want to pay $200 more for extra memory in the computer they provide for your use.

  10. It’s a very accurate list, but I personally would have ranked working from home much higher. On top of that flexible work hours are a must for me. 9-5 is not necessarily when everyone does their best work.

    However, trying to convince managers of that can be a challenging task.
    There’s a great talk on the very subject here: http://www.ted.com/talks/jason_fried_why_work_doesn_t_happen_at_work.html

  11. Pingback: 程序员追求的是什么? - 博客 - 伯乐在线

  12. Pingback: Links & reads for 2013 Week 13 | Martin's Weekly Curations

  13. Pingback: 程序员追求啥之我的追求 - 小奇客栈

  14. Pingback: 程序员追求的是什么? | 维维日记

  15. Pingback: 程序员追求的是什么? | 分享吧 - 发现乐趣,提升自我

  16. Pingback: 程序员追求的是什么?_cnBeta 人物 - Z的新闻

  17. Pingback: 程序员追求的是什么? | 中文互联网数据研究资讯中心-199IT

  18. Providing the right tools for the job seems like a no brainer, but a fortune 500 company was paying me a high hourly wage, but would not add more RAM to my slow computer which wasted at least 2 hours every day. I got tired of this and got more RAM on my own ($80) just so that I could feel productive. When I left that contract, I took my RAM with me 🙂

    Later that company became one who viewed programmers as interchangeable “resources”.

  19. Pingback: 程序员追求的是什么? | 田伟博客

  20. Pingback: 如何吸引頂尖 Coder : 老闆,你知道程式設計師要的是什麼嗎? | TechOrange《 創新與應用 |

  21. Pingback: 程序员追求的是什么? - 宇超博客

  22. Pingback: 程序员追求的是什么?

  23. Pingback: 程序员的追求 – 茶饭斋

  24. Pingback: 程序员追求的是什么? | FLYSSH博客

  25. Pingback: 一个程序员最想些什么 | IT江湖

  26. Pingback: 一个程序员最想些什么 | | Evolution Unit 进化Evolution Unit 进化

  27. Pingback: 程序员最想些什么? | 内容采集

  28. Pingback: Продуктивность программиста – отвлечение от работы, совещания и удаленная работа | Java

  29. Anonymous Coward

    My personal list is somewhat different.

    I prefer development services companies (outsourcing) to product companies. You get a lot of variety without the bureaucratic and social hassle associated with job changes. And, IME, you get to work on from the ground up fresh developments more often than you do when you work for a product company with an established line of products.

    (There are also downsides to working for an outsourcing company, but after 18 years in the field, I think that for me, at least, it’s something more fitting than product companies. It simply keeps you on your toes, and forces you to stay in good shape. Not something you experience to the same level in product companies, IME.)

    I think working from home is overrated. IMO, working many days from home is a sign of a bad work environment or a bad team. With a great team and a nice workplace, you actually look forward to getting there, after a weekend or a vacation.

    Tooling … I like to build my own development environment. I hate projects which are very prescriptive in this regard – among other reasons, also because such projects are usually not easy to update, as tooling evolves.

Leave a comment