Buzzvil Career contains interviews of our team leaders to be clear on what we are looking for in job candidates so they can get an idea if we are a good fit for them. Opened job positions are listed here.
This article covers the job focused interview with CTO Zune. We’ve discussed about what it takes to become a good software engineer. Those who would like to become an excellent developer, please pay attention to this article.
Please describe the role of a Software Engineer.
At Buzzvil, we are involved in a wide range of services, from those interacting directly with the user, such as our app HoneyScreen, to B2B platform services like BuzzScreen. Since I am part of the BuzzAd team, which deals with advertisements, I will define the job scope of a software engineer through the capacities required of this role.
# Ad Serving Engine
Ad serving engines are key components of large conglomerates. For example, a signification portion of Google and Facebook’s revenue comes from ads. At Buzzvil, we serve ads directed not only at consumers through HoneyScreen, but also to various partners (businesses). The effectiveness of advertisement changes dramatically based on what ad is shown to what user. Ad efficiency is directly related to a company’s revenue. This is why specialized target marketing is very important. There are many things we can to do create an effective ad serving engine. This includes simple targeting by age/region/gender to highly specialized targeting made possible by machine learning.
# Linking With Other Ad Networks
Although we can feature the ads we have available through our own platform, there are already many established businesses in the mobile advertising ecosystem. Considering this fact, we made it possible to programmatically bring ads from different platforms and to send our ads to others. This system makes it possible to buy and sell ads like stocks on the stock market. To create such a service, a great number of existing ad networks had to be linked, and we had to collaborate with developers from all over the world to link ad networks in South Korea and overseas. The efficiency of this interconnected system always changes depending on various factors, so a technology for maximizing revenue had to be created. Such systems come to fruition starting with the creation of mediation logic that predicts the most effective ad network, and then the logic for how this program will determine the ad that will be shown on each network.
# Microservice Architecture
Buzzvil runs all of its platforms on AWS. We operate more than ten micro services created using Python (which makes of more than 70% of Buzzvil’s code), Go, Java, Node.js, and various other languages. I believe the services we operate today are still too generalized. Our goal is to divide the existing services into 20, 30, or even more specialized services. In order to achieve this goal, we are in the process of making it easier to create and operate small services. We are at the precipice of great change. We now use Docker, have implemented Kubernetes, and use Spinnaker to implement CI/CD. We continue to deliberate the best structures we can use, as well as the best ways to split our services.
# Content Platform
Buzzvil’s Lockscreen shows engaging content along with ads. We are currently in the middle of a project that makes it possible for users to interact with our content more intuitively by implementing a new feed-style layout similar to Facebook’s on their Lockscreen. To make this possible, we need to create a system that automatically gathers meaningful content from all around the world and a system that makes recommendations based on each user’s preference. The Lockscreen is the first screen any user sees before visiting Facebook, Naver, or Daum. If we are able to engage the user through effective content, I believe we will be among the biggest content platforms.
# HoneyScreen & Slidejoy
HoneyScreen and Slidejoy are B2C Lockscreen applications created and operated by Buzzvil. We can try out bold and creative ideas on HoneyScreen and Slidejoy as they are B2C, not B2B like the platform services mentioned earlier. To try out new ideas, each software engineer must be responsible for and consider how to improve our services from initial development to A/B testing.
Why did you start Buzzvil?
I first met Buzzvil’s co-CEO Young in high school. Our paths continued to overlap, and we ended up going to the same university. I came to found this company with Young, who wanted to start an IT business from his student days. I think I was Young’s only developer friend. (Laughs) And just like that, I started Buzzvil as the co-founder. I will always be grateful for Buzzvil because I grew along with the company. I don’t think there is anyone who wouldn’t be surprised to hear the amount of money I have spent on AWS. Of course, these were necessary costs to set up the infrastructure of our company. Starting with AWS, I have continued to gain valuable experiences in development, company culture, organizational structure, crisis management, and more. These reasons are among the factors that have enabled me to continue without pause at Buzzvil.
What’s it like to work at Buzzvil?
# A Place with Passion and Exceptional Skill
I believe the people you are surrounded by and the environment you are exposed to every day has a direct impact on your growth. A batter who is used to hitting only 140 kph pitches will struggle to hit a ball coming at 160 kph. I believe there are many individuals who can throw 160 kph pitches at Buzzvil and more. If the people you work with are exceptional, I believe it is only natural that your standards and level of effort rise to match them. Additionally, Buzzvil’s company culture encourages the growth of every individual. This is because people are our greatest asset. I believe the growth of individuals will bring positive outcomes for our company.
# A Place with an Accepting Culture
The development team always searches for new ways to work more efficiently. Docker, Kubernetes, and Go are all technologies that we came to use as ideas proposed by our developers. People and companies can always improve. At Buzzvil, we help individuals proactively seek growth and change. Buzzvil is a great place to experience growth because we always strive to create a culture accepting of change.
I once thought that I preferred to be led rather than to lead. Before coming to Buzzvil, I had never taken on an important role as a leader. The only position similar position I had was as sub-captain of my university’s boxing club. But now with the Buzzvil’s company culture / Buzzvil’s growth and self-development encouraging company culture, I find myself growing and changing as well. Although I’m not sure how good I am, I have to offer criticism, conduct evaluations, and engage in serious conversations. And to think I was far from being a serious person… (Laughs) After becoming a leader at Buzzvil, I became proactive, so I view this change positively.
What’s the team like?
Buzzvil has come to own a diverse Product Suite through our company’s growth. Each engineer is part of a mission team (Note, each mission team is composed of members with the various skills necessary for their product/mission). Each team has one mission, and they work on their tasks independently without having to relying on any other team.
There are also function teams that were created for a different purpose than mission teams. For example, server developers in different mission teams are also part of a function team called a server team. Function teams exist to guarantee mission teams produce high quality work. This is done through sharing technical knowledge and engaging in discussions within different function teams. Additionally, each person spends 30% of their time in function teams doing maintenance tasks put aside working for the mission team. Tasks such as improving overall structure, refactoring, unit test creation, and documentation are part of maintenance.
Because all major projects are carried out through mission teams, our developers interact with a wider variety of people than developers in other companies. Beyond team missions, our company also offers various clubs and study groups so different individuals can interact with one another. At conglomerates, most people only know their teammates, but at Buzzvil, things are quite different.
Not much time has passed since we started working with the mission team system. Each mission team is designed to work autonomously and efficiently like a small startup. From time to time, I reflect on what it was like in Buzzvil’s early days. If I feel that the team atmosphere is different from then, I consider what the best methods are to improve it. We are already a company with over 80 employees, but I believe our team atmosphere is still the same as a small startup’s.
What makes a good software engineer?
# A Developer Good At Structuring Projects
What is a good structure? There is so much to consider when responding to this question that it is hard to say my ideal structure can be the answer. But one thing is for sure. If a good structure is implemented to a program, it will be possible to maintain our normal development speed while responding to the business needs that change at a faster pace than I ever expected. For teams like ours that develop apps available to the public, great structure is even more crucial than it is for research teams. To create great structure, we must continue to think about what structure will best fit the project at hand, and find unoptimized parts of code to refactor. The main skill all developers good at structuring share is that they can intuitively find the best structure to implement in a given situation, instead of creating solutions in the context of one design pattern. These developers have moved beyond theoretical understanding, and they have the knowledge and experience necessary to implement different design patterns. I believe this skill comes from working with different design patterns until it becomes a natural response to find great solutions.
# A Logical Developer
They say developers spend 75% of their time debugging. If we define debugging to include performance issues that go beyond finding simple bugs, I don’t think this is an incorrect statement. I believe logical thinking is essential to solving these problems. Situations like the following one below occur from time to time. A sudden performance issue has occurred, and a new update that seems related to this problem was released. At first glance, it may seem like the problem was caused by the new update, but this reaction has been proven wrong many times before. When such a problem occurs, many developers who lack logical thinking skills conclude that the update was responsible for the issue. Only after wasting many days will the developer realize the problem came from somewhere else. Whatever the problem may be, if there is something illogical in your initial reasoning, you must step back and consider all the possible options. It will be icing on the cake if a developer has the tenacity and perseverance to solve a problem.
# A Developer Who Seeks Perfection
The ‘perfection’ discussed here does not indicate perfect specification. Even if we could create the perfect specification, if this process takes a year, we have to ask if the trade-off is worth it. But when specifications are set, developers must strive to realize them. Thinking “Well, we won’t have to go that far,” there have been times when we skipped over small details. This mentality led to many problems arising in the ‘small details’ that were overlooked. In other cases, there have been instances where an ‘easy fix’ was released without testing, creating the need for a patch to be developed. Some think the characteristics described here are not related to perfect programming skills. Even if programmers are capable of creating complex algorithms and flexible structures, if they make careless mistakes because of their overconfidence, I do not believe this is an acceptable trade-off. Let’s think of an archer who has won a gold medal at the Olympics. There could be many other athletes who possess comparable skills, but I believe the person who becomes the world’s best in a field is someone who demonstrates excellent skills without making mistakes. Our environment is much better than that of archers. Unlike them, we don’t have the high-stakes pressure of being eliminated due to a single mistake after four years of preparation. Truthfully, making a few mistakes is not cause to panic. The most important thing is to completely embrace the attitude necessary to become the best developer. Additionally, I believe it will be beneficial to seek to create beautiful and perfect code whose every line written is with a clear purpose.
# A Developer Who Digs Deep and Continues to Learn
Two programmers have started to use MySQL for the first time. One of them only needs to know SQL queries, so his studies stop after the essential information is learned. Unless the service has a performance issue, there will probably be no big problem. The other developer delves deeper. After learning MySQL and developing the necessary program, our developer begins to wonder what would happen if the number of users increase. This information is not necessary at the moment, but searching for optimization methods, our developer learns about indexes. Then, our developer comes across an article discussing performance increases when the transaction isolation level is changed, and studies transaction in depth to gain a deeper understanding. Our developer then hears that NoSQL has great performance and looks into the best use cases for NoSQL. Searching for this, our developer also ends up learning CAP theorem. After studying various topics like this, our developer has become someone who is not only good at MySQL, but has also become an individual with a higher level understanding of databases in general. The biggest difference between these two developers is their speed of growth. The first developer will grow slowly unless there is someone to teach him each step of the way. This developer will only start studying a new concept when a problem arises. But the second developer will continue to go quickly even without a guide.
# Final Words
If you ask me if I have all the qualities of a great developer, I would have to answer that I am not there yet. I wrote this piece with thoughts of how I would like to be this type of developer and would acknowledge a developer with these characteristics as a great developer. I reflected upon myself as I wrote this. I’ll do my best going forward~^^
What positions are opened now? (As of Feb. 2019)
We are currently looking for Android, Server, Web Front-end Developers and more!