---
title: From the Desk of a thoughtbot Apprentice
teaser:
tags: playbook,apprenticeship
author: Alex Godin
published_on: 2011-07-29
---

![An apprentice]

[An apprentice]: http://static3.wikia.nocookie.net/__cb20070812163736/darth/images/thumb/a/a2/Yodalukedagobah.jpg/640px-Yodalukedagobah.jpg

First, let me introduce myself, my name is Alex and I'm an apprentice here
at thoughtbot. You may recognize me from
[this](http://www.observer.com/2011/tech/meet-17-year-old-who-blew-everyones-minds-ignitenyc-last-night
"this"),
[this](http://techcrunch.com/2011/05/22/dispatch-io-hackathon-runner-up-tames-the-cloud/
"this") or [this](https://twitter.com/#!/alex_godin "this").

As an apprentice I get to immerse myself in the     world of thoughtbot. I sit
next to amazing developers and designers, and do     work on the exciting
projects that come through the door. As a result I'm     learning crazy fast,
every day I write code that I could not have written     the day before.
However, even bigger than the knowledge I'm gaining about     how to write code
is what I'm learning about process of developing     software. One of the things
that's really important is the way people work.

I had heard words like _XP_, _agile_, and _scrum_ used to describe software
development but had never seen them in practice. After 5-plus weeks here I can
tell you that the way they do things works.

### Standup

Every morning at 10:00 am the entire team gathers in the conference room. We
each go around the room and say   something along the lines of the following:

> Alex:   Yesterday I worked on \_\_\_\_\_\_, I implemented \_\_\_\_\_\_ I had
> to do \_\_\_\_\_\_ to make it work. Today I will be working on \_\_\_\_\_\_. I
> am blocked on \_\_\_\_\_\_\_\_\_\_\_.
>
> Someone else: Yesterday I worked on ______, I did   ______. Today I will be
> working on ______. I have no blockers.

These standups are the lifeblood of thoughtbot. They improve communication
internally and provide accountability. If I say I'm gonna do something in
standup then I do it. It ensures that if someone is blocked on a problem that
someone else can solve, then that problem gets solved.

### Retrospectives and teams

We work in teams. Each team usually consists of one designer and 2 to 3
developers. Each team dedicates its time to one project. Once a week each team
meets with the client to discuss what was done during the week. As part of the
retrospective each person on the team as well as the client goes around the
table describing how they are feeling about the project and airing any
grievances they may have about the way the project is progressing. These
meetings make sure that the team is all on the same page and that we are doing
work that our clients approve of.

![Airing some grievances](http://www.festivusweb.com/images/frank-costanza.jpg)

<small>_Airing of grievances_</small>

### Client Pitches/Caring about what we're working on

Before we work with a client we ask them to pitch to and converse with the
developers and designers (not just the management) on their product. We want to
know:

* What's their business model?
* Who are their competitors?
* Why is it a good idea?
* Will they be fun to work with?
* Do they get the principle of an MVP?

The reason we do this is simple. People do better work on projects that they're
excited about. By having potential clients pitch the product to us we can choose
products that we want to work on.

### TDD

Before I started at thoughtbot I was of the opinion, like many others, that
testing your code is a waste of time.

It was part of my job as an apprentice so I did it. But I was not as exuberant
about it as most of the other people here.

But then something changed.

I began to write cleaner code that solved real problems and when code introduced
breakages I knew about it right away.

Now I get scared when I see code without tests and I am test driving all my
code, even the stuff I work on outside of thoughtbot.

### Trajectory

We practice what we preach and use [Trajectory](https://www.apptrajectory.com/
"Trajectory") to manage product development. What this means is that there are
no emergencies. If a client finds a bug or needs a feature developed, they
simply put it in Trajectory and prioritize it. The developers and designers are
able to take the top story off the stack and have a discussion around it. All
from within the app.

### Campfire

We use [Campfire](http://campfirenow.com/ "Campfire") extensively. We have a
bunch of rooms:

* General Discussion, for company wide news, blog posts, etc.
* Dev Discussion, filled with vim tips, bugs and other geeky goodness.
* Design Discussion, I have no idea what goes on in here but it involves
  designers.
* A room for each project, in these rooms we post [feature branch code
  reviews](https://thoughtbot.com/blog/post/2831837714/feature-branch-code-reviews
  "feature branch code reviews") as well as project specific questions.
* Last but not least is everyone's favorite room, Watercoolor (or WC, as we call
  it). You see images of people's heads photoshopped onto other people's bodies
  as well as other off topic discussions If any of the other rooms go off topic,
  someone, usually Mike Burns, will chime in with _WC _reminding us that the
  current chat belongs in the watercooler room.

These Campfire rooms provide a non interruptive internal dialogue. People can
look into the room when they want to and ignore it when they're busy coding (or
designing).

### Pace

One of my first days here, someone was explicitly told _not_ to work on a client
project on the weekend. This threw me for a loop. Shouldn't a company want its
employees to work all hours of the day? The thing is that thoughtbot understands
that the best code is written during bank hours. This doesn't mean that
thoughtbot employees don't code at home. Everyone is encouraged to work on open
source and side projects at home; however, all client work is done during bank
hours when we are writing our best code.

### A better way to build software

One of thoughtbot's informal mottos is _there is a better way to build
software_. After 5 weeks here I can tell you that the fine folks here have got
something right. They write great code in a great atmosphere with no stress.
