One of the simpler DevOps practices is version controlling as much as possible, which means that you will be covering version infrastructure, development bundles, and databases. This helps provide a single source of truth or one holistic unit. This practice goes hand in hand with configuration management using Puppet and Chef; it even allows you to do build automation using Maven. Maven fetches dependencies such as JARs from remote repositories. These remote repositories should be maintained carefully with different versions (different applications within the organization would use different versions). This helps us come closer to the vision of a single source of truth. Using version controlling and Puppet and Chef setup scripts is another way functionality can be added incrementally and universally (throughout the organization).
Additionally, the use of repository manages like Sonatype Nexus is a great way to manage internally generated libraries and services that can be shared between development teams. Not only does doing so provide version control for different release candidates, but it also integrates wonderfully with Maven.
Remember to start with something small, like a Puppet script, in order to ensure all packages are installed. Create a development tools bundle and distribute it within your organization. The closer environments match and the faster they can be replicated is a significant productivity gain. After becoming familiar with the practice, you can automate production configuration. You can use the simple practices I mentioned throughout this article to start streamlining the build process and centrally managing configuration across different production and development environments.