Vadym Fedorov is a Solutions Architect at SoftServe Inc., a leading global software application development and consulting company, and has 12 years experience in enterprise application development, as well as 2 years’ experience in Cloud and operations optimization.
Application development requires heavy capital investment, and market demand exert pressure on time-to-market. However, there are typical project areas which increase project cost and slow down time-to-market metrics:
- Knowledge transfer between teams after launching a new development team;
- Knowledge transfer from development team to operational team;
- Movement application and configuration changes between development and production environments.
In most cases, a team uses documentation as the main carrier of the project knowledge in form of certain deployment manuals and development environment configuration guides. However, this approach poses the following drawbacks:
- It’s difficult to keep documentation up-to-date all the time;
- Verification of the documentation requires significant efforts;
- Long documents are usually difficult to read and understand.
These drawbacks may cause a range of issues at different project phases:
- Lack of the deployment and development environment configuration documentation;
- Invalid or outdated information in the documents;
- Missed references to the third-party components or missed information about dependencies between versions of the components;
- Development environment does not match target production environment.
Top DevOps Practices Enhancing Productivity
A proper usage of the DevOps approach as an essential part of the development process improves the development and operation teams’ productivity. The three key practices applied to improve the development process are Virtualization, Native Package Manager, and Configuration as a Code.
Virtualised environment can help team set up a development workstation environment aligned with the production environment. This may prevent issues caused by differences between development and production environments in the process of deployment.
Native Package Manager for Dependency Management
A package management system is a collection of tools that ensures consistent installing, upgrading and removing of your system software. Different operation systems and programming languages have their own implementation process of the package management systems, for example:
1. OS-level package management:
- Windows uses Windows installer (MSI), a native method to install and remove applications;
- On Linux OS is widely distributing RPM Package Manager.
2. Application-level package managers:
- NuGet for .NET Framework;
- NPM for Node.js;
- Maven, which is not only a package manager, but also a build tool for Java.
This practice allows tracking a list of the application dependencies on both application (libraries, frameworks, etc.) and operation system levels (servers, libraries, etc.), making automation of the application deployment to the target environment an easy process.
Configuration as a Code
Since most of the issues on the deployment stage are caused by misconfiguration, Configuration as a Code is the key DevOps practice that minimizes human factor in application deployment and in generally improves software quality.
The DevOps practices as an integral part of the software development process improves software quality, reduces time required for knowledge transfer between teams, and as a result – reduces time to market and project cost. Make sure you clearly define the maturity level of your project (for example, by means of the Project Maturity Model, as described in my most recent post) in terms of development and operational teams’ productivity to keep track on your software development process and achieve desirable results.