Organizations Can't Change, But People Can Change Organizations

What can you do to create change in your organization? Find power in people.

Empathetic Hiring: Understanding What Candidates Want

The hiring market is tough right now. Compensation expectations, job mobility, recruiting costs, and opportunity costs for unfilled positions are all high. Here's how to attract talent to your company without resorting to gimmickry.

Roses are red / This pairing is for you

How do I love pairing? Let me count the ways. Probably not to the very depth and breadth and height my soul may reach, but hey pairing is still pretty cool. Seriously, why pairing?

Lessons Learned from our First Real World Code Live Stream

Earlier this month, Betsy and I tried to live stream a pairing session and failed miserably. But! We had fun, so we had a retro and made a plan for how we can do better.

Real World Code Incident Report! How We Used the OODA Loop to Triage a Amazon RDS Cascade Failure for a Heroku-hosted Rails App

Notabli reached out to us the day after Christmas because their API was falling over, and I was bored. Isn't that what everyone uses the Holidays for? Triaging production issues for fun? Here's how we diagnosed and resolved the downtime by using the OODA loop!

Level up by managing up: an engineer's primer

One tool you need to level up and grow your career is managing up. Managing up is scary, but investing in this skill now will pay off as you build a collaborative environment with your manager. How do you get started managing up?

Cohere 2018 Year in Review - Reflections on Financial, Mental, Physical and Relational Health

In Q4 2017, Cohere formed as a three-person worker cooperative. Our goals were to build a healthy environment where we could pursue our goals together. We learned a lot.

Debugging a Race Condition in a Brittle Cypress Test Live on Stream on January 3rd, 2019

We asked what programming problems you would like watch be solved on stream in a real-world context. ~40% of you wanted to see us solve a race condition and another 30% wanted to see us solve a brittle JavaScript feature test. We're doing both!

Understanding Git: Configuration of Repositories and Remotes

Recently, a community member asked for someone to explain what's going on in their .git/config when they have GitHub and Heroku remotes. This article refines your mental model by providing a glimpse into the history of software configuration and version control, and using that to solve a real-world configuration problem.

Engineering Managers: It's Time to Write Better Job Descriptions

Part of what makes a poor manager is a lack of investment into the day-to-day activities of management and an over-emphasis on the day-to-day activities of a practitioner. One of these day-to-day management activities is understanding and describing the work that is being done, why it's being done, and how it's being done. Here's how to communicate the this in the form of a good job description.

Implementation Strategies for Integrating External Services Into Your Application

Modern software relies on external services to take responsibility for some aspect of the product's feature set. Learn how to integrate them in a manner that's appropriate for your context.

You deserve a porcini hunting guide

A friend recently learned how to forage for porcini mushrooms in the Sierras. Learning to spot the mushrooms is a lot like learning how to refactor code in a legacy context.

Passion isn't terrible

Many companies seek passion in their candidates. But this can be counterproductive to the company's goals if that passion isn't aligned with the company's interests. What does counterproductive passion look like?

Pair programming problems are not a smell

We wrote down a few dozen dysfunctional pairing behaviors and sorted them into categories. It looked a lot like a code smell recipe book. But then we learned that these really weren't smells. We'll share our discoveries of how to address these dysfunctions - and what they really are.

Giving Back

We've always known the hard-working nonprofits and community organizations that needed our refactoring workshop could rarely afford it. As a thank-you to all those orgs for all the work they do, we're slashing our workshop prices for NPOs for the month starting on Giving Tuesday.

Metrics, Async/Await, and Really Big Hammers

Async/await is a _really shiny_ hammer. But what happens when we run into the wrong kind of nail?

Designing a Directed Conversational Interview

This article shows how to take interviewing techniques from the field of user research and cognition and meld them into a directed conversation interview, suitable for evaluating candidates against a skill ladder. Learn how to design a directed conversational interview for the early stages of your hiring process.

Practical Empathy, or: How I Stopped Hating Pair Programming

