How a small program turned a small office into a federal company with a profit of 100+ million rubles / month
At the end of December 2008 I was invited to one of Perm taxi services in order to automate existing business processes. In general, three fundamental tasks were set before me:
- Develop a software package for a call center with a mobile application for taxi drivers and automate internal business processes.
- Everything had to be done as soon as possible.
- To have their own, and not bought from third-party developers, software, which in the future, as the business developed, could be independently scaled to constantly changing market conditions.
At that time, I did not understand how this market was structured and its nuances, but nevertheless two things were obvious to me. Call center must be built on the basis of open source asterisk software exchange. The exchange of information between the call center and the mobile application is essentially a client-server solution with all the relevant patterns for designing the architecture of a future project and its programming.
After a preliminary assessment of the tasks, deadlines and costs of the project, having agreed all the necessary questions with the owner of the taxi service, in January 2009 I started to work.
Looking ahead, I’ll say right away. The result was a scalable platform running on 60+ servers in 12 cities of Russia and 2 Kazakhstan. The total profit of the company was 100+ million rubles / month.
Stage One. Prototype
Since at that time I did not have practical experience in IP telephony, and I was familiar with asterisk superficially as part of "home" experiments, it was decided to start working with the development of a mobile application and server part. Along the way, closing knowledge gaps on other tasks.
If with a mobile application, everything was more or less clear. At that time, it could only be written in java for simple push-button phones, then with the writing of a server serving mobile clients, the question was somewhat more complicated:
- What server OS will be used;
- Based on the logic that a programming language is selected for the task, and not vice versa, and taking into account claim 1, which programming language will be optimal for solving problems;
- When designing, it was necessary to take into account the expected future high load on the service;
- What database can guarantee fault tolerance at high loads and how to maintain a fast database response time with an increase in the number of accesses to it;
- The determining factor was the speed of development and the ability to quickly scale the code
- The cost of equipment and its maintenance in the future (one of the conditions of the customer - the server must be located on its territory);
- The cost of developers who will be needed in the next stages of work on the platform;
As well as many other issues related to design and development.
Before starting work on the project, I proposed the following strategic solution to the business owner: since the project is quite complex, its implementation will take a noticeable amount of time, so first I create an MVP version that doesn’t take so much time and money, but which will allow his company to gain a competitive advantage the market is already “here and now”, and will also expand its capabilities as a taxi service. To me, in turn, such an intermediate solution will give me time to more deliberately design the final solution and time for technical experiments. At the same time, the implemented software solution will not be guaranteed to be correctly designed and possibly will be radically redone or replaced in the future, but it will definitely perform the minimum necessary functionality for “separation from competitors”. The taxi founder liked the idea,
The first two weeks I spent on studying business processes in the company, and studying the work of a taxi “from the inside”. Conducted a business analysis, where, what and how to automate and whether it is necessary at all. What difficulties and problems do the company employees face? How to solve them. How is the working day organized by company employees. What tools do you use.
By the end of the third week after starting work and studying interesting issues on the Internet, taking into account the wishes of the business owner, as well as my own knowledge and capabilities at that time, it was decided to use the following stack:
- Database Server: MsSQL (free version with a database file limitation of up to 4GB);
- Development of a server serving mobile clients in Delphi for windows, since there was already a windows server on which the database will be installed, as well as the development environment itself contributes to rapid development;
- Given the low Internet speeds on mobile phones back in 2009, the protocol of exchange between the client and server should be binary. This will reduce the size of the transmitted data packets and, as a result, increase the stability of clients working with the server;
Another two weeks were spent on the design of the protocol and database. It turned out 12 packages that provide the exchange of all necessary data between the mobile client and server and about 20 tables in the database. I did this part of the work with a view to the future, even if I have to change the technology stack completely, the structure of the packages and the database should remain unchanged.
After the preparatory work, it was possible to begin practical implementation of the idea. To speed up the process a bit and free myself up for the rest of the tasks, I made a draft version of the mobile application, sketched UI, partially UX, and attracted a familiar java programmer to the project. And he focused on the development of the server side, design and testing.
By the end of the second month of work on MVP, the first version of the prototype server and client was ready.
And by the end of the third month after synthetic tests and field trials, fixing bugs, minor improvements to the protocol and database, the application was ready for output to production. Which was done.
From this moment begins the most interesting and most difficult part of the project.
During the transition of drivers to the new software, round-the-clock duty was organized. Since not everyone could arrive during the day during working hours. In addition, administratively, by a strong-willed decision of the founder of the company, it was organized so that the login / password was entered by the taxi service manager and they were not communicated to the driver. For my part, I needed technical support from users in case of failures and unforeseen situations.
Murphy's Law tells us: "Everything that can go wrong will go wrong." And that’s not how it all went ... It’s one thing when I, and several taxi drivers tested the application on dozens of test orders. And another thing is when 500+ drivers on the line work in real time on real orders of real people.
The architecture of the mobile application was simple and there were noticeably fewer bugs in it than in the server. Therefore, the main focus of the work was on the server side. The most critical glitch in the application was the problem of disconnect from the server when the Internet disappeared on the phone and the session was restored again. And the Internet disappeared quite often. Firstly, the Internet on the phone itself was not stable enough in those years. Secondly, there were many blind spots where the Internet simply did not work. We identified this problem almost immediately and eliminated and updated all previously installed applications within 24 hours.
On the server, there were mainly errors in the algorithm for the distribution of orders and incorrect processing of some requests from clients. Upon the fact of revealing glitches, corrected and updated the server.
In fact, there were not so many technical problems at this stage. The whole difficulty was that for almost a month I was on duty at the office, only occasionally getting home. 4-5 times, probably. And he slept in fits and starts, since at that time alone worked on the project and no one could fix anything except me.
A month, this does not mean that everything was constantly buggy for a month, and I, without ceasing, coded something there. We just decided so. After all, the business has already worked and made a profit. And it is better to play it safe and relax later than to lose customers and profits now. We all perfectly understood this, so the whole team together paid maximum attention and time to introducing new software into the taxi system. And taking into account the current order traffic, in a month we will definitely eliminate all the shortcomings. Well, hidden bugs that may remain certainly will not have critical consequences on the business process, and if necessary, they can be fixed in the working order.
Here, it is worth noting the invaluable help from the directors and team leaders of taxi services, who, with the maximum understanding of the complexity of the situation of transferring drivers to new software, worked around the clock with drivers. In fact, after completing the installation of new programs on phones, we did not lose a single driver. And they did not critically increase the percentage of non-export customers, which soon returned to normal levels.
This was the first stage of work on the project. And it should be noted that the result was not long in coming. By automating the distribution of orders to drivers without human intervention, the average waiting time for a taxi by a client was reduced by an order of magnitude, which naturally increased customer loyalty to the service. This has led to an increase in the number of orders. Following increased the number of taxi drivers. As a result, the number of successfully completed orders increased. And as a result, the company's profit has increased. Of course, here I run a little ahead, since this whole process was not instantaneous. To say that management was enough is to say nothing. I was unlimited in further financing of the project.
To be continued..