Get a DemoStart Free TrialSign In


6 min read

In the latest instalment of our interviews speaking to leaders throughout the world of tech, we’ve welcomed Ivan Lemeshev, Senior Software Engineer at Unity.


Can you share a little bit about yourself and how you got into software engineering?

I am Ivan Lemeshev, a software engineer at Unity in Helsinki, Finland. My journey to software engineering was quite long. I have always liked computers, and I have been keen on it. The first time I saw a computer was at the beginning of the '90s. I was about seven or eight when my elder brother brought a ZX Spectrum computer that used tape cassettes to load programs and TV as a monitor. Of course, I only played video games on it. Still, if I am correct, there was an interpreter of Basic programming language, but I managed only to print words on the screen. The next time I got access to computers was in high school.

I learned my first programming language and programmed some small programs. I even managed to program an emulation of the 3D cube rotating on the screen. It was like magic. Then, I took some computer science courses while studying at the university. I tried to program something but never thought I could become a professional software engineer. After graduating from university, I had no idea what I would do, so I worked in customer support at an Internet service provider company for some time.

One day, one of my colleagues said a software development company was looking for interns. I decided to give it a chance and applied for an internship. They sent me a technical task, and I finished it in a week. Finally, they invited me for the internship. I worked there for two months but was unsuccessful and did not get a permanent job offer. However, that experience gave me a lot of motivation to continue and not give up. Being very proactive, I found my first full-time job as a junior software engineer in a small company in two weeks and started developing as a software engineer. Despite having some computer classes at school and university, I am a self-taught software engineer because I learned most of the stuff I know myself. I mastered it by spending a lot of time taking online courses, practicing, and reading articles and books.

What do your day-to-day responsibilities look like at your organization?

I am in a team that develops and supports a bunch of microservices for our product, a massive and complex system. As a software engineer, my day-to-day responsibilities can vary depending on the specific project I am working on. When I have a task, I need time to understand what to do and design the solution. If required, I must design architecture and implement the solution by writing code, debugging, and testing it.

Besides that, I configure infrastructure, metrics, and alerts for our services, monitor the system performance, take part in resolving incidents, write documentation, and collaborate with team members.

What notable software engineering challenges have you overcome?

I have encountered many engineering challenges throughout my career. These challenges have ranged from the complexities of designing and implementing large-scale systems to debugging intricate bugs in distributed systems. For instance, I was responsible for debugging a large-scale distributed system plagued with performance issues for some requests. The system was composed of multiple microservices, and it took time to understand where the problem was. I carefully analyzed logs and system metrics to identify the root cause, but distributed tracing was the most useful here. When I checked the tracer data, I noticed some requests to our Bigtable storage had high latency.

Then, I saw the situation show up when incoming traffic to our system increased. I could not understand why it happened because Bigtable metrics showed no problems. I started discussing it with my teammates. One of them suggested checking the connection pool for the Bigtable client, and it turned out that was the cause. We used the default settings, and one service instance had just four connections to Bigtable, but the number of requests was about three thousand per second. It led to a situation where most requests had to wait in a queue while others used the connections. I increased the size of the connection pool, which eventually helped to fix the latency issue and stabilize the system.

What did you learn from these experiences?

Each challenge has allowed me to learn, grow, and develop my problem-solving skills. Overcoming these challenges has equipped me with the skills and experience to handle intricate software engineering tasks. I have learned to approach problems systematically, break down complex issues into manageable subtasks, and collaborate effectively with team members. The incident with Bigtable I described in the previous question showed me that the root cause can be found in the most unexpected places; I can't know everything and should ask for help when I am stuck on a problem. Teamwork can help in such difficult situations.

What inspires and energizes you within your work?

My work is inherently inspiring and energizing, fueled by the creative challenge of solving problems, the satisfaction of building something from the ground up, and the joy of seeing my work impact the lives of others. Also, learning new technologies and expanding my knowledge energizes me a lot. I like taking online courses, reading books, filling in my knowledge gaps, and learning new stuff. The more I learn, the more I realize how big computer science is, and there are so many exciting things.

What advice would you give to someone wishing to start their computer science career?

If you want to start your computer science career, be bold and do it. Develop strong programming fundamentals in one programming language. In general, it does not matter what language you choose. You need to know and understand the basic programming concepts. Then, you can easily switch to any other programming language if required. However, it is better to analyze the labor market where you plan to work, see what is in higher demand, and choose based on it.

Practice writing code regularly, build personal projects, and contribute to open-source projects if you are interested. Hands-on experience is invaluable, and it is the key. It will allow you to develop your problem-solving skills and coding proficiency. Explore computer science domains like web development, game development, system programming, cybersecurity, data science, and machine learning, and discover your areas of interest.

Remember to build a solid professional network. LinkedIn, local meetups, and conferences are the best places for that. Also, develop soft skills beyond coding, like communication, teamwork, and problem-solving, which are equally important. Stay curious, explore new technologies, and keep upskilling to remain relevant and competitive. Feel free to ask for help. When facing challenges, seek guidance from experienced mentors, colleagues, or online communities. Learning from others is an invaluable tool for growth and development. And enjoy the journey. It is worth the effort and will pay off.

What are some of your favorite programming languages and emerging technologies that you are enjoying working with currently?

At the moment, my favorite programming language is Golang. I use it in my work and doing pet projects. It is a simple programming language that fits well for developing cloud and network services, CLI (Command-line Interfaces) utilities, web development, and infrastructure tools. It has a fast compiler, an excellent standard library, and tooling for testing and profiling your code. It has built-in primitives, allowing you to write concurrent code for high-performance applications. I think concurrency is the only tricky part of the language, and it requires some time to master it if you do not have experience with concurrent programming. I think Golang is a great tool in the modern age of cloud-native applications.

How do you use log and metrics data to improve your workflow?

Log and metric data allow me to diagnose and troubleshoot problems, identify bottlenecks, optimize performance and resource usage, and monitor application health and stability. Looking into log data, I can identify patterns, anomalies, and potential causes of errors. Metrics data, such as response times, memory usage, and CPU utilization, help me understand how the system performs and notice problems if something is wrong. Different business metrics help us understand user behavior and usage patterns, which allows us to make data-driven decisions and prioritize work.

What book are you currently reading?

Currently, I am reading the third book of the Remembrance of Earth's Past trilogy by Liu Cixin. It is a compelling science fiction trilogy about people discovering an alien civilization and trying to prevent their invasion of Earth and uncover human nature, their strengths, weeks, and fears.

If we talk about technical books, the most recent book I have read is Designing Data-Intensive Applications by Martin Kleppmann. It is a fantastic book. I recommend reading that book for all software engineers, especially experienced ones, because it may be difficult for beginners. Reading this book may extend your knowledge and discover new insights into software engineering and building large-scale systems.

If you've enjoyed this article why not read our Interview with Software Engineer, Vivek Basavegowda Ramu or What is Data Governance next?

Get the latest elastic Stack & logging resources when you subscribe

© 2024 Ltd, All rights reserved.