📜 ⬆️ ⬇️

Veeam's internal kitchen: how the R & D process works

Evening. The next R & D interview is coming to an end, and our interviewers are tuned to unexpected questions from a future colleague. But no surprises: the ratio derived by Wilfredo Pareto works here. In 80% of cases, we hear four questions - about 20% of the total number received. How is your process? What will I do? How to become a senior / timlid for a year? What about relocation to Europe?

In this post we will answer the first question and tell you about the development process in Veeam - from team to team this answer changes the least.



So the process. This is a repeatable sequence of actions leading to the achievement of success day after day, or at least sometimes. You have learned how to cook borscht and every time it turns out equally tasty - a process. Parking is not a knock - mastered the process. The process allows the brain not to think about the routine every time, turning it into mechanical work. The brain is released for creativity.
')
The development process is a sequence of actions that turn users' desires into tangible products. These desires are formulated by analysts and product managers, realized by developers, critically evaluated by testers, described by recorders.

We in Veeam make mass products for backup and replication of data centers - so that nothing is lost. Classic boxed product without a specific customer. At first glance, the thing is simple, but there are nuances, so we are already doing the second decade.

Characters


Each release is the result of the work of several groups:



Some teams prefer open space, but more often - rooms

Commands are linked through a requirements accounting system. We implemented it on the basis of the Microsoft Team Foundation System, since historically we used it as a source version storage system. The system stores requirements (requirements), defects (bugs) and contacting support (issues) that require the participation of QA and developers. Each issue involves hundreds of participants who work on thousands of tasks, requirements and defects. The system helps to keep all this and, more importantly, to evenly distribute the load, to prioritize developers.

Growth rings: development cycles


The development of our product is cyclical, each cycle ends with the release of the next version - release. Here is what is reflected in the releases:


Every quarter we have updates (updates), about once a year - major (major) releases. They are good in that they minimize the overhead of creating bulk functionality associated with supporting new platforms and changing paradigms. Based on the characteristics of budgeting, the IT departments of customers are most active at the end of the year, so we also roll out large releases at this time.

Quarterly updates mainly have two goals - support for new versions of protected servers and the elimination of defects. In the updates we collect all the corrections of defects found in clients since the release of the major version. Also, with the help of updates, we promptly respond to changes in supported platforms. Under the terms of the SLA, Veeam must add support for the new version of the hypervisor in no more than three months .
And what if the product does not work for a specific customer? In this case, we issue a private fix - in other words, a crutch. Such fixes are released every week and are not always associated with defects in the product. For example, customer security settings may not be compatible with the product. By issuing a private fix, we analyze the frequency of the problem and decide whether to include the fix in a subsequent quarterly update.

From dawn to dusk: the release chronicle


Each release cycle begins with planning - at the level of the product as a whole and at the level of an individual requirement. In the first case, the issue of business priorities and the distribution of requirements between teams. First of all, the most urgent requirements or epics are discussed. In a good way, no more than 60% of the total work on the release should be spent on epics, so that there is a time pillow. Product planning is carried out at the level of department heads - products, testers, developers.

Developers and testers are divided into teams. The optimal number of people in a team is five. Teams are both functional and universal. In the latter case, the team is self-sufficient, contains developers with expertise in several areas. Functional commands are more focused — they work on the user interface, system components, and so on. People from different functional teams form virtual teams that begin to implement the requirements. Here, at a minimum, there are representatives of the PM group, development and testing teams. Responsible for the requirement is assigned the lead of one of the functional teams.

Work begins on the requirement. Virtual team meets weekly. Participants talk about the successes of the past week and plan work for the next.
Responsible team leader moderates meetings and records the results. He also solves issues that cannot be solved within the virtual team. For example, if you need to move deadlines or postpone some of the tasks.

Inside the functional development or testing teams, the control points are arranged more tightly. As a rule, the weekly plan is divided into tasks with a duration of no more than two or three days. In some teams, scram-practices with daily volatiles got accustomed, the point-to-point interaction between the team leader and the team works more efficiently somewhere.


A typical conversation to discuss the current status of the project.

