---
description: >-
  The development project is what we open in our editor/IDE and where we work
  with our entire codebase.
---

# Development project

The development project is where we specify all the components, bases and libraries that we want to work with:

<div align="left"><img src="https://3095132514-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAhrWK1psIWk5h5zNLV%2F-MLvr0aBnP0LO8jSq-lj%2F-MM-Ro-4oXj9cBv5zswX%2Fdevelopment.png?alt=media&#x26;token=903d437b-781c-4aff-83c7-5a2767e13e4c" alt="This development project has two libraries (grey), two components (green) and two bases (blue)."></div>

The development project gives us a delightful development experience that allows us to work with all our code from one place in a single [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) (if the language of choice has support for it).

The idea is to give us the fastest feedback loop possible and to keep things simple. We also separate development from production which allows us to optimize development for _productivity_ while production can be optimized for _non-functional requirements_, like performance or scalability.

This gives an enormous flexibility and allows us to make decisions in production that don't affect development, and to postpone decision on how to execute the code in production.&#x20;

One of the main mistakes in the software industry today is that it conflates development with production in a way that if we add a service in production it will automatically "turn up" in development as one more project, because we use the production projects to work with our code.

This makes things more complex than they have to be and accelerates the explosion of complexity. In Polylith we avoid this problem by isolating development and production from each other.
