DevOps is like a dirty word in programming world.
It supposed to be a bridge between developers world and the IT Pro’s world, between creating code and building infrastructure/ deploying code and application. I think first problem here is that developers think of themselves as artists, creators in the pure beautiful way, the way they don’t ever have to deploy theirs solution anywhere.
Other problem is that making whole solution works is very tedious and time consuming task. And the last but not least problem is that the brilliant solutions are not prepared for automations.
There is a perfect developers saying: “works on my machine”.
Many developers never needed to deploy theirs application. We often work in our own sandboxes within safe environment that is delivered by our IDEs. You can create Web application in Visual Studio without local IIS, Visual Studio is delivering whole environment. And there is nothing bad in this approach – developers should work fast to deliver value for client so sandboxes are great… to certain point.
When you are mobile apps developer the situation is a little worse. The outside world is climbing to our sandboxes; for example by push notification configuration or iOS provisioning and certifications. But still we can work in project that already was configured and we don’t even know that APK is signed and IPA has some hours of provisioning configuration behind itself.
There is a point when our sandbox is too small and we want to show application to others. Or in a real life test and release application. Each and every application no matter if this is a web service, mobile application or any other kind, even packages needs to be build, tested and deployed. Of course this is not the end, because we want our application to live and thrive so we need to monitor it, react on bugs and change requests, develop new version, and repeat.
So what is devops and why I need it? It’s the part of live when our code is crawling out of coding basement.
I already told you a story why I like VSTS in java context, but I would like to concentrate on mobile application now. The truth is that mobile solution is not always independent, and all the elements will decide what tools could be used. But there are certain circumstances when only mobile app needs to be created. Why even bother in those situations to have Continuous Integration system?
Well for me the answer is “It never works on my machine”. My machine is always changing, new IDE version, new extensions, some broken configuration. My machine is special as I am, and never works properly in moment I need it most. So I don’t want to depend on it. My applications, my solutions should work anyway. And I need to be able to create new version of working application even when my development machine is hundreds mile away.
And this is the way I think of any automations – it needs to work without my knowledge, without me pushing 50 buttons in right order, and remember to check each element. It needs to help me go through the process and don’t go crazy.
I think every developer has to delete production database and try to restore it in panic to understand how important repeatable devops solution is. Personally I deleted few tables on production (with is much worse than deleting whole database) ‘when I was young’. Now I just forgetting deploy and check all elements. And even worse not always smoke tests will tell me if whole application works.
I will concentrate on mobile first application. But my example is more complex solution. Android, iOS, API, Back Office, and some other stuff. I’m trying to automate whole pipeline/process – so not only deploy but continuously integrate, with includes test and measure.
In development world there is belief that good code is self-documenting.
Let’s go further and think of CI/CD as self-documenting infrastructure and release process.
I think that this is developers task, maybe event Team Leader task; at least some experience developer. Especially in Azure PASS environment. Because developers often do stupid things, create strange configurations or use custom solutions to common problems. It is normal because everyone is trying their best to create value very quickly. But compromises have consequences and it’s developers problem to fix everything that is not so easy to automate. Creating automations is easy if all pieces fit together. Someone with ITPro background will try to fix developers mistakes with more and more configurations and this is not the right direction, in my opinion.
Devops is about helping to choose best process, best tools, it’s about helping developers go out of the box and minimizing compromises costs.