Here is a list of things I would like to have in a job. Some are strong preferences, others are weak. An employer that wants me to give up on a strong preference needs to provide extraordinary compensation. I can give up weak preferences more easily, but the more I have to do that, the bigger the compensation needs to be. Compensation need not be financial.
- I develop free software, by writing new code, not by fixing other people's mistakes.
- I can build myself a significant role in the project. I get to participate in high-level architecture and design, and related decision making, not just code a small module in a large system. If I feel it is a good idea, I can make large, sweeping changes to the system as a whole, or any part in it, in collaboration with the rest of the developers.
- The project should be developed, from the start, using tools, techniques, technologies, and processes that I like and am convinced work well. For example, using sensible languages, fast iterations, TDD, high test coverage, DVCS, and bug tracking.
- At least one of schedule or scope should be flexible. There should be room in the schedule to occasionally stop and step back and look at the bigger picture, or to go out on a walk to think deep thoughts about what is going on.
- The work should be challenging, and should teach me new things. It should let me build on existing knowledge and experience.
- The job would involve me in just one project at a time. Multitasking between projects is so much less productive than concentrating on one project that it frustrates me to switch frequently.
- I want to have some freedom in choosing each project, within the constraints of doing business.
- The employer must not use software patents, except for defensive purposes.
- I must be able to other things in my free time, at least if they don't directly compete with what the employer has me do at work. This includes being a Debian developer, if I choose to do so.
- The software I develop is something I use myself.
- The software, if it is free software, is developed with a true community. The project does not require copyright assignments, does not throw code over a wall, and does not dictate the direction of the project solely based on its business needs.
- Management should concentrate on providing a good working environment, and sufficient resources to do good work, and should not try to micro-manage me or my team.
- Projects should be shortish, up to a few months. Larger projects should be broken down into shorter ones.
- Work should be done at home, or in a quiet office with private rooms, or rooms for small teams. No open plan offices.
- I should be compensated reasonably well. I should have at least five weeks of vacation per year. If work requires me to be away from home during weekends, or travel on weekends, those days should count as work and be compensated in a suitable way.
- I would like my employer to send me to one or two interesting conferences each year, perhaps even to give presentations about my work. One of the conferences should be Debconf, the yearly Debian conference.