Pairing works better for me nowadays because I realized that pairing is a programming skill. Just like for loops, code review, or domain modelling. And like any other skill, it can be taught and learned. People love or hate pair programming, and for good reason! It's a tough skill!

Introducing "Let's Pair!", A Zine Series on Effective Pair Programming Techniques

While some see “Privilege” as a four letter word, as a leader it's critical to understand how team members' backgrounds impact them. People love or hate pair programming, and for good reason! It's a tough skill!

GraphQL and Rails - A Brief Introduction

While the marketing will tell you the concepts behind GraphQL are simple, a full GraphQL implementation is quite complex. Here are a few tips to help you learn to use GraphQL and Rails effectively together.

Interviewer Skills Part 3/3: Timing your interview

The candidate has gone off on a wild tangent and you're not learning anything useful. What do you do? should you bring them back to the topic you want to cover? if so, how? This is Part 3 of a multi-part series covering some of the topics introduced in our RailsConf 2018 workshop, "Interviewer Skills".

Evolving process for evolving teams

Like many of you, we hold standups to sync up on what people are up to, surfacing and supporting through blockers, and getting in a little regular facetime. We’re currently on our third variation of the year for how we do our standups. And today we're sharing our recipe for learning if your team process should change, and how to change it.

Interviewer Skills Part 2/??: How to create interview questions

You know what attributes will make someone the right addition to your team, and have specific enough descriptions that there can be no room for ambiguity. How do you translate these into interview questions? This is Part 2 of a multi-part series covering some of the topics introduced in our RailsConf 2018 workshop, "Interviewer Skills".

Interviewer Skills Part 1/??: Why set specific goals

How do you know if someone will be the right addition to your team? What happens if you both agree it's important to hire "no jerks" or people who are "smart and learn fast", but have different ideas about exactly that might mean? This is Part 1 of a multi-part series covering some of the topics introduced in our RailsConf 2018 workshop, "Interviewer Skills".

Return from RailsConf + Interviewer Skills Part 0/??: Intro

You asked us for it in the halls of RailsConf and on Twitter. This article is the first in a multi-part series going over some of the topics introduced in our Interviewer Skills workshop. We have a list of WIP topics. What do you most hope to learn? Let us know.

Twenty minutes

Recently I was chatting with a friend who works as an engineer -- a real engineer, as in buildings and bridges and structures. I was curious what a technical, regulated industry's interview process might look like. What might I learn from her interview practice that could teach me about being a better interviewer in the software industry? Her entire interview process takes twenty minutes. For an industry where shoddy technical work could lead directly to human death. What's the secret?

Tell me about a time when...

When as an interviewer must you ask about specific experiences, and when can you ask what a candidate would do in a hypothetical situation? What can you ask yourself to know the right question to ask?

Embracing Uncomfortable Refactoring

Sometimes refactoring is fun. Sometimes refactoring feels therapeutic. Usually, those kinds of refactoring are the kinds we don't need.

How to interview your future manager

What you need out of your manager may be different than what your colleagues, your friends, or your peers need -- and that's ok! What can you do to discover if the candidate interviewing to become your manager is the right person for the job?

A primer on setting up your remote employee

Two developers, both alike in dignity. In a fair tech valley, where we lay our scene. know what iambic pentameter is hella hard. How about we jump straight to talking about what to do if you have a lonely remote developer who's not succeeding on your in-office team.

A brief adventure in ActionMailer debugging

Are you making changes involving ActionMailer and hitting `(object doesn't support #inspect)`? Remember what `ActionMailer::Base.mail` is expected to return.

Designing Your Apprenticeship Program for Outcomes

Are you trying to build an apprenticeship program? Building cross-organizational buy-in can bolster your program's success. Learn how to align your apprenticeship program with your organization's desired outcomes.

Understanding, Owning and Leveraging Your Privilege In Tech

While some see “Privilege” as a four letter word, as a leader it's critical to understand how team members' backgrounds impact them. Learn how to own, understand and leverage your privilege.

An Introduction to Software Apprenticeship

Software apprenticeships develop your existing talent and help you expand your teams more quickly and effectively. Learn the basics of designing an apprenticeship program.