We have decided not to go forward with decentralized devstack after doing further evaluation. This documentation is now out of date. See OEP-5 Decisions for more details.

Note: This is a copy of Devstack 2.0. This is meant as a historical doc and is no longer completely up to date of current design.

Devstack 2.0 Scope and Context
Devstack is the centralized set of docker images, make files, and bootstrap scripts used to set up an environment that engineers can run locally to develop edX services in a consistent manner from engineer to engineer.
The following pain points have been identified in our current development environment:


Some of the challenges listed above are due to the design of the devstack development environment itself. Others are inherent in the design of the applications. Both will need to evolve to solve for all of the most common pain points.
Outcomes:
The development environment used to enhance edX applications has the following properties:


Technical Vision:
Each codebase defines its own development environment based on its dependencies. Both the codebase under development and its dependencies have a consistent interface for start up and common interactions (like tailing the logs). This reduces the footprint, blast radius of changesets, and number of branching paths to support different environment setups.
A base schema snapshot in line with production can be downloaded and used, eliminating the need to step through migrations that have already been performed in production. Similarly, rather than every developer needing to execute a provision script, this devstack should provide some basic development seed data as well as an interface for adding custom local data consistently.
The applications can take their configuration as code to quickly put the app into a particular reproducible configuration.
How we get there:
In a distributed devstack where each repo is able to define its own development environment, the squad that owns the repo will be responsible for that development environment. There will also be shared tooling to support these development environments. Any such tooling would be owned by the SRE team. For example, jobs which create schema volume snapshots of our production databases.
This is the proposed definition of done** for an app to be devstack 2.0 compatible:




UNGOALS