Devops is a fancy word for saying "I organize my development process". For those who don't know, programming is a complex process that many times consist of multiple systems. So the question arises, how devops can help you ship readably and scalable software ?
Pros
- Less bugs in production
- Much Less development time in the long run
- Automated deployment process
- Much Less down time
Cons
- Difficult to setup a proper environment
- Need multiple developers to work properly
- Big learning curve
Devops is not a single entity, it is an environment that you structure your workflow around to achieve better results. Some concepts you need to grasp before starting are:
- Git
- CI (Github Action)
- Reporting / Reviewing
- CD (Jenkins)
Git
Git is a well known tool developers use to interact with code sharing platforms like Gitlab or Github. The first step, is to make your code available in your team so you don't need to send them files or tell them what changes you did last time you touched the code. Everything is accessible with precision, even the smallest changes are available for you and your team to see with the exact date, time and place. You can compare, merge and publish 10 times easier. See who changed the code and what changes he made. Things like branches and pull requests help you even more on the way.
Also versioning is a huge part, as it helps you return to previous states of you project.
CI
This is the most exciting part for me and where devops really sine.
Continuous Integration. Let me give you an example
Let's say you finished a new feature on your new app. The next step is to commit the code on GitHub and pray nothing brakes for the next developer that touches the code or you haven't forgot anything like semicolons. CI when you commit your code will automatically inspect it for typos, after that it will run tests on you code to see if anything does't brake in all kind of environments (Linux, Windows, Mac etc). If it finds an error it will reject your code and inform you with what went wrong. Finally if everything passes the test it will tell others that you updated the code.
That helps in the next part. Reporting
Reporting / Reviewing
Reporting or Reviewing is a workflow where someone (human) inspects the code for logical errors that the previous process didn't catch. For example someone used a function instead of an arrow function in a JavaScript project. This not an error that will brake your code, yet it is something that makes the code less readably for future development.
A huge advantage of Reporting is "Issues" on Github. With that feature you don't have to email or message maintainers for errors you found. Everything that needs fixing is in one place sorted and marked. With a comment section for each unique issue.
CD
Continuous Deployment is the holy grail of devops. Now imagine that everything went as planned. You committed the code, it passed all the test and it passed the reviewing process. Now the last part is to deploy your changes. And many of you know that deploying a project is nothing close to easy and automated. With CD when your code is passed the reviewing process it deploys it self without doing anything. Yes, that's true you have to do 0 work, everything you've written is ready and live on the server.
The truth is that devops is something close to paradise for a developer, however until you setup everything it can take days even weeks. And let's not forget to mention the training part to teach other developers the process. Despite all the problems you might face, once you are finished you might cut the development process in half and produce top tier software.
Thanks for reading,
Sotiris