Quit Doing Stupid Shit

At one point in my time at CareerPlug, the company adopted a phrase that I said in passing a few times - “Quit doing stupid shit” - as a company-wide mantra.

Was that a great phrase for the company to rally around? Probably not.

Most office workers do some amount of pointless busy work in their day (some more than others, perhaps), but saying that out loud can rub people the wrong way. No one wants to hear that their bosses think they’re doing stupid shit!

In spite of the insulting phrasing, there’s a lesson to learn from the mantra.

Read the rest Three-minute read

Building a custom Stimulus generator for Rails

If you’ve spent any time working with Ruby on Rails, you know that using generators can save you from a lot of console commands and copy/pasting from one file to the next. Need a new model? Just run rails g model MyNewModel name:string description:string and you’re set.

Rails covers most of the common use cases for you with built-in generators. If the built-in generators don’t meet your needs, you can get fancy by creating your own custom generators. Custom generators can save you time any time you’re finding yourself running lots of touch commands and copy/pasting boilerplate into new files.

Although Rails provides built-in generators for most things that Rails projects need, one common use case that’s missing is a generator for new Stimulus controllers. Stimulus , a modest JavaScript framework created by the team at Basecamp, is an increasingly common part of the Rails stack.

Read the rest Eight-minute read

Shape Up reflections: Volume 2

This post is a lightly edited version of an internal update I sent to everyone at CareerPlug after the completing our second product cycle, modeled on Basecamp’s Shape Up method. I am making these updates public in hopes that others will find value in the lessons learned from a real team adopting a fairly radical new product development process.

The first update includes more information about our product team and our company, for context. Italicized text are extra context I’ve added for the public version of this update.

Let’s dig in. -David

Read the rest Six-minute read

Building an instant search form with Stimulus.js and Rails

August 5, 2021 update: Since publishing this post, Turbo was released. While the method described here for building a live search interface with Stimulus still works just fine, if you’re using Stimulus, you might be interested in the other half of Hotwire on the web. In August of 2021, I published a post describing how to build the same interface described here with hotwire-rails, instead of just Stimulus.

Today we’re going to build a search form that instantly filters results using Ruby on Rails and Stimulus, a “modest” JavaScript framework designed to add small bits of interactivity without a lot of heavy lifting.

When we’re finished, we’ll have a list of Players that users can search by name. As they type in the search box, we’ll make a request to the server for players that match and display the results on the frontend (almost) instantly. Here’s what the end result will look like:

A screen recording of a user typing a search term into a search form and seeing results in a list below the form.

Read the rest 15-minute read

Building a simple commenting form with Stimulus and Rails 6

If you use Ruby on Rails, you’ve probably heard of Stimulus, a “modest” JavaScript framework for sprinkling in small bits of JavaScript to your mostly-HTML front-end. Instead of reaching for the monster JavaScript frameworks that have become very popular in recent years, Stimulus gives you the tools to add just enough interactivity while relying on plain-old Rails and HTML as often as possible.

To show you the power and simplicity of Stimulus we’re going to build a simple Stimulus-powered implementation of a commenting form. When we’re finished we’ll have a comment form that skips a page turn and neatly renders our new comments as we create them, without jQuery or JS partials — just a little bit of Stimulus-flavored JavaScript and HTML.

Read the rest 21-minute read

Shape Up reflections: Volume 1

Below you’ll find a lightly edited version of an internal update I sent to everyone at CareerPlug after the completing our first product cycle, modeled on Basecamp’s Shape Up method.

Since the target audience for these updates is the company first, I’ll add inline commentary and footnotes as needed to add context for readers that aren’t intimately familiar with CareerPlug’s internal workings.

My intent in sharing these kinds of internal documents is to help demystify the inner workings of product organizations — or at least the one product organization I can demystify.

As an introduction to our org, CareerPlug has ~50 employees in total, with a product team of 13 people. Today, our product team is made of up two UX designers, eight engineers, and two QA engineers, plus me.

Our core product, launched in 2012, is an Applicant Tracking System (ATS) used by more than 12,000 businesses in the United States and Canada. Our core clients are brick-and-mortar businesses (think retail, restaurants, and home services) with limited professional HR resources. Our ATS covers everything from distributing job postings to a variety of online job boards (think Indeed) through pre-hire assessments, interviews, offer letters, and background checks. It is a big, fairly complex piece of software, but we do our best to make the end user experience simple.

Let’s dig in. -David

Read the rest 13-minute read

Product managers: your job is not to say no

One of the most damaging pieces of advice you can receive as a new product manager is that your job is to say no. This advice, well-meaning and oft-repeated, isn’t wrong but when taken at face value it is incredibly damaging.

Your job as a product manager is not saying no; your job is saying yes to the right things.

This might seem like a silly distinction — in either case, you’re saying no a lot, right? — but your mindset makes all the difference.

Read the rest Four-minute read

Do less: A strategy for building better products

Product managers love building new things. It is a driving force behind why many of us decide on this career path; we get to spend all day figuring out what cool new thing to build next.

This love of building stuff serves us well in the early days of a product. Everything is new, you don’t have many users, and you are missing core components of your product’s value proposition. Delivering new features quickly helps you find problems that your users want you to solve before you run out of cash.

Eventually, if you build the right things and all of the pieces fall into place, you get past the early stage of searching for product-market fit and find that you have a growing base of happy users.

Reaching this point is a wonderful achievement — and a signal that your product strategy needs to change.

Read the rest Seven-minute read

Directional inputs for your product

The world of product management is noisy. Your clients are asking for new features. Your sales team needs a magical new feature to close their next deal. Your success team heard from 50 people yesterday about gaps in your product. Noise is coming in from every direction, all of the time. Learning to process a constant barrage of information from disparate sources into a coherent product vision is vital to success as a product manager.

One mistake that product managers make is becoming too focused on a single input channel. Most often, this happens when a single source is the loudest — the squeaky wheel gets the new feature. To break out of this habit, it can help to identify all of the different input channels that you should be monitoring and clarify the role each channel plays in the product management process.

Read the rest Nine-minute read