I can't not use this gif even though pairing is not this.
Anyway! You should be actively collaborating. The best way to think of pairing is to think of it as one little meeting. If done right, it should push you to be a better dev and away from bad habits. Above all, pairing needs trust. If you are condescending, that breaks the trust of your pair and makes you a lousy pair. One good way to pair is to have the driver write a test, codes until the test passes, writes a new test, then switch driver to the other person, who then repeats the process. Never say "let me do this quickly by myself." That is not pairing! Help the driver solve the problem and stay on the same page, so you both understand. There's a lot more to this talk, but I think you should watch it yourself 😃
The Practical Guide to Building An Apprenticeship
Megan Tiu built out the apprenticeship program at CallRail and so we get to learn from her experience! To start an apprenticeship program, you need:
- plan (what are they going to do?)
- cash (pay them!)
- buy-in (convince the boss!)
You can sell it by noting that apprenticeship programs:
- eliminate onboarding costs (you get to teach a newbie developer your way of doing things)
- eliminate recruiting costs (why pay a recruiter $10K when you can give it to your apprentice)
- easier to hire seniors (who love to mentor)
Here's what you want to know about your plan:
- How long will the program be? (suggestion: 3-4 months)
- How many apprentices do you want to have? (ensure there are enough seniors to mentor them)
- What should they know prior to starting? (do you expect them to have a basic working knowledge of Rails?)
- What should they learn?
- How will they learn it? (through tickets, a big project, pairing, etc)
For hiring your apprentices, you want an application (basic questions to get to the heart of what they are about), a code challenge, and a final interview. If possible, do end-to-end anonymization until they get to the final interview. You also want to ensure you have a rubric prior to starting this process. After you hire them, try giving lessons on foundation concepts, then give them small changes (bugs/internal code). Then rotate them around to different teams, including customer facing product. And don't forget to set early expectations!
Eileen Uchitelle totally pumped me up. She discussed the various ways she is looking to make Rails more scalable by default. One of the things that really stuck with me was when she mentioned how so many companies are doing these things individually... so why not make them part of the overall framework and share the knowledge!
The Code Free Developer Interview
Can you tell I am into interviewing? This was a talk by Pete Holiday, also from CallRail. Here are the problems with coding during interviews:
- don't replicate real work
- disadvantage people without free time (code challenges)
- live coding is very stressful, even for experienced people
- difficult to develop and maintain a good code challenge
- many passive candidates won't do the takehome (I've done this before)
So what's the solution? The primary solution is to just talk to candidates.
- Ask all the candidates a consistent set of questions
- Define a rubric ahead of time
- Write down thoughts right after the interview
That's it! But there's more. Here are three possible techniques for a code-free interview:
1. Dig into their experience. Let them direct you to what they feel is most important. Ask questions like:
- What was your role in the project?
- How does the feature work?
- What's the worst technical debt? Why hasn't the team fixed it? How would you fix it?
- Has it had any bugs/outages in production? What happened? How did the team fix it?
2. Have them do a code review. If you choose this, make sure you are not using production code (they will have no context), are actively reducing complexity, and include realistic bugs without making it a bug hunt. One good option is to have a completely contrived situation with a simple application and a pull request to that simple app. Another is to fork an open source repository and create a contrived PR. The pull request should include no detail in the commit message, unsquashed commits, non-idiomatic code, overly complex, bad variable names, and actual bugs.
3. Try doing a collaborative system design. For this, you want to hypothetically build a tool, platform, or a project. You don't want any code or pseudocode and you should be working with the candidate. The general idea should be easy to understand and either related to the skills you're hiring for or well known. This can be forever-long, so it needs to be timeboxed. Let the candidate lead and build complexity if it's needed. For example:
Let's say we want to build Facebook. Get rid of the boilerplate (we already have users) and then ask "How do we implement status updates?". Once they get there, we can go deeper and ask about privacy controls, then granular privacy controls, and past that potential performance problems.
I loved this talk because I think code-free developer interviews should be the norm and have also been advocating for it at companies that I have been at.
Plays Well With Others: Improv For Nerds
H. Wade Minter gave this workshop and I don't have any notes on it because it was an improv class. But! One of the big things I took from it was our last activity. To remove bias from ideas, we did the following:
- each wrote down an idea on how to improve RailsConf for next year
- exchanged that idea with another person
- each paired up with someone else, compared ideas, and gave each idea a number of points (total points for the two ideas could not be higher than 7)
- exchanged ideas with a different person
- wash, rinse, repeat until we have compared ideas 5 times
At that point, we had seen about 10 different ideas (plus our own) and the best idea could have a total score of 35 with the worst having a score of 0. Our top idea had a score of about 26, with a good number being around 22. We had a couple of bad ideas in the double digits (I'm looking at you, bacon table). This definitely seems like a good practice for any organization with a decent number of people.
And that's it...
I did some more, but I don't have any notes! I also sat and watched my friend Sam Phippen pair for an hour and a half, so if you want to learn yourself some RSpec, watch here!