Dev Ops teams face many of the same pitfalls. Many of which can be solved very simply with process automation.
Stakeholders, partners, and teammates need to know how a project is going and what blockers exist. Especially if there is going to be an impact to the overall project schedule or even the schedule of a teammate. Status reports and meetings can suck up a lot of producer’s time as well as stakeholders. Why not let the bots do this for you?
Record requirements, issues, and feature requests in your issue tracker. Jira, Salesforce, Trello, Asana or countless other tools are great for this. When you update your status on a task or issue the tool provides real-time updates to stakeholders and team members. This can save everyone a lot of time answering the question of, “What is the status of…?”
How often do you hear this?
“It looks like our last release broke that other feature…”
This is because something in a new feature changed a dependency of a feature that may have been tested and released months, or even years, prior. Sure you went through regression testing, but you didn’t test every feature or every use case.
Why not identify the use cases when you define the requirements then automate the regression tests in your continuous integration tool long before you deploy the new feature? Our practice in the industry has become lazy. I have experienced many of environments which have highly complex and extensible tools which they only use for deployment. Don’t make the mistake of using Jenkins for deployment only. Define your tests and make sure they all pass before promoting a feature to production.
Apps should never fail when deploying to production or even to an integration environment. Period.
“It worked on my machine.”
This problem occurs when the environment you are testing or developing on doesn’t look anything like “the real world” (your production environment). When hundreds, or even thousands, of hours are spent on developing an application, or even just a feature, they must work when deploying to your production environment.
There are two obvious solutions to this problem: 1) Deploy more frequently 2) Develop in an environment that looks, acts and feels like your production environment. In this day and age hardware is cheap. Building an application for Docker, Kubernetes, or another cloud platform building out a dev and integration environment that is logically identical to your production is not only easy but very inexpensive in comparison to the cost of countless hours spent debugging code that “worked on my machine.”
With Git, Stash, Subversion, or the like, it is easy to commit more frequently and let your automated deployment or continuous integration system do what it does best. Jenkins and CircleC are awesome tools that every mature DevOps environment use. These tools can be configured to require little to no developer effort to initiate a build as they can be triggered from a commit.
In short automate everything.