Seems like everyone enjoyed the pilot episode, and weâre still sure that people âbehind the scenesâ can be as exciting as IT celebrities we all know and love. And maybe even more, because they talk about real problems and real solutions. This week we asked 10 questions to a person behind the development of Yandex.Maps for iOS.
Nikolay Likhogrud (likhogrud) from Moscow. Started programming in 9th grade from HTML and Basic. Then taught himself C#, graduated from Moscow State University with an IT degree and ended up on the Any Void team. Along with them he moved to Yandex, where he spend the last 2.5 years as the team leader for Yandex.Maps iOS development.
1. Tell me about a feature you deployed that makes you really proud.
â We need to differentiate between team features and my personal ones. The one I remember the most is that 1.5 years ago I personally halved the launch time for the app and told my colleagues about it. Dug up some iOS features that werenât documented anywhere. Since Swift (the programming language iOS uses) drags a lot of dynamic libraries along with it, there was a bit of a problem. Every library needed its digital signature to be checked at launch, which slows everything down. So my work really helped users. I even delivered a speech at Mobius about it.
When it comes to team development, âMapsâ is a huge project with a lot of different features. I havenât seen anything like it before. If you really sit down and dig into it, I can show off some features no oneâs probably aware of â thereâs a lot of stuff in there! Every new release we do something very cool, and Iâm very proud of it all. Currently weâre done polishing the historical data for search and route planning and focusing on features that tell you where you are. We call it a âcity tour guideâ. Itâs less of a useful tool and more just entertainment stuff. One of the big features is augmented reality in Maps. We did it unusually quickly: it worked pretty much from the get go, first try. Even managed to hit the deadline before iOS 11 launched, ahead of the other teams. It was really cool.
Nothing special â just a donut rolling along the river
2. Now tell me about your worst fuckup.
â Oh, there was one. It was at the very beginning, when I just joined the Maps team: it was an unknown for me, the previous team was completely out of control and no one was there to check me. And one time I accidentally DDoSed the geocoding servers because I forgot to put a test somewhere. After a user does something with the app, the phone sent a request to the server every time its geoposition updated, and the server returned data on where the user is. At the maximum rate of 10 times per second. And, considering how many users we have, even if every 100th or 1000th user interacted with that feature, the server really struggled to cope.
It was the rare moment that got out of the Maps team, people from other teams asked me: âwhat have you done!â. But, thankfully, we fixed the problem quite quickly â the server was back up in very short order. We found the big, fixed it very quickly and sent a hotfix to Apple (though the App Store review took about a week). Itâs now a lot easier to detect there, and back then I was more mad at myself: how could I fuck up so badly after just joining the team? But everyone understood that the project was big, and there was no one to consult withâ¦
3. Describe your workplace: from your office chair and monitor to preferred development environments and favorite utilities.
â Chair and desk I didnât choose: what the company gave me I took. On it thereâs a Thunderbolt monitor and a MacBook, plus wireless keyboard and mouse so I can set the laptop aside.
The desk is littered with papers with my thoughts and plans on them. I still canât bring myself to switch to something progressive: Trello or Dapulse, doesnât matter. None of it was around when I joined, and I still prefer paper. Sure, I also take notes on the laptop, but itâs still pleasing to write something and then strike it through later. Thereâs a lot of other stuff on the desk too that I periodically clean up. Thereâs also some Lego bricks around for comfort. I consciously try to make my workspace feel like home, and I sometimes look at my coworkersâ tables, where thereâs nothing except a laptop and a monitor, and think I canât live that way.
4. How do you choose a job? Stack, product, living conditions, money?
â I would probably answer if the question was âif I were choosingâ¦â. I essentially havenât switched jobs once yet. Iâm into my 6th year at Yandex and I canât imagine myself anywhere else. I have a great position, team, responsibilities, lots of career prospects.
So, if I chose where to work, I would probably look at the team first. I need to know what people Iâll work with before making that kind of decision. If you know them, you probably also know what project youâll be working on. If the person is accomplished, you can be sure he has some great projects too. Itâs important to know other people and let other people know you. You canât isolate yourself and go into the unknown. Even tasks depend greatly on people. If the company misplaces their new hire, he would quickly become disinterested.
The issue of money is also important, but itâs more or less the same everywhere. Iâve done a lot of interviews and know what is usually being offered at other companies.
5. What would you want to fix in technologies and languages you use?
â I can tell you about the pain every iOS developer has in the ass. Swiftâs compiler is horribly unoptimized, the development environment isnât polished as well. Our 400-thousand-line-long projects lags like crazy. Indexing is slow as molasses, every file opens multiple minutes, a project can initialize for an hour. Compiling isnât any faster, and it also consumes a lot of processing power.
Our job depends on how fast Xcode compiles stuff. It works with Objective-C just fine, but thereâs something wrong with Swift. If it worked a little faster, we wouldnât have had to chop the project into modules, but we had to invest in it. Currently we develop more within test projects and not the main app itself, then transfer it over. Even though it eventually worked out well for our project, it took money and time to learn to work that way.
6. Where is the best place for sharing work experience â is it college, conferences, Habr? Anywhere other than that?
â The most effective way is to have a specific problem and search for a solution to it. âGain experienceâ is a very broad term, but âlook for a solutionâ is more appropriate. You just type your question into Google and look at what it gives you.
I usually go to conventions not to gain experience, but to share my own. I have some experience on maintaining a big project, and that interests people. There are very, very few projects like ours in Russia, so our experience is rather unique. I get asked how did you divide the app into modules, what your code review looks like, howâs your CI works.
7. Given unlimited resources (time, money, people), what project you would like to work on?
â I have a rather long list of âwant to do, donât have timeâ on what I intend to do in Maps. There are things in need of improvement.
But overall, I would like to get into the space industry. Iâm fascinated by an idea of a man outside of Earth, exploring the universe. Every time thereâs news about scientific advancements in that area, I get excited. Though iOS development probably isnât needed there, but I can fit somewhere with my team management skills. Hell, I would even get coffee to people if the idea is right.
8. How do you relax? What do you do in life, besides work?
â Everyone needs to ârebootâ sometimes. The 5+2 schedule was invented by some very smart people. If youâre really involved into a project, interested in its success so much youâre willing to work weekends on it, it wonât end well. Youâll lose your spark, and it should be maintained at all costs if you want to work for months or years.
On weekends I usually do something simple: walk, watch TV, nothing too extreme. Though I probably wouldâve liked to, just donât have anyone to do it with. A couple of times our team went kayaking on the Vyazma river, it was pretty cool. Sometimes we go paintballing. But itâs not something we go regularly, because it drains you rather quickly. Sure, you exchange that for emotions, but⦠Work for five days, then spend two days doing something physically intensive, then work for five days again? I probably wouldnât manage.
Also I like to spend time restorating my house. Some repairs are done quickly, some go on forever. Itâs its own little world with its own technologies and experience.
9. Tell me about your 3 favorite books: educational, popular science and fictional.
â I havenât had positive experiences with educational books â I probably havenât read a single one about my job. Maybe only at the very beginning, I studied C++ on books. I remember going to a childrenâs outdoors camp, everyone around me had normal books and I had C++. I ended up not reading too much because I didnât have a computer with me. I read it and mostly understand, but now to apply it all to my needs? How to gain experience? Iâm more of a practice person than a theory person. Maybe I donât know some of the cool terms my colleagues use regularly, but at least I know how to get things done. I learned that simply by solving complex problems and searching for solutions on the Internet.
To people that concentrace on clever blogs and literature, I can only tell that nothing you read or see guarantees you can replicate it yourself. Always keep your goals in mind and complement reading with practice.
Wikipedia replaces popular science for me. I read about everything. I really like history and can once in a while read about the whole Russian ruling bloodline: from Rjurjik to Ivan the Terrible, from the first Romanov to the October Revolution â and then jump on a link about Alexander the Great. I can spend 2-3 hours on there and barely notice it. There are some interesting articles on weapons, blacksmithing and stuff. Unfortunately I canât replicate it, but itâs cool to imagine how people initially came up with these ideas.
I donât read fictional books that much currently. They got almost entirely replaced by movies. They serve most the same purpose, but movies are a lot more compact. But Iâll mention one book that really stuck to me â âOblomovâ. It touched my nerve in a way no other book did.
10. If an AI system suddenly became conscious right in front of you, what would you say to it?
â First I'd ask: what âconsciousâ means? If it simply means passing the Turing test, then itâs not conscience yet. But if weâre not getting into particulars, I would probably ask it to solve some specific problem. Iâm a practice person, after all. So, âHow to make Xcode faster?â
But you still need to begin with âHi, how are you doing?â. An answer to this kind of question can tell us a lot about AI. How does a machine assess its own mood? What does it do?
Question from a previous guest: what technology was the most fun to learn?
â âFunâ specifically? I havenât learned to have fun from learning or working just yet. Iâve learned to take it calmly and do it well. For example, I havenât really had much fun learning the iOS SDK, because itâs rather simple if you know the basics.
Where i really had fun was at university, where I worked on a project that implemented machine learning. It was refreshing to realize that there really isnât anything that difficult to ML. If you know the input parameters, you can somewhat accurately predict the result. Perhaps, that explains why Iâm not as infatuated with AI as everyone else seems to be â I know itâs just algorithms.
Also, I had fun working with compilers that had automatic multithreading. Itâs a rather developed technology, it has a lot of stuff to learn. Theyâre really smart and do a lot more than you can imagine. For example, incredibly complex syntax tree transformations. Or optimizing code generation for a particular hardware and CPU configuration.
Itâs cool that we have an open-source framework for that, LLVM, so you can create your own compiler. You could even make your own language! Write a parcer for it that does lexis and syntax analysis, and then utilize the power of a modern compiler to transform it into machine code.
Bonus: ask another developer anything you like
â Would you join the first manned flight to Mars, knowing you wonât return?