As a developer, I understand the frustration of spending valuable time onboarding to a new project or company. Setting up the necessary environment and tools can be time-consuming and inefficient, hindering productivity and slowing development velocity.
During my talk at Infobip Shift 2023 in Miami, I discussed the onboarding challenges and how companies like Stripe and Uber address them with Standardized Development Environments (SDEs). In this article, we will explore the key insights from the talk and delve into how SDEs are transforming the onboarding process and the overall development pipeline. No time to read; you can watch the video recording of the talk at the bottom of this article.
Discover the power of SDEs in boosting developer velocity and creating a more efficient and enjoyable onboarding experience for all.
The Current Onboarding Reality
Traditionally, dev onboarding involves checking out a branch or cloning a repository, setting up the required environment by downloading tools and dependencies, and waiting for builds and tests to complete.
This tedious process can take hours or even days, especially for new hires or when working on multiple projects with different configurations. The inefficiencies of this approach not only impact individual developers but also hinder overall team productivity.
Uber's DevPods: Coding at the Speed of Light
Uber faced a significant challenge maintaining their complex service architecture spread across thousands of repositories and programming languages. They realized developers needed a faster way to start coding and introduced DevPods, an internal development tool. DevPods allows developers to provision a default instance with all the necessary artifacts, cloned source code, and pre-loaded IDE cache. With just a click, developers can start coding instantly, eliminating the frustrating waiting time associated with environment setup.
Uber's DevPods are container-based and leverage Kubernetes as the underlying orchestration platform. Using the production image as the base for DevPods, they achieve a unified runtime from development to production. Additionally, Uber offers different "flavors" of DevPods tailored to specific development needs, such as Go, ML, or web development. This approach ensures that every developer, regardless of experience or project requirements, can start coding with minimal setup time.
Stripe's DevBoxes: Empowering Collaboration and Previewing
Stripe initially struggled with their complex service mesh, making it challenging for developers to test their code locally. They implemented their internal solution, which they have named DevBox, which were long-lived EC2 instances pre-configured with the entire service mesh. Developers could SSH into these instances and test their code on beefy machines. While this approach worked for a small team, Stripe realized the need for a more scalable solution.
Stripe's DevBoxes evolved into Preview DevBoxes, providing instant previews of running code. This feature significantly improved collaboration and streamlined the review process. Developers could now jump into a DevBox without disrupting their current workflow, review code changes instantly, and seamlessly return to their tasks. Preview DevBoxes also allowed non-technical team members, such as project managers or designers, to preview changes early in the development process, providing valuable feedback without the need to push code to staging environments.
The Power of Standardized Development Environments (SDEs)
Both Uber and Stripe understood the importance of standardized development environments (SDEs) in optimizing the entire DevOps lifecycle. SDEs ensure a seamless experience from coding to testing, deploying, and releasing. By eliminating configuration drift and local versus production bugs, SDEs boost developer velocity and eliminate onboarding headaches.
SDEs can be implemented using various tools and approaches. Uber chose Docker as the base for their SDE flavors, while Stripe incorporated opinionated environments with pre-configured service meshes. What makes SDEs truly powerful is the ability to include in-repo configurations, where the environment setup is part of the source code. This means that developers can check out any commit in the project's history and have an environment ready to code, regardless of the specific requirements or legacy configurations.
Dev Containers: The Future of SDEs
One of the most promising standards for SDEs is Dev Containers from Microsoft. Dev Containers allow developers to define runtime, database, and service requirements directly in the repository. Additionally, Dev Containers support IDE specifications, ensuring that developers have the necessary extensions and configurations for efficient coding. This approach eliminates the need for developers to search for configuration files or extension recommendations, making onboarding smoother and more consistent across the team.
SDEs are already available through SaaS platforms like GitHub Codespaces and Gitpod, enabling developers to spin up environments in the cloud with configurations tied to the source code. However, self-hosted solutions like Daytona provide the flexibility to run SDEs within a company's infrastructure, maintaining data security and control.
Bridging the Gap Between Local and Production Environments
One of the significant advantages of SDEs is the ability to bridge the gap between local and production environments. By using the same runtime and configurations throughout the DevOps lifecycle, developers gain confidence that their code will work in production as it did during development. This alignment improves code quality and reduces the time wasted debugging environment-specific issues.
Conclusion: Boosting Developer Velocity Through Streamlined Onboarding
Onboarding developers doesn't have to be a time-consuming and frustrating process. By taking inspiration from Uber and Stripe, companies can simplify and streamline the onboarding experience, leading to increased developer velocity and improved collaboration.
The key takeaways from Uber and Stripe's approaches include:
Introducing DevPods or DevBoxes to provide developers with pre-configured environments and minimize setup time.
Leveraging standardized development environments (SDEs) to ensure consistency across the DevOps lifecycle.
Implementing in-repo configurations and Dev Containers to simplify onboarding and maintain consistency across the team.
Bridging the gap between local and production environments to eliminate environment-specific bugs.
By embracing the practices inspired by Uber and Stripe, companies can significantly improve their onboarding process and boost developer velocity. However, many companies, especially those with limited engineering resources or non-tech backgrounds, may struggle to implement these solutions on their own. That's where Daytona comes in.
Daytona offers an off-the-shelf solution that saves companies the time, effort, and expertise required to build their own streamlined onboarding platform. With Daytona, companies can leverage the power of standardized development environments, seamless collaboration, and bridging the gap between local and production environments. Our comprehensive Dev Environment Orchestration & Management platform automates and standardizes workflows, enabling effective collaboration, secure communication, and efficient delivery of high-quality code.