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.