A development environment is a pre-production environment used for developers to collaborate on a development project. The environment may emulate the production environment but often uses a simpler deployment model than production as scale does not tend to be an issue given the number of transactions that a development environment will process.
A development environment may be as simple as a single server with embedded services such as ActiveMQ, database and Solr. Alternatively any or all of these services could be configured as standalone applications.
Given that development environments are often dealing with experimental changes they are often rebuilt so it recommended to consider creating a VM or Docker image of the environment so that it an be restored as quickly and easily as possible.
A staging environment differentiates itself by emulating a production environment. In a staging environment you will move your project from the development server to a staging server that is configured with a network and data model as close to the production environment as possible. Staging environments are usually used to sanity check changes to a project using a copy of production data. Once the project has passed a quality assurance check then it can be moved to the production environment.