The main activity of the customer's company is financial analysis; the company has more than 200 employees.The initial task was to automate the hiring process. At that time, all the documentation was on third-party services: Google documents, Excel files in cloud storages.

It was not just inconvenient but led to a lack of control over HR managers: candidates left unanswered, they were lost on the way to the interview, HR managers forgot to collect important data, or they skipped the security check. This worsened the hiring process too much, and due to the number of simultaneous vacancies and candidates, it was difficult to control it manually. The second problem was data security. It was unclear who had access to data, and the customer did not like the idea of ​​storing important information on third-party servers. In other words, the hiring process was not adjusted, that led to the loss of money and time.

The customer knew what he wanted, but, as often happens, there were no ready-made specs, tasks or interfaces. Even more, there was no formalized description of the business process. This did not frighten us, and we created all the specs ourselves.

First of all, we discussed that the customer is ready to take most of the responsibility for the future CRM introduction because we decided to work remotely to make development cheaper. We collected data about business process not directly from HR-managers, but through management.

We also initially created a flexible modular architecture based on the process paradigm. Thus, we have separated the conceptual part: the system consists of candidate processes that are in different states (invited, makes a test, his documents are processed, etc.) and the rules for the transition between these states. As a result, we received a transition graph that defines a business process. At first, we wrote a generalized code, and then, based on it, we described a specific business process of the customer.

When the customer found out that we had some kind of “constructor” in the code, we immediately received a request to make it visual so that he could customize and change the process on his own. We gently rejected this idea, because, despite the seeming concept attractiveness, it is very demanding to the user of the constructor. In order to build a working system even in the most convenient constructor, one needs some knowledge of business analysis, and we didn’t want to hear objections later that the system assembled on our product somehow works wrong.

For example, site builders have been around for a long time, but there are very few good sites made on a constructor because their users are far from knowing the laws of design and usability.

Such a flexible approach has repeatedly helped us in other projects, for example, when we wrote the testing platform MetaTest. Thanks to this approach, we easily converted the system from the corporate scale of one company into a product with monetization, where employees of many companies can pass complex tests. In our own ERP-system we use in our company for sales, hiring and project management, we constantly test different versions of processes, collect statistics, and adjust processes based on data mining.

So, we made a flexible architecture, where any process is described in the form of a graph, where there are various states between which the candidates can move. The candidate can be transferred between states only by filling in all the required fields. In such a system, a person cannot be forgotten or lost. As soon as a person is at some stage longer than the prescribed period, the system begins to remind a responsible manager and his directors about this. Access to different stages is divided by roles and access to specific fields in the candidate's card can be role-restricted as well.

React.js was chosen as a frontend-technology upon customer request. In the first version, we implemented a flexible process graph, basic reports, and task management.

The customer had a look at the MVP and asked for different types of processing for various candidates. Thus, different graphs were made in the system, for example, for candidates on the position of a manager and a programmer. Also, states and roles associated with the security service and the collection of references appeared in the processes.

We managed to make these edits within a week, and since we worked by Time & Material, the customer realized that he greatly saved his budget. “Walk this way,” decided the customer and asked us to expand the system from the hiring process to the full employees’ support in the company. We added the functionality of personnel records, appeals to the legal department, performance tracking, and the structure of the company to the system.

After the completion of this stage, we also made task manager, where it is possible to send notifications not only via email but also in Telegram; we automated the sending of reports and notifications, and we made flo<[or and room maps with personnel sitting plans, tree structure of departments.

The work on the project turned out to be another confirmation of the correctness of the flexible and conceptual approach for us; it was a useful and valuable experience of business analysis and implementation of the system to support the existing company.