In 4Geeks we always want to deliver successful products, using the right technology for each project. Since some years ago DevOps culture has been increasing exponentially and We agreed to take and start using it internally and with our clients as well. The result of this approach was very significant.
We started to deliver faster and in a better way, products like 4Geeks Payments are using different automation tools that allow us to keep our systems always up and deploy more than once per day, really incredible.
DevOps is about to reduce gaps between development and operations. Where development is all about code management and creation, which its finality is to be sent to operations, where we ensure the code is stable and running into our infrastructure.
It’s to align every department into business idea, get real outcomes. Which goes trough planning, releasing, creating and monitoring process, having an endless loop of automated process which We will cover later in this blog.
DevOps build a bridge where development and operations can work together and communicate, breaking down silos. Not everything is about write great code and test over and over again, we should focus on delivery, that’s where DevOps rocks.
A few days ago I was watching a Gitlab webinar, Victor Hernandez, Solution Architect at Gitlab mentioned a good example of why we should Deliver to the market correctly. It was 2012 and Knight Capital Group created a new functionality to replace some legacy and unused code, the old code used to use a flag to turn the feature on or off, so it was always off. The updated code reused the flag functionality (that’s where all the bad things begins).
Turns out an engineer forgot to deploy to a server, so basically when the new code was deployed to the the other servers enabling the famous flag, it also enabled old code functionality from the server not updated. This little action cost to the company more than $400 million , but also they went bankrupt, all of this in 45 minutes in hell.
There are thousand of ways to fail when deliver code and Marvin Li knows it when He wrote this interesting article about 9 things we are doing wrong when deploy. According to the author there are 9, but I will show and describe the top three for me:
- Bad Communication: This applies for every aspect of our life. We really push our teams to communicate efficiently. Every engineer makes changes, but what if we don’t notice to our team, that an script has to be run after deployment ? Maybe the script affects in some way other team member work. Communication is always the first key to success.
- No infrastructure automation: It’s normal that engineers or developers have to built servers from scratch, dealing with libraries, updates, network, and all server stuff you can imagine, this represents a difficulty to have stable products, if we have 10 servers, we can forget to have them exactly the same way, there is always different and there is aways system updates that can compromise our application. Using Google, Amazon or any other PaaS provider we can avoid those things I mentioned and focusing on deploy the code and have our infrastructure scalable without pain.
- Waiting too long to integrate: It seems like It’s not important to deploy frequently, but It’s. If we tend to do deployments every two weeks (for example) we may accumulate more code that It’s impacting our current system. At 4Geeks Payments we keep our master branch always within the latest changes and more important we deploy almost every day.
As Marvin Lin listed on his articule, there are other possible bad things we are doing to fail in our product delivery process, We may no accomplish goals due those points. My task today is to find a way to solve those gaps, bringing real value to our product.
Before I continue here are some important terms we will cover:
- Continuos Integration (CI): Developers and testers validates new code, making sure nothing old breaks.
- Continuos Delivery (CD): This is where we deploy and deliver the code. The goal here is to get faster time-to-market.
- DevSecOps: Creation of security scripts where we validate all possible gaps.
- Monitoring: Using different tools to constantly check system health.
- Microservices: Application Structure where we divide application into small pieces like, backend (API), frontend and security layer.
- Container: Those ones are like a VM where we have all system requirements in it, making it sharable and easy to deploy. Docker is one of the most known container.
As I mentioned above at 4Geeks we deploy more than once per day in our internal and client project, this is real because our DevOps culture is strong and totally automated. The ROI of releasing first can be millions of dollars in earns. As You more deliver your clients will be happier, They will have features and improvements more frequently, giving marketing the ability to announce more and more cool stuff to you platform that improves the ROI.
Communication and Collaboration
Personally I argue our teams to improve communication every day, this is an important key for every project. If everyone is on the same page the product will contain exactly what It’s required. The goal for us is to break down IT silos, where teams are self-organized and each team working in a collaborative way. We don’t want to have a nightmare story.
Hasta la vista… bugs
Your bugs reports will considerably decrease as more time you have had implemented DevOps culture. Having automation tests within a good Continuous Integration process will prevent to send new bugs to production environment. What happened with old bugs? A good DevOps culture provides monitoring tools to search and attack bugs quickly, faster response, this plus a good delivery structure can help us to attack bugs really quickly.
We can reduce costs by choosing the right platform for our project, but also If we have the best infrastructure structure we can save thousands of dollars. We can automagically add more horsepower to our application when needed, during peak season for example, but also decrease it when we are not using any extra power. All of this is possible if we have the correct setup. Infrastructure at scale.
We always want to have our teams doing things that impact our system bringing real value at the time, so all the team can focus on innovate and delivery new cool features. We can make our team smarter too, We will probably won’t need to add more people for only fixing bugs due they are unsustainable. The same team with the same people can manage 1 server or 100 the real difference resides on automated process being really productive.
Improved quality and performance of products
Since We will reduce bugs our clients won’t face too many issues in production having them happy. With some monitors tools we can check application performance and fix if necessary. Having a good server structure can make each request faster and customers will be please to use your product for sure.
“DevOps is not a goal, but a never-ending process of continual improvement”- Jez Humble
DevOps Continuous Lifecycle
We are not going to detail each step of the endless DevOps lifecycle, but it’s highly important to know the process and the importance of it. Your projects probably get bigger every day, and It’s extremely important to know which process We have to approach in our team to have the amazing product we want.
Communication on planning is key to a successful project or not. There are many communication and planning tools out there that can help us to achieve that.
Every team needs to document their progress on their code, It’s important for the record, teams must also do code reviews to check other teammates way to code, the team gets better.
After each code is done there is always an stage of continuos testing and verification of stability, where the idea is to keep our system bug free, by checking new and old code.
All code must be truly tested to be deployed into production, having all code and necessary stuff to start seeing our new approach.
Having the right structure is vital, we don’t want to waste money on a bad structure, We definitely want that our system runs with the necessary to be 100% on performance and availability. There are options our there, we can choose the best fit for us.
Finally, we should monitor our output, there is always point of improvement, If we can measure our opportunities of growth We can improve business.
Key elements for successful
All of this is about people, to put them into same umbrella, improve communication and destroy barriers. DevOps is not a position but a culture, a culture where organization gets improved and teams align with business. DevOps tries to understand people and improve collaboration through process, everyone gets visibility and a role on it. Break down silos.DevOps is a journey, where the path is to start building an automated ecosystem.
As I showed on the lifecycle image It’s highly important to have a continuous and endless process. All the team must be aware of it and make sure each step gets done.
The set of tools we may use is total apt to you, there are thousand of them out there. What is important It’s to understand our business and our product to choose the right technology and platform to deliver and automate our process. If you need help to choose the right technology for your DevOps journey do not hesitate to reach out.
DevOps culture is vital at 4Geeks and we know it’s vital for different products out there (ex: Netflix). It’s important to focus on people and how to improve communication between teams, if we achieve this, our business will go faster and the growth will be exponential.
Whenever you need some guidance to make your DevOps culture real we are happy to join with you in this amazing journey, just leaves us a message and we will get back to you for sure.