First Month At Stripe
20 Feb 2016In 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.
- Development Environment Setup
- 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.
Documentation
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
2Online Docs
2Open 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
2Badges
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 shields.io.
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
9Productivity
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
Activities
It hasn’t all been work. I’ve done some active stuff and exploring too.
Running
Luckily many Stripes seem to be pretty active, so I’ve managed to do a few runs.
Run Count
11Run Distance
82.57kmRun Time
11.1hrsClimbing
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.
Gym Sessions
13Exploring
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.
Fun Times Had
LOTSThoughts & 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:
- Is the author of a project on GitHub with 1000+ stars
- Has written multiple technology books
- Has invented a framework or tool used by other exceptional people
- Is an ultra-marathon runner
- Sold multiple internet companies before the age of 18
- Is a pilot (including someone who is currently building their own plane)
- Previously worked at a famous tech company that makes something you use every day
- Has a PhD from a top 10 university
- Speaks 5 or more languages
- Consistently writes blog posts that make it to the front page of HN
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.
Conclusion
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!