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.

Postspage 2

 

07/12/2016
Zero Downtime Rebrand

Noah Smith and I gave this presentation at the San Francisco Django meetup in March of 2016, shortly after we rebranded ePantry to Grove Collaborative. Here's how we pulled it off.

first-screen Welcome folks!

first-screen That's us

first-screen We rebranded on March 8, 2016. Grove is an aspiration brand that speaks to our …

 

06/30/2016
The First Thing I Tell New Engineers

The first thing I tell junior programmers is: keep going.

If you've been programming a while, you know that feeling of encountering a new project, with a new stack, in a new language. The feeling is: OK. And you roll up your sleeves and get to work.

But do you …

 

06/29/2016
Software at Companies that Don't Sell Software

If you're a software professional, there are two types of companies you might work for; those whose products are fundamentally software (they make money directly from technology), and those that make their money some other way, but rely on software. Let's call the first Type A, and the second Type …

 

06/23/2016
Trello vs. Asana

In two totally different companies over the past 4 years, across different personalities, teams, and processes, I've seen Asana rejected no fewer than a dozen times in favor of Trello, in spite of multiple executive mandates to use Asana.

In both companies, management (of which I am a part) made …

 

06/17/2016
Pushing Bits with Python

When was the last time you needed to directly manipulate a bunch of binary data? Most engineers run across it only in the context of bit flags and masks in C++ or Java.

It's a little rarer to muck about with direct binary file data. It's nonetheless quite a bit …

 

06/09/2016
A Simple Content-Based Recommendation Engine in Python

Let's pretend we need to build a recommendation engine for an eCommerce web site.

There are basically two approaches you can take: content-based and collaborative-filtering. We'll look at some pros and cons of each approach, and then we'll dig into a simple implementation (ready for deployment on Heroku!) of a …

 

03/26/2015
How Celery Chord Synchronization Works

Celery is a powerful tool for managing asynchronous tasks in Python. The basic model is synchronous Python code pushes a task (in the form of a serialized message) into a message queue (the Celery "broker", which can be a variety of technologies - Redis, RabbitMQ, Memcached, or even a database), and …

 

04/21/2014
Refactoring for Testability: A Real World Example in Python/Django

At ePantry, we strive to have enough automated test coverage that we can deploy with confidence, without being dogmatic about our approach. We certainly aren't a TDD shop, and we don't have rules about code coverage metrics ("no commit can reduce code coverage!"), but it's very unusual that a non-cosmetic …

 

11/01/2013
The No-Frills Guide to PGP on OS X

Want to get started using PGP on your Mac, but confused by the morass of professor-doctor style sites with seemingly out-of-date software and plugins? Have no fear! I'll have you up and running in minutes with this handy guide. You'll learn how to use public key servers and how to …

 

09/12/2013
Form Over Function & The New iPhone

I probably found this more profound than it really is, but Matt Buchanan said it well in the New Yorker, regarding the latest iPhone announcements:

Fundamental technology, like manufacturing processes for processors and imaging sensors and displays, have evolved to the point that the basic shape and sense of a …

 

08/01/2013
Declarative Approach to Nesting Backbone Models

Backbone doesn't have great (any?) support for nested models. Here's my approach. I think it's kind of fun (we get to write recursive functions!), and hopefully useful. I'll report back when I've lived with it for a bit longer.

Here's the problem: We have a Backbone model with attributes that …

 

07/11/2013
How to Write a Bug Report

Writing good bug reports is the difference between actually seeing your bug get fixed and sending protracted emails over the course of a week convincing a developer that there is, in fact, a bug. By far the most important information you can provide in a bug report are clear reproduction …

 

07/11/2013
Changing Our Development Process

This is a post about change management at a start-up.

Kaggle, at just under 20 people, is an interesting size because we are right on the cusp of being able to wing it in terms of process and communication, and needing more formal processes to make sure changes and plans …

 

01/23/2013
Getting Started with Pandas - Predicting SAT Scores for New York City Schools

An Introduction to Pandas

This tutorial will get you started with Pandas - a data analysis library for Python that is great for data preparation, joining, and ultimately generating well-formed, tabular data that's easy to use in a variety of visualization tools or (as we will see here) machine learning applications …

 

01/17/2013
Entering Kaggle Competitions with Google Predict

BigML had a great series of posts over the summer pitting some prediction-as-a-service products against each other. One of those was the Google Predict API. I thought it might be fun to enter a Kaggle competition using the API and see how it did against some of the world's top …