Bites

Bites is the developer site from the team building the platform for local food shopping and distribution at goodeggs.com. Here we share our experiences building applications with full-stack JavaScript, our open source projects and insight into a developer's life at Good Eggs.

Self-Updating Go Binaries with go-selfupdate

Bob Zoller on

The main developer interface to our bespoke PaaS (called Ranch) is a command line binary written in Go. At first, a Homebrew recipe was plenty convienent to get it onto my early adopter's OSX laptops. Once I had a few more users and some Linux hosts (CI/CD), however, I wanted to create a built-in update command.

In this post I'll cover how I built the update command, added it to my pre-existing goxc-based build & release flow, and touch on a few improvements I'd like to make down the road.

Sticky A/B Tests with Fastly

Bob Zoller on

Here at Good Eggs, we're in the process of moving all of our applications to a bespoke PaaS we call Ranch. As soon as Ranch was ready for production traffic, we wanted to see how its performance differed from our current setup. In this post I'll walk through how I set up a sticky A/B test using only Fastly and their custom VCL feature.

CommonJS Modules Make Brittle Singletons

Adam Hull on

We occasionally rely on node's module caching to share a single instance throughout a full-stack javascript project. This strategy breaks more than we'd like.

If modules butternut and delicata both require('squash'), they'll usually get the same (think ===) squash instance. But not always.

Here are a couple times it hasn't worked out.

Getting started with Selenium Webdriver for node.js

Max Edmands on

If you're writing a web application using node.js, you will want to spend some time writing integration tests for it. At Good Eggs, we use selenium-webdriver for our integration tests. It's a reliable and comprehensive library, but finding great documentation on the internet is surprisingly difficult. That changes today. Here's a step-by-step guide to start controlling a browser using selenium-webdriver for node.

Things Last: Work vs School

Sarah Sterman on

In school, nothing lasts longer than 10 weeks--at least if you’re on the quarter system that Stanford subscribes to. A few do, like your roommate or your unfortunate streak of nights where you had to drink coffee after midnight, but, otherwise, your life is turning over every quarter of the year. New classes, new projects, new teammates.

The funny thing about work in the real world: things last.

Speed up your responsive app with Node and Varnish

Adam Hull on

This is the fourth article in a series of posts detailing the launch of our mobile site.
  1. Good Eggs Goes Mobile
  2. Rivets for Mobile Web
  3. Planning Page Load Sequence
  4. Speed with Node and Varnish
  5. Appropriate image sizes with imgix
  6. Integration testing over unit testing

Conversations about responsive design often focus on the browser: media queries, grids, and the like, but there's more! Creating a great experience on all sorts of consumer-grade doo-dads demands some work on the server.

On Good Eggs, shoppers with full-sized computers don't want all their grocery aisles hidden behind a collapsible menu. The markup to generate the desktop navigation is different enough from the mobile navigation that using media queries would be a stretch (heh, get it?). By trimming the more complicated desktop markup from the mobile response, we save precious page weight for a faster load time.

Let's take a journey along the request-response cycle to illustrate how we send different responses to different devices while maximizing cache hits:

Flow Diagram

Being an Intern at Good Eggs

Estefania Ortiz on

My name is Estefania Ortiz and I am a rising Junior studying Computer Science at Stanford. This summer I am working as a Software Engineering Intern at Good Eggs. A typical conversation when meeting or running into other interns in the area usually goes something like this:

-Hey! What are you doing this summer?
-Interning at Good Eggs, working on the Shopping Team.
-Cool, what are you working on?
-I'm doing full stack web dev.
-Yeah, but what’s your project?
-Emm, the website...

Given that a lot of interns have an intern project, this conversation can be a little awkward sometimes. Questions like How do you get evaluated? and How do you know what to do? often come up, and to be completely honest I have been looking for answers to these questions myself during the summer.

So far this is what I've got...

Video: A Conversation on Service Design with Airbnb, Good Eggs and Lyft

Alon Salant on

Last Wednesday, Aug 6, we hosted A Conversation Service Design with Airbnb, Good Eggs and Lyft. Here's the video of that conversation for those who were unable to join us in person.


Thanks to Patrice Martin from IDEO.org for her skillful moderating and to Katie Dill from Airbnb, Robin Bigio from Good Eggs and Frank Yoo from Lyft for their great insights. Thanks also to those who shared photos and thoughts with #cultivatedesign.

What I learned

One concept in particular stood out for me. It was the idea that you can't actually design all touch points of the customer experience across a service that spans the physical and digital realms and where much of the actual service is provided by a third party. Rather, identify and nurture a set of core values across all members of your team, your customers and your service providers and allow them to manifest those values in ways that are natural to them. Through this you will find behaviors emerging out in the wild that are consistent with those core values and result in a remarkably consistent experience for all involved.

For Airbnb a core value is that the host is the hero of the guest experience. For Good Eggs it is the mission to grow and sustain local food systems worldwide. For Lyft it is a quirky style that celebrates individualism.

What did you learn?

Loud and Proud: What's Your Ideal Workplace?

Adam Perelman on

Imagine your ideal workplace. What’s it look like? More to the point, what’s it sound like?

The Good Eggs foodhub in San Francisco, where the engineering team resides, isn’t the quietest place I’ve ever worked. Every morning, there’s local farmers wheeling in crate after crate of watermelons and tomatoes and so much more. There’s the sound of our operations team working to get all that food into the right bins and later into the right cars, delivering people good, local food, grown with integrity. There’s the chatter of the daily standup meetings that spring up all around the foodhub throughout the morning as each team gears up for the day.

Is all that action distracting? Not for me! I absolutely love it. When I wake up every morning, I can’t imagine a better, more exciting place to go work. Our foodhub isn’t a shrine to silent contemplation. And it shouldn’t be. It’s a living, breathing part of the new food economy that we’re helping to build.

There are two things in particular that I love about coding in the foodhub.