The Ideal Programming Environment
I was motivated to write this blog because two things. First was Kyle Daigle, from Github, and second ShipIt Saturday event at LaunchAcadmey.
Kyle was a guest speaker at Launch this week. His talk was not technical but everything else you think of in terms of ideal job situation, work, environment, culture, and ultimately what you want. To figure out what was important to me I began to think of all the companies that I admire, or want to be part of.
My 3 requirements are
90 - 100% Pair Programming
Time for Open Source contribution or to learn, anything programming related
Agile Practices + TDD
Throughout my experience at Launch, I learned that 2 set of eyes are better than one, at mostly everything. It was much easier to catch spelling errors, make design decisions, determine user requirements, and trouble shooting. The only thing that I prefer doing solo is if we both don’t have a clue and need to just learn by trying. I wouldn’t mind banging on the keyboard for 15 or 20 minutes and coming back with a solution. However, overall I find it that most errors have been encountered either by myself or my partner and it is much easier to learn by teaching my partner.
My second requirement is because I want it to have the spirit of the Ruby community. One thing I have learned in the past 3 months is how willing ruby on rails programmers are to helping others out. I want to give back as much as I can, and I want my company to want to give back to the community for making me great and awesome. Also, it’s a great way to market the company. thoughtbot is a great example, factorygirl, shoulda, etc.
Lastly, I’m a heavy believer of the minimum viable product populared by the lean startup movement. I think it is important to be able to bring a functional product as quickly as possible to market for feedback and repeat the cycle. I think agile practices is very close to this idea. Instead of guessing what the customer wants, by showing the customer piece by piece. This way as a developer I get immediate feedback of whether the product was what the customer had in mind, or figure out exactly what the customer had in mind, and go back to the keyboard. I included Test Driven Development, because I don’t believe that one can practice agile without the other. As programmers we can’t change or add code with confidence if we don’t know what this change is going to do to our program. This will ultimately slow down production and lead to mediocre code. Not very agile.
My next motivator for finding the right environment was Ship It saturday. The event was that you work on anything you’d like and be able to ship it to production(heroku) by the end of the day. Working under that time constraint was no joke. Being under that pressure to get something out was quite intense. Espeically calling everyone out that they needed to be done in order to upload their app to my site called ShipIt Saturday. The first half of the way wasn’t too intense. I was managing my time well following the red, green, refactor. The last 3 hours was quite brutal. I was stuck with the idea that it would be easier to implement a voting gem that was inactive for over a year. I ended up trying to figure out how it worked for 2 hours and talked to some people there and went on to write my own voting system. It was pretty much the most intense hour I had, in my programming career. I was sweating, anxious at the thought I was going to disappoint those who were going to display their app on my site. However, trying to keep a level head, I focused on my breathing and began to work. My final implementation of my voting system wasn’t 100% tested, but I tested the core functionality of it. Got the app up on heroku for live deployment. Yeah, I wouldn’t want to repeat that experience again. Although, I tested the core functionality that people are able to vote. I didn’t test to check that the position changed based on the amount of votes an project had.
If I had more time, I would have covered 100% and would have caught that projects position weren’t changing. I think high stress and deadlines environments produce may produce products, but not so maintainable code. I want to work at place where quality of the code matters more so than meeting deadlines. Of course there are exceptions and circumstances where dealines are important. But hopefully the company is working with customers who understand quality over speed.
*Thought: It takes time to be a great developer. If you realize that you’re not going to be great in the next day, week, or month. The ride will be much enjoyable.
John