So, in May 2013, an article appeared on Habré
“How much does it cost to make a browser game,” where Mr.
Viacheslavnu tried to calculate how much money would be needed to create and promote a seemingly simple game for an office consumer. If someone does not remember - the amount turned out around 25 million rubles. At that time, I myself was somewhat skeptical about this amount, but the closer the date of our start came, the more I was convinced that even for such projects we need “special” capital investments, which are not always affordable for developers without an investor.
Of course, if it is required to implement the project in the shortest time possible and start receiving profits from it, then it is quite possible that the total amount of expenses will reach the specified level, but if you are engaged in the project in your free time, without investing all available funds, then the figure get much less. But you understand that the term and the amount of laziness from this increases many times.
It is about this method that I want to tell my story. The history of the creation of one of these games, the difficulties encountered, the budget and some interesting points.
First and foremost, it’s worth clarifying: the project we are implementing is another “browser”, of which there are currently plenty of items on the market. But, with an attempt to keep up with the “fashion” and rhythm of life, the developers of the “browsers” completely forget the goal of such games - to while away the time between everyday activities, build communication and gambling opposition, and not dive into them with the head. For a similar purpose there are the same Tanks.
')
Although our game is built on standard mechanics and does not claim to be unique, it recalls the pace of almost forgotten games. Those that did not require constant participation in the game process, but at the same time the game world remained holistic, and not divided into rounds.
This is the project that at the time of the idea was clear to us from beginning to end. A project that we could do with the existing team. Our personal goal in the implementation of the project, first of all, is in obtaining additional experience, lines in the project portfolio, and only then in the specific need for obtaining potential profits.
Who are you, dear?
Let's start from the beginning, in order to explain the reasons for such a project. I am a PHP developer trying to work with the Yii framework, the acquaintance of which happened thanks to my first official work in the web studio of "local spill". I am far from being a genius of my business, I don’t know thoroughly all the subtleties of the language and framework, but as it turned out in practice, my knowledge is enough to feel more or less calm when there are non-standard tasks.
My story originates in the near 2011, when a certain person turned to me with a proposal, about which I had already heard somewhere before my ears, but did not have any direct acquaintance. The proposal was simple and clumsy: "Let's put together a small team and make a browser game." And since my friends, fellow colleagues, and partners had already attempted to conduct our projects earlier, which always ended in failure at the initial stage of development, I liked the proposal, above all, with the ready work plan, which was proposed to me a little later, and the presence of additional links with right people at the organizer.
It is worth once more to clarify that at the time of the start of development, my knowledge of Yii was limited to work experience on more or less large projects of six months. Therefore, I have never lied about the goal of gaining experience (specifically for me).
Where to get people?
To assemble a small team without a cent in the project budget is not as easy as it seems at first glance.
It was supposed that there would be seven of us — the project coordinator, web designer, artist, copywriter, programmer, and a couple of concept writers to generate the bulk of ideas. This is the very backbone required to create hand-drawn graphics, write code and control all stages of the process, generating an ideological component. Looking back, I understand that if we didn’t have at least one of these comrades at the very beginning, we would hardly have gone so far.
How to interest the team member in the complete absence of the budget (that is, the lack of current financial interest)? The decision in our team was the following: it is necessary for each potential participant to say exactly as much as he needs and enough to know to get started.
I, frankly, can not say for everyone, but for the developer we need specifics - numbers, amount of work, a description of the actions of other participants, in general, a plan. And for me it was provided: there are ideological generators, there are examples of the promotion of projects, there are a number of primary tasks with which even with current knowledge I can fully work on the project. I don’t need to know anything more, besides the fact that the project will develop comprehensively, and I don’t have to do all the work for everyone.
Paws, wings and cookies
The people gathered in the team had a sufficient understanding of the “browsers”, knew their strengths and weaknesses. We understood that it is unlikely to make a fundamentally new job - we are limited in graphics (only one artist), one programmer (limited in knowledge and capabilities), we do not have a flash programmer. For these reasons, we stopped at a static schedule and the good old mechanics, which are very much alive from the days of “Fight Club”.
The competitors emerging from the crowd were identified immediately. In addition to the aforementioned “Fight Club”, some top names included: “Plant online”, “Bad Pets” and “Mosvar”. In this case, the last three have long been grabbed each in their own share of players and calmly develop in their own direction, without interfering with each other. Some have “pigs” and “barantus”, others have “penguins”, “cats” and “squirrels”, and the third have their own atmosphere.
The team clearly understood that defeating competitors with one shot is an impossible task, we would rather have a coexistence that does not intersect with them according to the main visual ideas. This required to work out the game world and the main characters.

