
Some people are conservative by nature, it always hinders the adoption of something new. It is still unusual for me to use Google Docs instead of Word, although when it comes to working together, the advantages of the first are indisputable. Many companies (sometimes even very large ones), while developing software, ignore the available ways to increase the productivity of programmers. For example, continuous integration (Continuous Integration / CI), which simplifies the process of developing and controlling a project. Ready solutions exist in the market for a long time. Unfortunately, still someone continues to mock employees, losing time and money. This post is a desire to share the experience of successful implementation of continuous integration, and, perhaps, an attempt to reach some managers. After all, it is often their short-sightedness that impedes production optimization.
Problem

Any project begins with the receipt of technical specifications. This is followed by requirements analysis, programming, and testing. Everything ends with the release of the product. Following this "classic" scheme, programmers at the testing and release stages have to build the project. Usually this process is done “manually” and can take from several minutes to several hours. It happens that you need to make several versions (configurations) of the same assembly. For example, if an error is detected at the testing stage, then the whole cycle has to be repeated again and again. The number of routine operations increases exponentially with the complexity and scope of the project. Programmers are a very valuable resource to waste their power. How much time do you think they lose per week, month, year?
There is a practice of software development Continuous Integration. It allows you to automate the implementation of project assemblies for the early identification and resolution of integration problems. The point is that with a given frequency, the code stored in the repository is automatically assembled. Assemblies can occur in different configurations. This allows you to solve a number of problems: identify errors at an early stage (assembly will show an error) and free up
time - the most valuable resource of the programmer.
')
At the moment, one of the most popular products solving these tasks is
TeamCity from JetBrains. You get twenty configurations
for free , plus three agents to build a project. It is very convenient for small teams and small companies. A continuous integration server combined with automated version control systems (Version Control System / VCS) such as
Git will make your life much easier.
Git and version control

Version Control System (VCS) - software to facilitate the work with changing information. The software registers changes in one or several files in order to be able to return to certain previous versions of these files. Programmable code is available in a single repository.
Git is a distributed version control system. Unlike centralized and local systems, Git does not just unload the latest versions of files, but also completely copy the repository locally. In the case when the main server, through which the work goes, “dies”, any client repository can be copied back to the server to restore the database.
Thanks to hashing, Git easily tracks changes in project code. A situation where someone has quietly made changes to the code is impossible. Such control allows you to return to the desired version of the assembly at any time. As a result, every time you know for sure from which source your project is being collected - any moment of chance is excluded.
Git was created by Linus Torvalds. Later, the much-loved GitHub network project, which provides Git hosting for projects and collaborative development tools, appeared much-loved by many (including us).
Something about testing
No software development is complete without testing. To facilitate the distribution of test versions, we use
Test Flight . Server features allow you to: monitor statistics, create polls, track logs, collect crash reports, automatically notify you of a new version of applications. Significantly simplifying the registration of testers and their search. Previously, it was available only to developers for iOS, but just
recently got hold of support for Android (at the beta testing stage).

Joel Spolsky came up with the famous test of twelve questions. A kind of guideline for organizations as a whole, and for the programmer who is going to get a job. The integration of such products into the development process allows us to cover some of the important ones:
- Do you use a version control system?
- Can you assemble the product in one step?
- Do you perform daily builds?
If the answer is yes, then you can be congratulated!
Do you know the beautiful word synergy? For some reason, many managers ignore the needs of their employees. Perhaps, one of them will want to find out what the superadditive effect is. We have long made our choice, and what is yours?