Introducing Edward

Developing a set of microservices applications can be complicated. A lot of attention is paid (rightly) to the deployment process, but getting your development workflow right can be just as important in the context of enabling rapid iteration.

One problem we’ve faced at Yext is getting a working environment running on your local machine. We have over 200 microservices in production, and a number of our features require developers to run 10-20 services for a fully isolated environment. Starting all these up used to involve a lot of terminal tabs, clicking back and forth, and starting all over because the first service failed to launch.

Everyone had their own solution to this problem. Some created scripts for the services they usually worked on, some made extensive use of screen and others just never turned off their desktops.

This is why we built Edward, a command-line tool for building and launching services from the command line.

Edward provides a single interface to build and launch all the services you develop. Start up your authentication service, for example, with the command:

$ edward start auth

To stop this service:

$ edward stop auth

To save typing, gather all the services for your web store into a group and build/launch them with:

$ edward start store

More examples can be found in the documentation.

For a demonstration of the basic features of Edward, check out the below lightning talk from Gophercon 2017. In it, we go through managing your service instances, building groups, and automatically generating config for existing projects.

Other features of Edward include:

  • Automatically re-build services when the source changes
  • “Warm up” services after they start
  • Get notifications when new versions of Edward are available

We’ve been using Edward at Yext for over a year now, and it’s become part of most of our developers’ workflow. Here’s what some of them had to say about it:

“Edward is the tool I’ve always wanted, but never had the time or expertise to write. Perfect for when I want to grab some tea while rebuilding all my services.”

– Adrian Mullings

“It does what I need and gets out of the way.”

– Chris Thomas

That, in a nutshell, is Edward. If you think it would be useful for your workflow, please give it a try! If you use Go you can install by running:

$ go install

Or you can download binaries direct from the Github Repo.

Found a bug, or got an idea for how Edward can be improved? We’re always excited to receive new Issues and Pull Requests!