What we did, having organized a collective skype chat, where ideas were offered practically during the main working time (yes, I confess, we all worked in different companies full-time, while actively thinking on two fronts of tasks). And, frankly, I absolutely do not remember how during the burning discussion the conceptualists came to the idea of birds. But after the main idea, it was somewhat easier to think of where to settle them, the cause of their hostility, their main factions.
For calculations inside the game it took a currency - it became coins, cones and cookies. Later peacock feathers were added to the list of major currencies, as the most scarce of them. For resource extraction we need our own locations - this is how the bureau of investigations and the club of intelligence officers appeared.
Stream of thoughts
Now, looking back on two years ago, I understand that a lot of work has been done. And not only in the form of code, but also in the form of grouped ideas that made up the world of the game.
It all started with a map. For each of the factions, the use of separate zones of influence was assumed. The artist based on schematic drawings of concept planners sketched a sketch, which as a result was never used, but at one time gave some charge to further work:

Discussion of ideas concerned not only the world itself or game actions, ideas were required for illustrations as well. For example, in the process of brainstorming, the question of depicting the characteristics of the characters in the form of avatar icons was resolved:

The best ideas received more detailed drawing and color:

Personally, I saw that in addition to my work, the project is moving in other directions. This gave me the opportunity to focus on my affairs, entrusting the rest to my teammates.
By the way, it was very interesting to watch the work of other people, especially if someone’s approach to work differs from the usual one. In particular, I mean our artist, who began by collecting a huge amount of material on birds: a bunch of articles, photographs, drawings and sketchy sketches. In the first weeks of the project, I saw his attempts to create his own style of drawing - various sketches of wings, paws, eyes, and plumage appeared. It then threw me into a wild delight, from which I wanted to work on the project with particular diligence.
Each project start has its own mistakes.
Inevitably, some ideas cease to like, some elements want to be redone, and if you immediately rush to solve all the problems superficially and independently of the team, you will have to redo most of the developments. But the pursuit of complete versatility can be costly.
It was decided to start development with the admin panel in the absence of graphics and understanding of the main gameplay on the part of users - the management of resources, players, objects, buildings, etc. I assumed that with time, the amount of resources may change, fractions may be added or something that I can foresee and make universal happen. However, in consequence I realized that there is nothing wrong with the resources embedded in the code - we save on samples and development time; There is no need to create new types of characters - this is the story, illustrations and so on.
Actually, when it came to direct development and it took a detailed description of locations, formulas, characteristics, the team’s passion was exhausted. Tasks were accumulated, deadlines shifted, it became increasingly difficult to remind of responsibility.
Our next step (mine and coordinator) towards the motivation of the team was the official registration of “LLC” (Limited Liability Company), in which each participant received an equal share in the composition of the founders - it was assumed that this would strengthen the general mood, the team would feel serious in our business , and will work as if they get paid a lot of money. Everything, of course, turned out to be wrong - awareness did not come, it had no effect on those people who, even without “LLC,” were not very eager to work. Moreover, six months after registration, we had to dismiss the founders of the people who did not want to conscientiously perform their tasks.
A few weeks after registering, the web designer refused to work with us, arguing for his part that he allegedly didn't need him. In view of this loss, the project coordinator took over the tasks of sketching a schematic layout of the game interface (later he had to take on too much). Several models were submitted to the court of the remaining 6 team members:

A little later, this chaos was simplified:

And after some time, the artist, at last, sketched an approximate idea for the general design on the chosen layout:

Not everyone wants to work, but everyone wants to receive a reward.
Over time, the extinction of the interest of team members to the project only progressed. Former ardor and confidence probably only remained with two people: me and the project coordinator. From time to time, the artist also had an influx, but most of the time he still needed “scolding”.
While direct development went at an accelerated pace, one of the concept designers disappeared from view for several months. The second, as it turned out, was simply unable to express his thoughts in writing - I, as a more or less literate person, could not read a paragraph of text that contained no punctuation marks, and which instead of meaning was filled with emotions alone.
As a result, the coordinator also took on all the work on the concept and its implementation. In the future, he accepted and work on the compilation of game texts, as our copywriter too delayed the deadlines. The artist was and is a creative person and a person of mood. Throughout the project, the artist was systematically “pushed back” to work, but in general terms we could not wait for quick and voluntary tasks.
Know if you decide to make a project and can put together a team of like-minded people - most of you will either leave at the moment of the appearance of voluminous tasks, or wait for a convenient moment when the light starts to appear at the end of the project. The same thing happened to us. Looking ahead, I will say that in the end we lost a web designer, conceptual and copywriter. And in the second year of development, there are three of us left from the original team.
Use outsourcing where you need it, even if you don't have a budget.
After the appearance of the first general design sketches, I slowly began to understand what awaits me - layout.
I basically do not like to impose. At the time of typesetting, I turn into a hysterical child, pounding my feet on the floor, beat my fists on the table, howl with all the available options and sometimes beat my head on the table. No, I can fix some elements in the layout, I can give a separate piece of the site the desired look, but doing it from scratch with calm nerves is not mine.
When it was time to impose, I did it extremely reluctantly, very slowly, piecewise and crooked enough. Therefore, even without that, the new design, which had lost the main beauty of the outline, looked like a complete failure.

