Recently I declined a job offer. The position had some amazing perks including a lot of time off, picking out my own hardware I worked on and a corner office with an amazing view of the Chicago River on both sides. The position was being the sole developer for a non-profit organization. They were small, and genuinely seemed like great people. It was clear to me that they were treated well and happy being there.
During my interview, I was able to ask questions about their development process. It was really non-existent. Things such as source control, testing, and continuous integration just was not happening there – yet. I viewed this as an opportunity to implement a development process. This could be a great way to not only say that I know about continuous integration, I implemented it. I was setting the standards. I would set the standard. They had a number of projects there that I saw potential in and they were a chance to use technologies I hadn’t done before. The possibilities were seemingly endless. I had a chance to be Superman.
I put a lot of thought into the offer. I discussed it with multiple developers, trying to see if I was missing something. I talked to non-developers who worked in non-profit organizations for their insights. Four years ago, I would have accepted the offer. I would have viewed it as my opportunity to do something big.
But at this point in my career, it isn’t the right fit for me. I didn’t realize that despite enjoying being a heads down coder, working with others made me a better coder. I thought about how many times I’ve sent a code review to someone and asked, “What do you think?” Often times, they would do the same to me. Looking at other people’s code and being able to discuss it made me think about how I can approach problems differently. I thought about how I recently acted as a mentor to three developers and gave them wisdom and feedback. In turn, they asked me questions that maybe I couldn’t explain clearly right on the spot which forced me to think about how I can word things more concisely.
Had I taken this position, there wouldn’t be anyone there to enforce process on me. No one there is going to make sure that I have everything checked in properly. No one there is going to make sure I’m following my own rules. Being Superman would mean I would be responsible for everything – even in times of disaster. What happens when I misunderstand a requirement? What happens if I make a typo and it isn’t caught until it is in production because there are yellow screens everywhere? Not only that, but being such a small IT department, I would probably be called upon to fix paper jams in printers and telling people to turn their computer off and on again because something isn’t working! Who is going to send me pictures of dogs when I’m overly stressed about an assignment? Who will I learn from, and who will challenge me to be better?
I don’t want to be the smartest, or the only developer in the office. If I’ve learned anything from where I currently work, it is that the overhead of working with other developers is worth it to have multiple minds on the problem. It makes for better software, and better developers.