What is Pulley?
Pulley is a cap table management platform helping hyper-growth startups save money, move faster, and simplify their employee/investor equity information. Founded by serial entrepreneur and software engineer Yin Wu, Pulley values being able to push new features for their users and build their product quickly.
We sat down with software engineers Mark and Hubert. Both engineers were heavily involved in DevOps and optimizing webapp.io at Pulley.
Watch the full video testimonial below:
The Pulley team started with one Layerfile, setting up backend End-to-End (E2E) tests. They were soon eager to integrate ephemeral environments into their review workflow. Because they had already configured their environment to run E2E tests, it was relatively simple to reuse that work to create ephemeral environments.
The Pulley team learned the workflow quickly, and came up with several improvements to their initial workflow:
- Use inheritance to speed complex processes up.
- Install most things at the top of the base Layerfile (docker compose, node, yarn, etc.) so they will always be cached.
- Don’t use RUN REPEATABLE twice, it can produce unpredictable results.
- CircleCI, Golang, React, PostgreSQL, Hasura, gocraft/work, Docker Compose for local development
- Containerized: ran everything on GCP and Kubernetes
- Repository infrastructure: one big backend, one web client, and databases
- Built own in-house solution to spin up environments per pull request
- CircleCI for Continuous Integration (CI)
Having an efficient flow for merging Pull Requests (PRs) is a top priority for Pulley. Their team had built a solution in-house to create environments per-PR, which involved spinning up an instance in Google Compute Engine (GCE), running Docker Compose, and exposing that IP (which would then be commented on the PR).
Some difficulties Pulley experienced with their in-house solution:
- Finding and fixing bugs was a big time sink.
- Linking environments in PR comments led to confusion, due to the long list of PRs.
- The 10 minute wait for it to spin up was too long.
- It was costly, approximately ~$2500/month between CI servers in Google Cloud Platform (GCP) and the VMs they were spinning up for PRs.
- Use webapp.io to create ephemeral environments per-PR
- Use both CircleCI and webapp.io in parallel for CI
- Focus on core product: The Pulley team can focus on building things that matter and let the webapp.io product optimize their workflows.
- Streamlined QA/developer collaboration: Per-PR environments are organized within webapp.io so they are easy to find. Pulley’s developers can also deploy to persistent staging environments so the QA team always knows where to look.
- Time savings: Now, ephemeral environments spin up in 2-3 minutes instead of 10 minutes.
- Cost savings: With per-seat pricing of $35/month, the team knows exactly what to expect.
Why did they choose webapp.io?
From the perspective of a founding engineer:
“It’s important that we have a really efficient flow for reviewing PRs and that we’re making sure we’re not merging anything that’s going to be a blocker to master. We’d originally set up a system... but there were plenty of issues with that. Yin had pointed me to webapp.io early on and said ‘Hey, should we check this out?’ At first I was like ‘I don't know if we should spend the time to migrate right now’. Now I regret that we didn’t do it much earlier.”
- Mark E., Founding Software Engineer
From the perspective of an implementation software developer on the team:
“I started with a very, very simple Layerfile… It went pretty smoothly at that time, but then it started to be a bit complicated when I needed to figure out the flow we wanted to have on our side. What did we want to do first, what did we want to cache first, and so on. When I split the layer into multiple Layerfiles... that helped me organize the codebase, and then it went really smooth. Importing one Layerfile into another is an amazing thing.”
- Hubert K., Senior DevOps Engineer