跳转至

39 An Interview with Mike Nakhimovich

Mike is a Google Developer Expert in Android and Kotlin, and he is heavily focused on making performant apps by leveraging functional reactive architectures. He started his Android career 6+ years ago working on logistics software, particularly with physical barcode scanners. Since then, Mike has done a stint at NY’s premier Android shop, TouchLab, chased the equity dream at a few startups, helped fight the good fight at the New York Times and spend some days as the Android Lead at Nike. He is currently working as a Staff Engineer at Dropbox. Mike is also a co-founder of FriendlyRobot.nyc where he helps NY startups turn their dreams into Android realities. In his free time, he enjoys writing and speaking about overly complicated concepts at conferences and area meetups, writing for tech blogs and maintaining his open-source libraries which include NYT Store, TinyDancer and Apollo-Android.

Mike NakhimovichMike Nakhimovich

Connect with Mike

Twitter: @friendlyMikhail

Interview

You have been the Team Lead at the New York Times first and, currently, at Dropbox. What are the traits of a good leader? Can a good leader emerge from a “non-leader”?

Good leaders strive to become the worst engineer on their team. Overall, I want everyone to work with me to be better than me. I achieve this by teaching others everything I know. Team members can then build on my experience and achieve things I could only dream of. As a follow-up, my criteria for hiring someone: “Would I be ok with this person being my boss one day?” I wholeheartedly believe that every member of my current or previous team would make a phenomenal staff engineer or director.

How does one realize if leadership is the best path for themselves? How can one best transition your career into becoming a leader?

You just have to try it. It’s okay to suck at being a leader—or anything. Failure at something is not a reflection of who you are as a person. There are jobs in which I have succeeded and others not so much. I learned in both instances. No questionnaire will predict whether being a leader will make you happy. As far as advice, pay attention to those individuals who are doing it now. There’s a nice Mark Twain quote that says, “When I was a boy of 14, my father was so ignorant I could hardly stand to have the old man around. But when I got to be 21, I was astonished at how much the old man had learned in seven years.”

“My favorite coworkers were ones who asked for help when they needed it and offered it when they saw that they can make my day better.”

As a leader, what do you value most in a team?

Kindness, understanding, and the ability to separate a job from a person that does it. I value those people who bring out the best in me by making work a pleasant environment. My favorite coworkers were ones who asked for help when they needed it and offered it when they saw that they can make my day better.

How do you consistently keep a team of software developers happy and highly productive?

Constant improvement. I help those around me refine their skills while improving weaknesses. For some, it’s coding. For others, it’s growing into a more senior role. Others may want to work on soft skills toward being a better citizen in the community. When my team succeeds, I succeed.

What is a piece of guidance you wish you had gotten when you started software development that you had to learn the hard way instead?

I wish I’d known that no one will be great forever. This took me years to learn that the folks on my first team were not dumb, old or lazy. They were just burnt out. I wish I spent more time learning how to be an effective engineer at times when you can no longer spend all weekends learning the latest technology. As I enter the second decade of my career, I find myself needing to plan when and where to use my brainpower and to know when I can delegate something to someone younger with a lot more energy.

In a field with a fast pace, such as software development, how do you keep learning? Are there any “secret” or lesser-known sources that you like to rely on to stay current?

Network! Folks who live in the woods have a tough time keeping up with the latest fashion.

It’s like that for tech, too. I am a member of Slack communities, attend meetups, read r/AndroidDev everyday, subscribe to multiple tech newsletters and try to host gatherings of industry leaders when conferences are in New York. Additionally, I did consulting in addition to my standard job through my company Friendly Robot LLC. By moonlighting, I gave myself an opportunity to learn and practice techniques in new codebases—while getting paid!

What is a programmer trait that is undervalued, and why should it be taken more seriously?

I would say technical writing. My favorite mentor is one who is also able to articulately explain why his goals are aligned with others. A lot of what we do as an industry is about communication. I don’t think enough time or energy is spent on our writing abilities.

