I'm Chris Clark, the CTO and co-founder of Grove Collaborative. Over the years I've written a number of articles about software, technology, and teams.



LLM-Powered Django Admin Fields

Note: All relevant code can be found in the corresponding Github repo.

I work at Grove Collaborative -- an ecommerce company that sells thousands of different products. We use Django and the Django admin as our product information system to manage, among other things, all of the copy on our Product …


Robot Dad

See discussion of this post on Hacker News

Tired of Alexa's feeble "here's what I found on wikianswerspam.com" responses to my eight-year-old son's science questions, I whipped up Robot Dad during my Thanksgiving break. He now runs in the background of our family computer.

Robot Dad sounds like real …


Copy Editing a Novel with ChatGPT

My wife, a writer, recently and unexpectedly needed a final round of copy-editing on a manuscript she had written some time ago. There wasn't time to hire a professional, and even splitting it up, we couldn't get it done between the two of us fast enough.

Luckily, I know Python …


Short Stories for Engineers

I've recently been reminded of a few favorite short stories, and discovered some new ones, that swirl around themes of existence, engineering. order, systems, computing, and information.

None of these are deep cuts; they are well known among sci-fi readers and short story lovers. But I thought I'd compile the …


Guidepost - Business Value

We write code to deliver business value. We should therefore select solutions where most of the investment is going into the differentiated bits that drive business value.

This means we want to write more code that is only relevant to Grove (because it uniquely solves our business problems) and less …


Guidepost - Getting to Production

We’ve always prioritized getting to production frequently. Lots of goodness flows from shipping early and often. The problems associated with shipping too frequently are so much easier to fix than the problems of shipping too infrequently.

When releases are infrequent, there is a natural tendency to “shrink to fit …


Guidepost - How Long Should Software Last?

At each stage of the business, there is a correspondingly appropriate length of time you should plan for your code to last - the horizon of the software’s utility. In the very early stages of a start-up, code may only need to last a few days. “We’ll try it …


Guidepost - Scaling Principles

Distributed systems are hard. We should exhaust many options before the solution is “do something distributed”. This is also why we are fine creating services, but are not advocates of “micro services”.

Similarly, in most cases we should exhaust vertical scaling before moving to horizontal. It’s almost always less …


Guidepost - Services & Monoliths

Monoliths are not inherently problematic. Perhaps they are even good! Close coupling is the evil to avoid. With good design, monoliths can avoid tight coupling. Services can also be a valuable tool for achieving this. But the purpose of decreasing coupling is to decrease overall complexity. Therefore a service that …


Guidepost - Technology & Language Selection

There is value in consistency, and fungibility (e.g. the extent to which a developer can work on multiple projects). There’s value in better bus factors.

Therefore, there is a high bar for selecting a new technology that the team doesn’t know.

At some level, programming languages are …


Guidepost - Testing

The primary value of great tests is that it allows developers (especially those who didn’t write the original code!) to refactor. With tests at your back, you can refactor with confidence. Without the ability to refactor, our velocity will slowly decrease to zero.

We love automated testing. If you …


Adventures in Candy Land

I play Candy Land occasionally with my two boys (the six year old gets it much more than the three year old). It has the strange property of involving both zero skill and zero agency. There are absolutely no decisions for the player to make at any point; the outcome …


Explorations in The Card Game SET®

SET is a classic pattern-matching card game that's been around since the 1970s, but really took off in the 90s. It hits all the right marks for a great game casual game; easy to learn, works for any number of players, you can play for 5 minutes or for hours …


A Simple Trending Products Recommendation Engine in Python

Our product recommendations were boring. I knew that because our customers told us. When surveyed, the #1 thing they wanted from us was better product discovery. And looking at the analytics data, I could see customers clicking through page after page of recommendations, looking for something new to buy. We …


How to Buy Expensive Software Part 1: Vendors & Demos

Some days it seems like all I'm good for is buying other companies' software.

It's a little ridiculous. I get 5-10 emails a day pitching some SaaS solution. You probably get them too. Recognize any of these subject lines?

  • Christopher, do you have 15 minutes to connect about my previous …