The project began to slow down, the code on the semi-finished layout was drawn awkwardly, it was time for the project to stagnate. For lack of options, the project coordinator by some unknown forces and without the participation of the artist sketched a “cloud” version of the design in photoshop:

The layout of this option, to preserve my stable mental state, it was decided to order "on the side", good, colleagues on the main work helped with the coder. Having paid 3,000 rubles for the layout, we got a springboard for further development in the development - a “boom” occurred in the project. The code was written with a triple speed, new sections appeared with an enviable constancy.
Seeing the effect of ridding me of the layout, the project coordinator fully assumed the functions of the layout designer and subsequently repeatedly turned the whole layout. Following the speed of development has increased the speed of drawing illustrations. Many of them did not enter the final version of the game, but the result was achieved - the work on the project moved forward. While I was doing my job, the project coordinator ordered an illustration of an oak from a familiar girl to translate the idea of a new design.
Yes, in the end, the design was altered many times, evolved and waited for the moment when we could say: “Stop, now we are satisfied and we are happy with everything”. So the oak appeared.

The very moment of the appearance of the oak was quite unexpected for me. By that moment I had taught the coordinator to the version control system, so when he corrected some of the layout layouts, I was not very scared. But the fundamental design change I could not miss by.

The amount was spent on the illustration itself not very large, a little more than the layout of the previous layout. Having introduced a new design, it's time to launch the first testers into the project. The calendar was November 2012.
Another wave
Having received the first reviews, a new wave of development acceleration began, and I was somewhat proud of the work done: each piece of the site was made with the thought that we would tear our hair out of the fact that the server load would be at the limit and we would have to be optimized urgently. Even if the project does not bring a penny of profit, I have already received my benefit.
At that time, I only understood in general terms the principles of building systems under high loads. Somewhere I had to experiment, periodically rewrite, improve, try to ask my friends. The only problem was that I was limited by the scope of PHP - I did not have time to learn something else and, especially, the ability to rewrite a significant part of the project for more advanced technologies.
Where to put laziness?
Laziness is haunting me everywhere, and I really don’t always succeed in forcing myself to do business. However, you can completely postpone the case and do what is interesting to do at the moment, and then switch to an abandoned case that will go more easily, since “after warming up” is one of the advantages of working on your own project, rather than completing tasks set over.
So, after the next creation of the tablet, putting the CRUD in the admin panel, binding the imposed design to a simple functional, I absolutely don’t want to take up another such task. And here the paranoid regime helps: “What if some kind of kabzdets happen?” For each invented “kabzdets”, an easy solution is invented, which will keep the “kabzdets” to a minimum or prevent it. And often such tasks are remembered most of all in a project, and I want to share them with someone, but sometimes solving such tasks is fairly simple and intuitive (if you think about them), therefore not full-fledged “guides” or collections of interesting points will not be enough material.
Take at least a situation where the server fell and does not rise. Fortunately, we are reasonable people and we make backups, but the amount of data is such that it will not be possible to quickly pick it up on any other machine - it will take at least 20 minutes to an hour. But after all, if we divide the data into “important” and “not very”, then it is enough to deploy a backup with the main data to restore the system to work, and let the rest be pulled up in an hour or two. This task can be solved by means of a programmer, if there is a lack of administrative knowledge. Data that could be lost for a while (in our case, battle logs, letters, technical support tickets, clan letters, etc.) can be transferred to a separate database that can be recovered from the archives longer than the main one, and the system may well work after fast sweep the minimum required for the archive of the main database. According to preliminary calculations on our system, the ratio of the additional database to the main one was: 70 to 1 - a significant difference with large amounts of data.
Other techniques that really helped in the development turned out to be even easier. For example, for each action in the system, calculations with coefficients are necessary: for example, the number of prize coins is equal to the level * 5 * any chance. And in order to maintain the correct balance of the game, it was not necessary to climb all the code in search of formulas, these directly calculated mechanisms are rendered static functions in the Formula class. From now on, it is enough to go into one class and correct the necessary parameters, add new ones, remove unnecessary ones.
Similarly, to avoid searching for textual descriptions directly in project classes, Yii :: t () is used throughout. In fact, this functionality is usually used to support multilingualism, but why is it bad to use to separate the code from the literary description of user errors?
In general, it is very simple to use your laziness in order to make really interesting pieces for the project, and not to stop the development process as a whole. In the process of “laziness”, we checked the possibility of two servers working in parallel on replication, put into operation a system for updating the project from the repository and many other small but memorable things.
Chopped oak on toothpicks
Let's go back to the design. Having made another commit to the project repository, I noticed that the oak had first lost the trunk, and after a few weeks the crown had disappeared. The playing field began to fly in the air, and the design on the project did not smell - the oak became the victim of another redesign. More precisely, it was waiting for a new final design.
Our artist, who by this time was engaged in “do not understand what”, unexpectedly for me got a recruiting in the family, which began to devote even less time to work on the project. At that time, the volume of the finished working code reached the point when we already saw the imminent completion of the development. I do not know what our coordinator had to do in order for us to have the final logo, but he succeeded. In early May 2013, we had a logo and a promo page:

