We started the journey down the DevOps path with our clients back in 2010, and we have learned some important things along the way. We learned that success with DevOps has a lot to do with transforming team culture, process and architecture across the traditional silos of business requirements, software development, QA and technical operations.
Over the last several months I have collected some observations from our expert delivery teams (special thanks to NVISIA's Dru Henke) and created a top five tips for deploying DevOps:
1. Do Agile, and do it well
In today's software product innovation world, a key success factor is fast and frequent release cycles. The road to faster release cycles begins with Agile techniques and making the product/business owner an active, daily participant on the software development team. An important step in getting good at Agile requires the mindset Agile Business Analysts. Note that despite a business analyst's initially unclear role in Agile development practices, it's still critical that the BA establishes requirements quickly through observation of the different steps happening simultaneously, albeit at a different level of detail than previous waterfall development practices necessitated.
Once you have established a quicker tempo between the business/product owner and the development team, you need to look at the next roadblocks in your release chain - QA and Tech Ops. That's where DevOps starts to happen.
2. Break up monolithic apps using RESTful services and microservice architectures
"The microservices approach allows applications to be developed as a suite of small, more easily manageable services."
Another important aspect of applying DevOps strategies within your organization is to break up monolithic applications using RESTful services and microservice architectures. Instead of deploying applications as a single unit, the microservices approach allows applications to be developed as a suite of small, more easily manageable domain and application services.
"These services are built around business capabilities and independently deployable by fully automated deployment machinery," Martin Fowler wrote. "There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies." This gives your team a lot of flexibility to release features independently and only impacting a slice of the code base.
Where do we get started...? Get your team started by sharpening their skills and making sure they are building RESTful APIs properly. For some hands-on details complete with code and a video tutorial, please see Rav Tonsiengsom tutorial on RESTful services with Spring Boot.
3. Use container-based development
Containers are becoming the go-to technology for development projects, especially when implementing RESTful services and microservice architectures. Containers are full run-time environments that include all of an application's dependencies. Unlike virtualized servers, which contain a full operating system, containers share space with one operating system kernel. Therefore, these instances take up much fewer resources than virtualized servers. This means that development projects based on containerized platforms can boot up almost instantly.
4. Continuous integration
One of the most important aspects of DevOps deployments is the focus on being able to continually push out a stream of new releases to users in production. Each team member integrates their work frequently, Fowler wrote, which amounts to everyone integrating at least once per day – and if integration is hard to do, developers won't do it daily. So, CI and the automation it brings to build, test and deployment is really important for teams to deliver features incrementally.
The point here is that build servers are a great start, but continuous integration tools will give development teams what they need to facilitate the adoption of DevOps strategies. Continuous integration server tools like Jenkins can help keep code errors from being integrated into the software configuration management. Continuous integration is critical for DevOps deployments.
5. Build a single responsive UI for both mobile and Web
In today's mobile-focused world, it's becoming important for developers to think about mobile users in addition to standard PC users. In order to avoid having to build a different code base for each user interface platform – Android, iOS and Windows, to name only a few – and to stay away from app store roadblocks, consider building a single UI that covers both mobile and Web users.
These are only a few tips, but they should be helpful as you get started with your DevOps adoption.