Pick Your Poison
As programmers, we are faced with a lot of decisions when looking for and ultimately deciding on a job. Pay is important in such a competitive market. One must look at benefits and vacation. The work environment is also very important, especially since the software industry is full of fun and exciting work environments unlike any other field.
Once a company seems right, we then have to make sure we meet the often very strict qualifications. Are we familiar with the technology? Is the company engaging in relevant best practices? This is no easy easy task and it can take weeks of planning and research to find out which companies would be a good fit.
Once a position is of interest, we then have to do one of the most important and age old practices of researching the company itself. This is good advice for applying at any company, of course, but there is an additional question software developers must ask themselves: is this a software company, or company that happens to write software?
This concept certainly isn’t mentioned much in the school systems, and it is something that both junior and senior developers alike need to ask. Software companies like Google and and Facebook are 100% invested in software and the developers that create it. This is not always the case with companies that find their profit from other products than the software itself and programmers need to be very careful in these situations.
There are a number of advantages to working for a software company. The most obvious is simply that everyone involved either understands software or will not last long if they don’t. Everyone speaks software and understands the challenges and realities that come with creating it.
Way back in 2007, Joel Spolsky gave a talk about this very subject. He was talking more about developing internal tools, but the same principles apply to creating software that is just a means to some other end as well. He states that one of the biggest gripes is:
You never get to do things the right way. You always have to do things the expedient way.
This makes sense because ultimately, it is not the software itself that brings in the most ROI. It’s not as important, then, that you use the best practices out there. Forget TDD, documentation, continuous integration or automated testing. Get it done quickly. Move on. Software companies will rarely sacrifice quality, other companies will.
Another advantage of working of a software company is the value that is placed on the programmers. Because software is directly related to making money, developers are more valued, and generally have a much brighter future in the company than they would otherwise. Being stuck on these types of teams can be miserable.
So that’s it, don’t ever work for a non-software company right? Not so fast. There are advantages out there as well, and given the right company and the right team, it can be an even more enjoyable and rewarding experience than being just another team.
One of the key things that can help programming teams working for non-software companies is to be an advocate for software development. These days, you probably won’t need to advocate for software itself. Software is seen as the magic tool that fixes whatever problem the business is facing at the time. The development process, though, is much less clear.
Spend some time explaining to the business about technical debt. Explain why the best practices exist and what implementing them will do to the project as a whole. You’ll never be able to justify adding two weeks to a project just for the sake of being “proper”. It has to solve a business need and bring in some sort of monetary value.
When advocating for proper development practices, you’ll need to present the information in a way that the business understands. In a software company, or even internally amongst other developers, you could probably get away with explaining something over coffee, in a quick meeting or a detailed email. For the non-programmer, you’re going to need to do more.
You might need to pull out those PowerPoint skills you learned back in school. It will depend on the organization, but most have a typical means they have for communication. In my experience, it’s slide shows. Put together a professional slide show. Everyone else in the company pitches their ideas this way, programmers shouldn’t expect to be any different.
As I mentioned earlier, software can be seen as that magic solution that solves problems but is often so far removed from the day to day user it scares them. Encourage other people in the company to get involved. Encourage them to submit ideas and provide feedback on the project as it is being developed.
As software developers, we know how rewarding it is to be able to think of something and then immediately be able to go out and implement it. It’s similarly rewarding to think it and then watch it be implemented. This can really get an organization excited about software development and more importantly, interested in the process, not just the end result.
All that said, once someone gets a taste of being able to affect the development process, it can be a dangerous thing. By opening up the channels to development, this can let in a flood of well-meaning requests, without an understanding of what that will do to the deadlines. This is why advocating for the process is so important. Everyone must know what “just one quick little feature” will do to the overall project.
As always, communication is probably the most important piece when it comes to getting the company fired up about software. A software team will never be valued if they are only seen as an external team that create products and then disappears.
Keep everyone in the loop. Explain to them delays. Share milestones and achievements. By putting in the effort, you’ll undoubtedly be one of the best communicating software teams they’ve ever worked with, and this has tremendous value.
Is it better to work for a software company? It truly depends. There are certainly plenty of advantages, and for the programmer looking to coast right on through their career, they should probably stick to software companies. However, for those willing to put in the effort, willing to work on soft skills and take a step out of the IDE a bit, working for a non-software company can be truly rewarding experience.
If you’re in the process of looking for a new job, think very hard about what kind of products the company sells. If they don’t focus on software, be sure to make this a high priority discussion point during the interview process. If you can’t guarantee that software development will be a priority, run. If you’re currently working for a non-software company, do what you can to prove the value and educate the rest of the business.
I’ve said it once and I’ll say it again: coding is the easy part. It’s interacting with others that is the challenge. If you’re working for a non-software company, take the challenge and put in the effort and it can make you an even better programmer.