My Bendyworks Apprenticeship
I started at Bendyworks on July 18, 2011 as an apprentice. On my first day, Stephen Anderson and I dove right into pressing client work. We always pair program at Bendyworks so I was never “stuck” or “lost.” However, Bendyworks prides itself on using the best tools for the job, even when there’s a steep learning curve.
I was instantly confronted with my first challenge, Vim. What do you mean you can’t just edit text? What are modes and motions? I had to write a bunch of things down, print out cheat sheets, and practice with vimtutor until I could actually get around in Vim. One of the great things about working at Bendyworks is the truly collaborative nature of everything that we do. In addition, there’s a culture of learning, so I was encouraged to ask questions and spend time studying a particular topic when necessary.
The bulk of my learning came from real client work. Shortly after I started, Bendyworks wisely brought on Ryland Herrick and Chris Wilson. These guys were teeming with CS knowledge when they walked in the door, but like me, needed to be brought up to speed on building well-tested applications for real-world clients. Together, the three of us and a senior developer (usually Stephen) formed the awesome apprentice team.
In order to keep the velocity of learning high and to build excellent software, we switched up pairs once or twice a day. Each pair worked on different parts of the same project. Our rapid switching strategy proved to have a number of positives and negatives. On the plus side, each developer always had their hand in all parts of the project. In addition, each apprentice paired with the senior developer each day. However, on the downside, switching often makes it difficult to solve more complicated problems. Overall, I think our rapid switching strategy was successful in adding to the quality of the software and in providing additional learning opportunities for me.
I enjoyed many aspects of the Bendyworks Apprenticeship Program, but I loved when a colleague would take me to one of the Bendyworks whiteboards to explain a particular concept. One day, when brainstorming implementations for a comment thread for this blog (we later decided to go with Disqus), I asked Nick Karpenske how we would store the tree structure of the comments. He thought about it for a second, and then whisked me away to the conference room whiteboard for a 15 minute lesson on preorder tree traversal. Other whiteboard mini-lessons included database normalization, binary math, and data structures.
Our apprentice team recently wrapped up our first client project and I think we nailed it. The code is beautiful, well tested, and free of bugs or defects. Most importantly, our client is thrilled and we all improved our software development skills each day. I think the keys to our success were frequent client communication, the courage to make major architecture changes when needed, and fantastic support from everyone at Bendyworks.
There’s so much more that I’d love to share with you but I think it’s best that I leave it for another post.