First Month At Stripe


In case you don’t know, I’ve been participating in the Stripe Open-Source Retreat for about a month now. This post is a small brain dump of what I’ve been up to in addition to my usual participation in the OpenMRS commmunity.

As the Stripe website says, when I started the Open-Source Retreat, I thought I had a good idea of what needed to be done. I wanted to build a JavaScript library that would be accepted by the OpenMRS community as the go-to tool for building applications using the OpenMRS API.

Reality Check

When I took a step back and decided what I really wanted to achieve during the retreat, I settled on the following goal.

Improve the development experience for developers working to build applications on top of the OpenMRS platform.

It was evident that at least two things needed to be addressed before I could even start thinking about the technical details of building a JavaScript library.

  1. Development Environment Setup
  2. Documentation

It seemed to make sense to put some work into addressing these two issues first.

Development Environment

There have been a few new developers joining eSaude (our Mozambican implementer community) recently, so I started there. I wanted to make it as easy as possible for them to get set up with the custom eSaude OpenMRS distribution and Point of Care application.

I created the following two sets of Docker containers (using docker-compose) to achieve this.

Once I’d completed the implementation-specific Docker container compositions, I did the same for the OpenMRS core platform and Reference Application.

Docker Compositions


OpenMRS had a GSoC student, Zakaria Amine, work on the initial revision of our Swagger documentation generation, but it has not actually been officially released yet. The current mechanism is that the docs are generated dynamically inside the OpenMRS application via a link on the admin page. I wanted the docs available to anyone - even if they aren’t running a copy of OpenMRS locally, so I made a script to build a static site from the Swagger specification.

GitHub is now hosting static versions of the Platform and Reference Application API docs built using the first version of the Swagger specification.

When I took a more detailed look at our Swagger specification, I realised that there were a number of issues, so I created tickets for these and have been working on making sure the Swagger spec we generate is complete, accurate and conforms to the OpenAPI Specification.

I’ve opened (and then subsequently closed without merging) a few PRs for this, but since the scope of the changes has grown, the strategy now is to submit a bunch of improvements in a single PR which will happen in the next few days.

Generating a good Swagger spec is probably the most important thing I’ve been working on, since if this is done correctly it will be possible to (dynamically) auto-generate the basic CRUD functionality of the JavaScript library I want to build using swagger-js. It will also be possible to generate API clients in many other languages using swagger-codegen.

Docs Repos


Online Docs


Open Web Apps

OpenMRS recently landed support for Open Web Apps (OWAs), again thanks to the great work done by a GSoC student. OWAs are a really easy way for developers to build front-end apps and upload them to OpenMRS. I wanted to make getting up and running for OWA developers even easier, so I created a Yeoman generator to scaffold OWAs for OpenMRS (including a basic build and deploy pipeline).

In addition I created some development workflow documentation and a screencast that demonstrates the workflow.

Some issues came up while building the generator, so I submitted some PRs to the OpenMRS OWA Module too. Thanks to @sunbiz for reviewing and landing the PRs!

OWA Repos



I got this idea into my head that OpenMRS should have badges for its repos that show the current build status as well as latest module and required OpenMRS version if relevant. So, I spent a few hours and built a tool that generates OpenMRS badges using

Now we have badges for build status like: . We can also get the latest version of a module () or the required version of OpenMRS for a module ().

This work definitely wasn’t on the critical path for anything, but we’re using the shields in the dev category on Talk now, so it’s quick to spot if any important repos are failing to build.

Total Repos Updated



A while ago I started using RescueTime to track my productivity. It’s tool that continually runs in the background and monitors what applications you’re using and what websites you visit. You categorize various activities as productive or distracting and it generates a nice dashboard for you.

I grabbed the data for my first month here at Stripe and plotted the following graph.

Time is logged as Very Productive if I am doing things like actively typing into my IDE or the terminal, using email, or if I’m on GitHub or testing an application in the browser. Very Distracting time is logged when I’m chatting in IM or watching a movie or similar.

Total Productive

Total Time


It hasn’t all been work. I’ve done some active stuff and exploring too.


Luckily many Stripes seem to be pretty active, so I’ve managed to do a few runs.

Night run up Bernal with @nikgraf and a couple of Stripes #city #night #sanfrancisco

A photo posted by Pascal Brandt (@psbrandt) on

Going back down … such a beautiful place these woods.

A photo posted by Nik Graf (@nikgraf) on

With the Stripe Running Group @ the Mt. Tam East Peak during our 17km trail run ⛰👌

A photo posted by Nik Graf (@nikgraf) on

Run Count


Run Distance


Run Time



My friend and fellow Open-Source Retreat grantee @nikgraf also climbs, so we’ve been trying to do one or two sessions a week at our local climbing gym, Mission Cliffs.

With the gym just around the corner & a motivated buddy (@psbrandt) I'm back to climbing for the next couple months ⛰👌

A photo posted by Nik Graf (@nikgraf) on

Gym Sessions



I was fortunate enough to have my wife Jodi come and visit for a few days from the 13th of February, so we did a bunch of touristy things.

Reunited in San Francisco 😍

A photo posted by Jodi Allemeier (@urbanjodi) on

A photo posted by Jodi Allemeier (@urbanjodi) on

Haight Ashbury

A photo posted by Jodi Allemeier (@urbanjodi) on

#lookup #goldengatebridge

A photo posted by Jodi Allemeier (@urbanjodi) on

China town SF

A photo posted by Jodi Allemeier (@urbanjodi) on

#sanfrancisco #latergram

A photo posted by Jodi Allemeier (@urbanjodi) on

Fun Times Had


Thoughts & Feelings

“Real men don’t cry… for more than three days”
- Charles Boyle, Brooklyn Nine-Nine

Surrounded By Geniuses

During my time here at Stripe, I’ve been experiencing a feeling that people have tried to make me believe is imposter syndrome. The people that work here, and the other Open-Source Retreat grantees, are overwhelmingly exceptional. I can barely look around the office without seeing someone who:

I could go on, but I won’t. Also, most people here are in their 20s. It’s been really great to meet these people and observe them doing amazing things, but it’s sometimes been daunting and a challenge to see my value in this context.

On the plus side, people here are very interesting in diverse ways, and are generally well traveled. This has resulted in many great conversations and I even got to meet a long time geek hero of mine, @b0rk!

The Cost Of Benefits

Working at Stripe is great. Stripe offers a lot of benefits and three fantastic meals a day at the office. No really, the food is incredible.

As a result, people spend a lot of time at the office doing amazing things and socializing with colleagues. Possibly more time than they otherwise would.

Next Steps

I need to introduce OpenMRS to the people at Stripe and harvest some time from the geniuses and polymaths to help improve OpenMRS. This needs to happen sooner rather than later, so that I’m still around to show people the ways in which they can contribute.

The Swagger specification improvement task is my main technical task at the moment, since it’s the first step towards creating both useful API documentation and a useful JavaScript library.


Although I may not have made a lot of progress yet on what I originally thought I was going to do, I think I’ve definitely taken some steps in the right direction.

Thanks to Stripe for hosting me so far!

comments powered by Disqus