It would seem that here it is. This is the design we went to for so long. This is the idea of illustrations that we are ready to accept for ourselves as final.
The promo page existed for two months without any promotion - only empty groups were created on social networks and friends were invited. For two months, without any warming up of interest in the game, about 100 people left their mailbox addresses to record for beta testing. Not that crazy numbers, but after all, for this result, we did not make any effort.
Regular changes in the team
After another month of waiting from our artist for designing the game interface, the project coordinator decided to look for help. Fortunately, the girl who painted the oak tree for us agreed to take up drawing sketches. As a result, we got excellent quality illustrations:

After consulting, she was sent a formal proposal with the maximum description of our advantages and a modest budget. In fact, we offered her a similar share in the project, something that each of us had, and, praise heaven, the girl agreed.
A regular conversation was held with the acting artist “in an adult way”, the purpose of which was to give him one last chance, but on the conditions of daily reporting on the work done. On the question of the timing of drawing the answer received an answer: 2 days. Having poked nervously, we gave up and gave the go-ahead to such an optimistic plan, while at the same time I suggested securing and ordering the design from our new artist at the same time - at worst, we would have one design that we could work with. The project coordinator slightly cheated and did not do this - we leave it on his conscience, especially since the work on the design still got off the ground.

Of course, the period of 2 days was far from reality, but it was not so important anymore. In July 2013, conceptual workers finally abandoned the project, without explaining the reasons. Given the fact that their work activities ended at an early stage of the project, it did not come as a surprise. As a result, 4 people remained in the team - two artists, a coordinator-master-of-all-hands and a programmer.
By mid-July, a nightly version of the design appeared, changing to the daytime depending on the playing time of the day:

