“I can tell you about the pain every iOS developer has in the ass” — 10 questions to a developer, episode 2
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?