In English | По-русски
CTO Ilya Mikheev and developers Vlad Syabruk and Alexey Nikitin had a chat with us.
Oleg Balbekov: Could you tell us about the project? What exactly is it?
Alexey Nikitin: Bookmate is the easiest way to read and find new books. It is convenient and quite cheap to read there. Also there’s an opportunity to make money on your own art. Now there arises a new aim of the project: the socialization of the readers. We want the readers to be able to ‘meet’ each other, to create a content in the form of shelves, quotations and impressions of some books.
Oleg Balbekov: Do you have a subscription business model?
Ilya Mikheev: Yes, this is the main difference from traditional shops where you have to pay for each book separately. We, on the other hand, give access to the whole library.
Oleg Balbekov: What do you need socialization for? To enhance presence in social networks?
Ilya Mikheev: We ourselves want to become a social network for readers. Users browse through their friends’ feed, see what they read, share their impressions, like their posts.
Oleg Balbekov: I thought that the era of social networks was coming to an end. There are no new ones made.
Vlad Syabruk: It’s interesting for readers to discuss some books. Besides, as it happens, you look through a profile of some girl or a guy, you see what they read and then you form an impression about them. I saw some twits that a guy hit on a girl via a Bookmate profile. It means that the site also helps to make new friends.
Oleg Balbekov: How many users do you have?
Ilya Mikheev: We’ve recently had the 3-millionth user. He is from Indonesia; we sent him a gift. We have launched there a while ago, got to hear the unusual Indonesian language. Most users are from Russia but if you look through the new users, there it’s fifty-fifty.
Oleg Balbekov: What technologies do you use?
Alexey Nikitin: We have chosen the regular way. It means relational databases, and since we started a long time ago, under the hood, we’ve got MySQL. Besides that, we use Rails, Sidekiq, Redis, Memcache, MongoDB, ElasticSearch (changed from Sphinx to it).
Oleg Balbekov: Memcache and Redis at the same time?
Alexey Nikitin: We use Redis not that much, only for caching.
Oleg Balbekov: What is MongoDB for?
Alexey Nikitin: For right holders’ statistics and friends’ activity page.
Oleg Balbekov: Is it true that ElasticSearch is much worse than Sphinx? I’ve read that Elastic uses up much memory.
Vlad Syabruk: When starting, we used Elastic only for the statistics. Then we thought: what do we need Sphinx for then? There’s not so much data for ElasticSearch to die. Besides, there are two of them. The one with statistics struggles. The other one with a search works easily.
Oleg Balbekov: Is there a search through the texts of the books?
Vlad Syabruk: No, not yet. There’s search through the titles, the descriptions, the authors with a bunch of filters and sortings.
Oleg Balbekov: How many developers work in your team?Ilya Mikheev: There are 25 members in our team. About 8 people work with Ruby. In addition, we have front-end, iOS, Android, WP, QA and mobile web.
Oleg Balbekov: How do you test your project?
Vlad Syabruk: Basically, we write tests for models and controllers, more rarely, integration tests. The testing department makes tests on Watir that are clicked in a browser; they are not carried out in Vexor. And manual testing. Therefore, there are 3 types: automatic developers’ tests, automatic testers’ tests and manual clicking.
Oleg Balbekov: How is your work process organized?
Ilya Mikheev: Our product manager comes up with a feature and gives it to the head manager. Then the head manager places it at the top or at the bottom of some board depending on its priorities. It’s planned for each iteration whether to work on the feature or to put it aside.
Oleg Balbekov: Sounds like Scrum.
Ilya Mikheev: It’s more like Scrumban. There are two-week iterations within which developers are supposed to complete the planned tasks and to put out a number of ‘fires’. After carrying out the testing successfully, we merge a pull-request and release the code in production. The testing process falls behind the development process, as there are 3 testers and 25 developers. That’s why we want to stop manual back-end testing.
Oleg Balbekov: How did you start working with Continuous Integration services?
Vlad Syabruk: We were trying to find the first CI for quite a while and, eventually, chose CircleCI. We were using it for half a year. Then there was a period of using Circle and Vexor simultaneously, after which we had to choose one service because paying for both wasn’t a rational thing to do. Vexor worked faster, cost less and the interface was easier to use.
Oleg Balbekov: Your tests in 4 threads are completed in less than 9 minutes.
Ilya Mikheev: For us, it’s a lot. I remember the times when it was 4 minutes.
Oleg Balbekov: You’ve grown a lot since then.
Ilya Mikheev: Yes, we’ve written 2500 tests already. When starting using Vexor, we had 700. We also began working with Rubocop — another thread — a month ago.
Oleg Balbekov: What does Rubocop provide you with?
Vlad Syabruk: Lots of debate about brackets and quotes. Because of them, we don’t manage to do anything else :)
Oleg Balbekov: I remember meeting you at a DevConf where you said that Vexor was like a drug that is difficult to get off. What did you mean by it?
Alexey Nikitin: I was talking about the convenience. Tests last long? Make another thread and the testing will run as long as 2 months ago.
Oleg Balbekov: What is the main problem with the alternatives to Vexor?
Alexey Nikitin: Queues. You have to wait for the previous build to end. Not that long, still not that pleasant.
Oleg Balbekov: Could you recommend Vexor?
Vlad Syabruk: It’s a treasure for the smaller companies. You pay a few dollars a month and don’t worry. For the bigger ones, it is a way to significantly speed up testing for the same sum of money; also there are no queues for developers.
We would be really grateful, if you posted this interview on social media. Help your friends find the right tool for testing :)