Will it survive?
At the time of the lack of complex development tasks and the next influx of laziness, I got my hands on a peculiar kind of load testing. And very good that they came.
At that time, we had two virtual machines in Hetzner on hand - vq7 and vq12, on which we tested the entire working capacity of the site and replication support. On vq12, there was also a dev version, where updates were available only for developers.
Realizing that you can generate as many users as you like with the console command and perform as many functions as you like, I sketched a few scripts in a couple of hours. Scripts created users in the right quantity and carried out battles between them with a given frequency (holding the battle requires the most resources for the calculation, so this function could be taken as an indicator).
A virtual machine easily withstood 10,000 users (including calculations for finding users, replenishing health, and other functions related to mass sampling), and then 20,000 users. With the maximum available frequency, a mechanism was launched for conducting fights between random opponents - on average, the battle was calculated in 2-3 seconds. Not very good indicator, but it was a virtual machine, which seemed quite an acceptable result.
Curiosity overwhelmed me somewhat: CPU and RAM usage figures were far from 100% load. During some trials, MySQL began to tell scary stories about writing tmp-data to disk that did not want to fit into memory. And in fact, the problem was a crazy ORDER BY RAND (), which unexpectedly crept into the search for the enemy to fight.
Transferring the selection of a random opponent to the PHP code solved the bottleneck problem, and the speed of the battle calculation increased 30 times - up to 10 launches per second. Considering that we were counting on carrying out 2-3 fights per second in real conditions, which the existing virtual machine would have endured, we were very pleased with the result.Terms set
Toward August 2013, we finally decided on the launch dates of the project. On August 30, the official alpha testing was to be launched, where a little more than a dozen testers were invited. The primary start, called closed beta, was scheduled for December 2. The start of the game received a date - March 3, 2014.
Some of the competitors we were watching at this time once again introduced dubious innovations that caused waves of indignation among the communities of players, and this situation was good for us. In the conditions of tight deadlines, we began to “kick back” the artists with special effort, but, judging by everything, they already understood everything perfectly and tried their best. With the previously unknown speed, our project acquired a huge number of icons, several sets of equipment, new avatars appeared, illustrations of non-player characters, skills and awards icons, various additional elements. In just one and a half to two months, the number of completed graphics increased by 40 percent.But we didn’t sit idle - various functions appeared at a particular speed in the game to influence resource extraction and fighting ratios (additional types of equipment, skill tree, incentive items), more and more interconnections appeared between sections of the game, etc. d.
I must say that for our team of testers, the fact of updating to the official alpha version turned into a kind of reaction “Wow!” - from the outdated intermediate version, with partial design and half functionality, poorly supported interest in a long stay in the game, an almost finished product appeared, which lacked a couple of locations to launch.And here it began to come to us that the quality of development - both the code and the thoughtfulness of the game world, the ideas, the overall design and illustrations - came to the level that after the launch, you can safely feel among similar competitive “hard” projects. There was only one moment with which we frankly lost - we didn’t have an advertising budget, the only thing we could afford was to recruit a status through social networks in some mythical way. For this purpose, a story was devised, divided into small chapters - this story is published every second day since September 19, along with one of the illustrations of the game in social networks. Thus, we expected to maintain interest and build a base of subscribers who are ready to start the game at the time of launch.By the end of the first decade of October, the situation in terms of the number of interested was not very bright - about 130 people signed up for beta testing.At the beginning of November, the number of requests for participation in beta testing exceeded 150 - a completely “penny” number, and mixed feelings settled in my head.It seems that no one knows about us, and this number is an indicator of real interest, and not a marketing ploy. But what to do next? However, there is nowhere to retreat, we reached and survived to the pre-final of our undertaking, and the testers' responses are quite positive - it even reached the point that some people wake up on an alarm clock at night to have time to perform some actions in the game.Apparently, our only option is spot advertising on social networks at our own expense, based on our financial reserves. Selling a game or looking for an investor right now, I personally do not see the point - we can consider this option only if we do not succeed.And so, the appointed December 2 comes - the date, which was to mark the start of the "closed beta testing" of the game. At the appointed time, we sent invitations to all who left their applications on the promotional page, of which almost 200 people turned out, and literally a minute after sending, the first registrations went.A week passed, a little more than one hundred and sixty people were registered, of which used tomost of them return to the game from time to time, while single-step online is between 15 and 50 people registered. The mechanism of attracting visitors, which we very much hope for (inviting friends to the game), is slowly beginning to act - more than fifty people came to us exactly at the call of friends. The figures, of course, are ridiculous, I don’t say that this is already a “success story”, but without having a multi-million dollar budget for advertising, we cannot boast of other results.How many people do you need to complete a project?
In fact, finding a few people on the core team is an achievement. For example, three additional developers from my circle of acquaintances were invited to a semi-finished project at different times, all three were interested in the project, were inspired, but eventually found various reasons not to get involved.Taking into account all those who took part, but left the project, 99% implemented four people in two years. Dry figures - about 80,000 rubles were spent on the project. Of which 35,000 were spent on development. The rest is on the test servers and the “LLC” design. This may say that all the work that could be done by the team was done by the team, and there is no talk of any astronomical sums.To date, the project has more than 8,000 commits in more than 1,500 files, which in total occupy about 15 Mb, excluding graphics. The database consists of 130 tables, and the list of CRON-tasks on the server has about 40 entries. Approximately 10,000 man-hours were spent on the project, which were spent on solving more than 2,000 tasks. The design was changed 4 times, moving to the expected ideal, more than 300 illustrations were drawn, not including varying degrees of detail as the image scale changes.Developing a game, even a seemingly simple, standard one, of which it’s full, has never turned out to be a simple task, especially since we ourselves have complicated the project by introducing additional interesting tasks, but this is not a waste of time.