All development is divided into weekly or two-week iterations. During the first iterations, you need to create a minimally functional functionality that will later acquire meat - for example, an expanded user interface, an API for clients, etc. And most importantly, the presence of a skeleton already allows testers to get a feature.

The release cycle includes alpha and beta releases. With their help, we show new features to the outside world and collect feedback in advance. If necessary, change solutions for architecture or functionality. The alpha and beta scenarios are not brought to the state immediately, but in batches. As a rule, in the release cycle there are about two bets.

After the beta stage, the teams go into regression testing mode. At this stage, the product, as a whole, is already working, the user interface and the work scenarios have already solidified and are changing with less intensity. A team of technical writers is involved. At the same time, technical support teams are being trained.

Regression testing is conducted in two-week cycles. The cycle duration is determined by the time required to view all product scenarios. The larger the product, the more scenarios and, accordingly, cycles. Before the last loop, the codelock is declared. This means that only critical changes will be made to the product - and only after numerous code reviews. Such draconian methods are needed in order not to accidentally introduce new defects into the product.

The closer the release moment, the more free time developers have and less - all the others. Product managers need to prepare press releases, coordinate marketing services. Testers should check fixes and implement final regression testing. Technical writers append user documentation. At this blessed time, developers are expanding research activities to the requirements of the next version.

And here it is an exciting moment called RTM - Ready To Market. This means that the product is ready for transfer to consumers. For two weeks, he will be tormented by journalists, service providers. It will be shown on presentations. After two weeks, the product will be available to everyone. At this time, there are also internal changes: new branches of development are being prepared, code is being deposited. And, of course, the build infrastructure rises under the next version. After the public release (GA), it's a hot time for the technical support service. And the rest is already working on the next version.

About priorities


And finally, a little materiel. As you know, in the trinity “quickly, efficiently, inexpensively” you can choose a maximum of two options. Quality, timing and functionality are constantly fighting among themselves. In our product box, quality comes first. Hmm, but what is there any area where quality doesn't matter? Of course not. The whole question is in the definition of quality.
For us, quality is:


With such a set of priorities to maintain quality, you always need to combine something, both for developers and testers. Small changes in the behavior of functions can lead to forced integration retesting of the lion's share of the product. Try to add support for Asian locales in the product and understand what this is about. Therefore, the question of priorities is a question of joint discussion of PMs, testers and developers.

The second, almost indestructible priority is timing. In the case of updates, the release dates are set by the SLA, in the case of large releases, by the business calendar. According to statistics, in each release cycle, almost 50% of the time is spent on development, 50% on bringing the product to mind (the bugfix stage).

What can change is the functionality of the next release. Here helps the prioritized list of requirements, or backlog. Theoretically, everything is simple: choose from the backlog the next priority function, look for the remaining time. When the time is close to the outcome, stop and release the next version of the product. The devil is hidden in the nuances:

This is where flexible development comes into play. For us, flexible development means the need for periodic re-planning. New circumstances became known - changed plans. New priority requirements were added to backlog - changed plans. We do not have time with non-deferrable requirements - we cut some of the tasks or change the requirement. In technical control theory, this is called a feedback system. Remember how the autopilot works.

Any planning under the conditions above is based on expert judgment. The expert assessment of the demand responsible Timlid is the element that makes the whole subsequent process clear and structured. Another name for peer review is “Lenin’s squint method,” as Alexander Orlov likes to repeat from Stratoplan. This is when you make a decision based on previous experience and intuition. Despite possible criticism, it works. It works like all our processes described above. If you have any questions about them, we invite you to comment.

What's next?


The current process technology is comfortable and cozy as slippers. The only problem is that in Veeam some invisible awl always drives: faster, more, more, more.
Recently we have built pilot offices in Finland and the Czech Republic, and this year we are preparing for the large opening of the Prague R & D center for several hundred people.


Lobby of our Prague office

A development office has recently appeared in Israel, and teams are growing in Canada and Germany. The number of joint development projects with HP, NetApp, Nutanix, EMC is increasing.
Manufactory turns into a geographically distributed conveyor, and at the same time new processes crystallize. However, this is a topic for a separate article.
Stay connected.

Source: https://habr.com/ru/post/422831/


All Articles