Back to Venmo.Com

DryDock. An open-source internal installer for iOS

· by Chris Maddern

What is DryDock?

DryDock is an open-source internal installer for iOS that enables rapid-deployment of experimental builds to the team and allows (permitted) users to install internal product releases on demand while remaining on a supported internal update track! Huzzah.

You can check it out on GitHub here

Why?

At Venmo, we try to experiment as broadly and continually as we can. As we've gotten better (and faster) at this, we've also had to get better at getting builds in to teammates, users and stakeholders' hands quickly & efficiently.

On average, we're typically working on 4-5 new features at any given time and engineers & stakeholders don't want to wait for the next internal 'release' to get a functional prototype in their hands. (This could be for user testing or just general 'touch-testing'.)

Old Solution

Plug their device in to Xcode and build to it. Simple, but it has a few downsides:

Any device you directly build to is then on an 'unsupported' build without updates. Team members would come to us with issues because they were still stuck on an Xcode-built version of 4.4.0a2 (or something similar) which had a half-baked version of Nearby, for example.

We then have to manage 'UDIDs' in the developer portal as builds aren't release signed.

New Solution


DryDock

An internal installer to rapidly share builds with the team on, be able to easily re-install them if anything goes wrong and where we can get people back on to supported builds. As we built the first version of DryDock, we also realized that this could solve a problem for our support team; being able to install any past version of the app to reproduce issues.

Build Versioning

DryDock works with VENVersionTracker to make sure that users don't get crossed-over between individual experimental builds, but that they get upgraded to later versions of the main internal releases. We do this with a build versioning system..

Assuming a two week sprint which targets a minor-version release, builds will be versioned as follows:

Week 1 Development & Experimental builds: 4.x.0ax
Week 1 Internal releases : 4.x.0a(1-9)

i.e. any internal development and 'experimental builds' of Venmo are bucketed to the 4.x.0ax version, meaning they're isolated from releases on Crashlytics & tracking tools. Meanwhile, any release that's broadly distributed has clear usage & crash reporting.

Week 2 Development & Experimental builds: 4.x.0bx
Week 2 Internal releases : 4.x.0b(1-9)

--- Cut release branch here ---

End of Week 2: 4.x.0rc(1-9) // Bugfixes only at this point

VENVersionTracker will upgrade any 4.x.0ax build to 4.x.0bx or 4.x.0b(1-9) when it becomes available, so we effectively stop orphaned builds from development branches. This gives experimental one-offs a life-span of 'until the next internal release', which is fine.. they should be in that release if they're intended to be long-lived experiments.

We've been using DryDock for a few weeks internally now & love it so we thought we'd open source it so that anybody can easily create an internal installer app.

Built on Parse

DryDock is our first internal tool supported by the Parse backend.

Why Parse? It was the simplest way to get the backend up and running and was an easy way to ensure that whatever we made would easily be able to be used by others. The simplicity of building on Parse is impressive & their client SDK is intuitive to use. They also have SDKs / libraries for a broad array of languages & platforms, so extending this to work on Android or to be updated from a build tool to push from CI would not be too difficult.

Try it out & feel free to extend it

We're sharing this pretty early & have lots of improvements that we want to make; things ranging from automatic updates from build scripts to test-status for each app on a details screen, not to mention access controls to have different groups of users.

If you think of something that you'd like it to do for your team, feel free to fork & extend DryDock and if it's something that seems useful generally we'll merge it and everybody can benefit!

Let us know what you think!

Permalink

Introducing Nearby Payments

· by Chris Maddern

Introducing Nearby Payments

We're really excited to launch nearby payments for Venmo today. Nearby payments let you do exactly what it sounds like -- pay other Venmo users who are close to you.

Read More →

Super Bowl XLVIII on Venmo

· by Elan Arbitsman

Super Bowl XLVIII on Venmo

An average of 111.5 million viewers watched the Seattle Seahawks decimate the Denver Broncos in the Super Bowl, making it the most watched show in U.S. television history. Sunday was huge on Venmo as well, with our users' public payments during the game overwhelmingly related to the Super Bowl, its halftime show, and everything else people do around the big game.  Check out this word cloud of the most frequently used words in public Venmo payments during the game.

Read More →

Our approach to mobile engineering

· by Chris Maddern

Our approach to mobile engineering

At Venmo, we're in it for the long game. That means that we need a maintainable codebase which is easily extendable and flexible to ever-changing company goals. While our product is social, we're also a finance app and so we have to take a very serious approach to software quality and security. Users feel safe using Venmo because they trust us -- part of this trust is creating a stable & enjoyable experience.

Read More →

GiveDirectly on Venmo

· by Andrew Kortina

GiveDirectly on Venmo

Our mission at Venmo is to connect the world and empower people through payments.  We love to see users connect when they add personal notes to each payment and share with friends, and in 2014 we hope to better serve the empowerment part of our mission.

Read More →