Productivity Tip: Github Integration with Your Editor

Here at Instacart, we care a lot about developer happiness and productivity. We share tips with each other and will start posting them here. You can follow along with this link.

When using a Github feature, it’s often related to something you’re working on locally. For example, creating a pull request for our current branch, or linking to a line of code you’re currently editing. This can mean a significant amount of context switching if it’s done frequently.

To smooth this process, it can be helpful to set up integration between Github and your local environment. Below are some suggested tools based on your editor that can help.

Sublime

Check out the Sublime Github package.

Sublime Github package

Vim

fugitive.vim is a popular package, and you can use the :Gbrowse command to open a file in Github.

Atom

Check out the Open on Github package.

Atom Open on Github package

IntelliJ and RubyMine

These IDEs ship with Github integration. It can be helpful to set up shortcut key bindings for frequently used Github features.

RubyMine Github integration

Happy hacking!

Productivity Tip: Aliases

Here at Instacart, we care a lot about developer happiness and productivity. We share tips with each other and will start posting them here. You can follow along with this link.

Aliases

From time to time, it’s nice to check you have aliases set up for commands you run the most. Huffshell makes it easy to do a quick check.

gem install huffshell
alias > ~/.aliases.cache
huffshell

Your fingers will thank you.

Our First Engineering Intern

Today, we’re catching up with Dave Schwantes, senior software engineer, and Andrea Coravos, Instacart’s first software engineering intern, to learn more about what it’s like to work at Instacart.

How did Instacart’s engineering internship program get started?

Dave: About a year ago we started designing Instacart’s first engineering internship program but it got shelved in order to focus on other company goals. Then back in April my teammate Erik suggested to our VP that we should have an internship program. He made a pretty convincing case and soon we were working together with other members of the Engineering and Recruiting teams to bring on our first interns.

Read More

Offline First: Introducing TrueTime for Swift and Android

and

TrueTime, an NTP library for Swift and Android.

A common complaint we’ve heard from our shoppers is that when they’re deep in the aisles of a grocery store, the app is frequently held hostage to spotty network connectivity.

We try to empower our shoppers with the app and give them all the tools they need to fulfill their order quickly. Spotty network connectivity is a big problem.

In this series of blog posts, we’d like to share with you some of our ideas and learnings from moving primary parts of our shopper app offline — making the apps for our shoppers first-class partners to our APIs. Here’s what we have in store:

Read More

Using Stripe Connect To Directly Pay Retailers

We at Instacart really like it when customers can give us money in exchange for their favorite groceries and because mailing us envelopes of cash would make it hard to support deliveries in as fast as 1 hour we make heavy use of Stripe. One of the coolest Stripe features we utilize is Connect. Stripe Connect allows us to function like a marketplace in certain situations, accepting payments from customers and then directly transferring some or all of that payment to a bank account owned by one of the retailers we partner with.

Because our payment model can be complex, particularly for marketplace type transactions, we’ve really pushed the limits of Stripe Connect and learned a lot about what it is capable of. In this post, I’ll walk you through how we make the most of this powerful tool.

Read More

Animating programmatically with Redux and React

Our recent move to React has been really beneficial, but we still have a massive Backbone app holding the ship together. While Backbone has served us well in the past, its mutable models and reliance on direct DOM manipulation for view rendering does not mesh well with React’s ideals. It’s time for that ship to sail.

Redux has gained a lot of attention and praise lately, and for good reason. It’s incredibly simple and fast. It also leads to more understandable and performant web applications. However, shifting a codebase of our size over to a new state/data manager is risky and time consuming. When we started using React, the transition went smoothly because we were able to continue using our older tools alongside React. We needed a way to do the same thing with Redux.

Read More

OhMyCron — Locking, Logging and Environment setup for cron

Crons are easy to write but run in a confusing way.

Typically the shell is not your shell, the path is not your path, and the environment is not your environment. Cron runs your tasks and they fail and nothing is logged; instead it tries to send email and fails because you didn’t specify an email; and if you had it would still fail because you didn’t set up a mailer.

It seems like a lot to worry about, just to run a command in the background.

OhMyCron makes cron convenient again by adding an intuitive and conventional approach to logging and environment loading:

  • STDOUT is logged at user.info in Syslog and STDERR is logged at user.notice.
  • Crons are locked (you can set the lock name) with BSD locks, to prevent them from piling up if they run longer than expected.
  • /usr/local/bin is added to the PATH.
  • ohmycron runs jobs with Bash and loads the user’s profile before running the job.

Today, we are delighted to open source OhMyCron.

Read More

Instacart Spotlight – East Coast Operations

The East Coast Operations team came together for a “sister city retreat”. The gathering brought together teams from Philadelphia, DC, Boston, and the hosting city, New York. Team bonding ensues along with fun brainstorming and shared knowledge sessions. Here the team brings together all the strategies they employ against all of the unique challenges they face in each city.

Read More

Instacart Spotlight: Data & Analytics

The Data & Analytics team at Instacart was formed one short year ago. Since then the team has been a part of balancing supply and demand in the marketplace, improving our consumer experience, identifying and removing frictions in our shopper experience, and building a data infrastructure to enable analysis. We met up with the team to learn more about what they do.

Instacart has so much data to work with and you joined when we were about 150 employees, so you’ve seen a lot of change and growth.

Read More