Who are your mentors or people who inspire you to become a better developer and professional?

First, Jake Wharton, an active open-source GitHub member. He inspires me not only because of how much he does but how he does it. He helps developers everywhere and in any way he can. André Staltz is another inspiration. He is a great mind and was responsible for writing a blog post —“The Introduction to Reactive Programming You’ve Been Missing”—that finally got reactive programming to click for me. Lisa Wray is someone I’m in awe of for both her technical ability and her ability to boil down big ideas into something easy to understand; few people delight a crowd as well as she can. And, most importantly, my wife Leigh Scherrer; she switched careers three years ago to become a software engineer and has not-so-slowly been catching up to me. The race is on.

In drawing inspiration or motivation from other sources, do you prefer podcasts or books?

I prefer books and rarely listen to podcasts. Even though I have lived in the United States for 25 years, I still have trouble learning through an audio medium. Books allow me to go at my own pace. If I have trouble with a word or a term that I have not seen before, I can look it up or slow down and reread. I find it much easier to learn when I can do it at my own pace.

What are the three books that have had a lasting impact on how you do your work?

First, Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin. This book showed me the difference between writing code and being a software craftsman. Effective Java by Joshua Bloch is another because it was like learning all the secrets of someone’s career in well-organized individual points. And, finally, The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas; while many tech books deal with a particular stack, this one goes into how to deal with bosses, estimates and all the other things that I feel separate junior and senior developers.

In terms of other industry trends, what is a trend that you think is just plain wrong?

Particularly on the Android platform, there has been a movement towards “easier” libraries. The reason I put “easier” in quotes is that I am seeing a trend in which tools and libraries are becoming less robust rather than easier to use. As an industry, we should do a better job not labeling things as overly complicated when all it takes is learning what decisions were made the way they were. Dependency injection is a good example; it is a concept that may not be simple to grasp but that does not make the use of dependency injection libraries not worth it.

What are your must-have industry tools or apps you use daily that you’d recommend?

Confession: I don’t use Git from the command line. My first tool suggestion is IntelliJ; JetBrains did such a great job with the Git integration within IDEA & Android Studio that I have never had to learn what Git commands do what. I’d highly recommend taking advantage of the version control integration that Android Studio has. Another is Google Play Music—I’m a deadhead (a Grateful Dead fan). There are 100+ albums of Grateful Dead music that I usually have on my headphones while coding.

For your work, how do you start your day off with a bang? Do you have any secret morning routines that set you up for success?

My alarm goes off at 7 am. I start by catching up on the internet reading from the bed. First is Google News for overnight events; I enjoy starting with something that is more articles than small blurbs. Next, I spend ten minutes on an Android Slack channel where I can look at conversations that took place in parts of the world that are up while I am not. Twitter is next; I am very selective about who I follow and stick to tech only. Twitter also gives me a channel for communicating with folks from all over the world. Next is a shower and I’m off on the 8:24 am train to New York City. My commute is split 60/40 train and walking. I am at my desk by 9:15 am, usually, where I review pull requests and eat breakfast. I’m currently weaning myself off of croissants toward healthy breakfasts of nuts and veggies.

Finally, how do you stay highly productive in your work, for long periods?

I don’t, actually. It’s why I always make sure to work in a team. Even when I started a company, I did it with a co-founder. Life is about peaks and valleys; no one can go 100% all the time. It’s also one of the reasons why we try to rotate engineers from doing bug fixes to doing long features to prevent burnout. If I have big projects at work, then I don’t do consulting/speaking/writing. If I want to focus more on personal growth, I make sure to not take on anything big at work during that time. It is all about finding the balance that works for you.

Mike’s Recommendations

  • Clean Code: A Handbook of Agile Software Craftsmanship | Robert C. Martin
  • Effective Java | Joshua Bloch
  • The Pragmatic Programmer: From Journeyman to Master | Andrew Hunt and David Thomas