“I’m considering a career change. I really want to stick with programming but the way most companies seem to work don’t fit in with my personality (ie. emphasis on agile, too much teamwork, etc.)”
With all of the demand for software developers, if you’re unhappy with your current job, you should try to find a company that’s a better fit for the way you want to work before considering a career change. From your description, it sounds like your exposure has mostly been with larger companies, which will tend to have cumbersome agile processes and naive ideas about teamwork. Smaller companies will tend not to have much process and value individual productivity more than team collaboration.
I’m going to assume that if you knew of another job where your personality and working style was a better fit, it would be more appealing than switching careers. A company where you might be happy may look something like this:
- Individual productivity is valued over being a team contributor.
- Self-direction is valued over formal processes.
- Creative freedom is valued over strict requirements.
All three of the job requirements point to either joining an early-stage startup or being a freelance contractor.
Startup environments (should) only focus on getting a product to market. Startup founders look for the quickest way to accomplish this, which is typically giving creative freedom to trusted individuals. As time-to-market is the priority, there are no distractions, and you are left alone to code as much as you can as fast as you can. Over time startup cultures can change as they grow, and as they hire more people, you may find that the culture changes to one you don’t like. In which case, you can move to another startup.
The reason large companies reject authentic startup cultures – which I suspect you would be happy in – is they do everything they can to avoid or mitigate risk. Putting their faith in an individual contributor is frightening as they believe that if the person were to leave, there would be a significant negative impact on the business. This mentality stems from a lack of trust, which in turn has them focus on distributing work across many people and call these people “teams.” While this may – in their mind at least – mitigate the possible consequences of an individual developer leaving, it still doesn’t solve the trust issue. To compensate for their lack of faith in their developer’s work ethic and dedication, they impose processes that they call “Agile,” but are typically only a 2-week Waterfall process with poor requirements and worse expectation management.
Not liking this risk-averse low-trust working environment is very common, and I suspect no software developer enjoys working under these conditions. Nonetheless, companies stick to these cultures as they are standard practices in manufacturing, and software development is seen as nothing more than a modern off-shoot of factory work. As factories function by assigning fungible labor to a single task in a repeatable process, the thinking goes that so too should software development. Ironically, this situation works for no one. Top talent leaves companies for startups, and companies then have to buy startups at premium valuations because they are unable to innovate in their factory-based model of software development.
Aside from being joining (or forming) a startup, you may also consider being a freelance programmer for hire, which is a form of contracting. Essentially, you would find your own clients, negotiate your own rates, and complete work however you saw fit. You would make your hours, and never have to deal with other people or any process. The scary part for most people is finding clients, but you only have to regularly attend tech meetups to start building a network of people looking for freelance talent. Provided you have a great portfolio and reasonable rates, and you should be able to get your first client within several months of dedicated networking. During this time, it is best to maintain your current job and only leave once your first client is secured. If networking is not something you feel you can do, then freelancing may not be advisable, as the challenge will always be to attract and retain clients – preferably with generous retainers for maintenance and upgrades.
As time goes on, your first client then acts as a reference for your second, then your third, and your business grows. With so much business, you’ll need to hire more developers. Eventually, you’ll make a bad-hire (everyone does) and will start to trust your developers less. You will then make them work together as a group under a heavy “Agile” process to make sure client work is actually getting done. At which point, you can sell your thriving business to a larger company and retire, thus perpetuating the cycle. I am kidding, of course, but I wanted to illustrate that companies are not evil to adopt factory-like models. At this point in human history, we don’t know of another way to scale software development, so we stick to what worked for the last hundred years or so. The side effect is good developers leave larger companies for startups or to be freelancers, but it’s not clear that this is necessarily a bad thing. Perhaps there is a need for factory-like software development, but personally, if that were the only choice, then I, too, would consider switching careers.