He wants to know it all. Meet Szymek – a Tech Lead, Android and Web Developer
Android, iOS, web – Szymek tried it all and still wants to learn more. One day he was a team member and on another a leader of that team. Was it a difficult transition? Why Android development is so satisfying to him? What is the best way to convince a Java dev to switch to Kotlin? Find answers to all these questions. This is the story of Szymek – a Tech Lead of the Android Team at Bright Inventions.
You are an Android & Web Developer. How did that happen?
When I started my career I didn’t know which technology to choose. I just wanted to join the software development industry so I accepted the first job offer I got. As it happened, that was a fullstack position. Thus I had the opportunity to learn technologies such as Java, Spring, Angular, and Kotlin.
I call myself a software agency person. I only worked in agencies where you often switch from one project to another or work for a couple of clients at once. This gave me many opportunities to learn various languages, libraries, etc.
I guess I always wanted to explore as many aspects of programming as I possibly could. Knowing a lot of technologies gives me comprehensive knowledge about end-to-end implementation capabilities. I can choose between solutions more easily as I know a lot of options available for other platforms like web, backend, etc.
Apart from Java and Kotlin, I also programmed in Swift for a couple of months to have that experience. I also tried PHP but this was a one-sided friendship which I didn't reciprocate.
So I guess you studied Informatics?
Actually, I didn’t. 🙂 I studied Control Engineering at the Gdańsk University of Technology. I went to college exclusively to figure out what I wanted to do in life. As it turned out it wasn't Control Engineering after all. 😉
What was one of the first commercial projects you worked on?
There is one project I particularly remember because it involved AI which was definitely something unique for me – a junior developer at that time. It was an application for therapists which offered patients’ face mimics and emotion recognition during online sessions.
It was a great challenge to work on an AI project as a junior. Although there were libraries that helped us to develop it and the real challenge was something different. Our software had to be developed in a way it wouldn’t disturb the internet connection between a therapist and a patient. Let’s not forget that every end-user has different devices, various quality internet connections, etc. So we had to create software that would enable everyone to use our app. That was more challenging than building the face emotions recognition itself.
Eventually, you joined Bright Inventions. How did your and Bright paths cross?
Łukasz, who works at Bright, is my friend from college. He recommended me this place. After graduation, he went straight to Bright and I had a job somewhere else. Łukasz was talking all the time about how great it was at Bright so I eventually applied in 2018.
When I first came to the office for an interview I instantly felt this warm, cozy atmosphere. I knew it was something I desired. I got that job and started my work here by programming with React. Then I joined the Android team, but in the meantime, I tried Swift and Node.js. At this moment Android gives me the best satisfaction.
Why do you feel that way about Android development?
Because the effects of my work are tangible. I can grab my Android device and quickly check the results of the lines of code I have just written. And it is pretty useful on daily basis, not only at work. There were often situations when I couldn’t find a suitable app so I just wrote something for myself. For example, in college, I built my own flashcard app to improve my learning method.
Not only Android is satisfying like that. I feel the same about the front end (mobile and web as well). Simply because you can check out the UI changes you have made. You can simply click through them. The backend doesn’t work like that, it is not that easy to experience the results of your actions.
Now you are a tech lead of the Android team. What did your road from dev to lead look like?
Since the beginning of my career, I had a chance to learn many different technologies. Remember, I started as a fullstack, and learned Android, Swift, and even PHP on the way. I still didn’t feel like that was it for me. Even though Android gives me the most satisfaction I constantly look for other options.
So I couldn't say ‘no’ when the opportunity to become a tech lead came up. Before that, we had worked as a team without a tech lead but then the structure changed and we needed a tech leader. I figured I wanted to grow and find new things to learn so becoming a tech lead could give me a new perspective on programming from the management side.
One day you were a team member, another a tech lead. Was it challenging to establish yourself in the new role?
It wasn’t as problematic as you might think. My whole transition from a developer to a tech leader was a rather smooth one. It wasn't a drastic change made over a night. During the first 2-3 months my responsibilities were just starting to clarify. Meanwhile, the whole dynamics in the team were developing. In my view, everyone was adjusting slowly and with no pressure. That was the perfect way to do it.
What are your daily duties and responsibilities as a tech lead?
I start my workday by responding to every Slack message, Jira comment, and email. 😉 As soon as I get through all of that I can focus on managing current challenges in the project and taking care of the team productivity.
I spend some time coding and overlooking new features being released. Yet apart from delivering new features, my priority is to prevent bad decisions that could reduce the quality of the product. I am accountable for keeping a high quality of the app. I am also responsible for reducing technical debt and keeping the stack up-to-date.
An important part of my job is to establish the right duties for every developer within the team. So they feel responsible for specific areas. As a tech lead, I really need to know my team members well enough to get which areas of mobile development are their things, and which tasks will be of value to them and to the whole project. I mean all of us in the team have to develop our Android skills holistically. Yet in the end, everyone has some areas that are simply closer to their heart. Some enjoy UI test automation, another would rather focus on databases. So my job as a tech lead is to work out with every developer the best possible tasks for them. And if some task could be a challenge we might go for pair programming so two people could together work out some issues.
How does your team respond to that?
I work in a very mature team where everyone understands their responsibilities and is simply passionate about their job. I have to always stay up-to-date with the technologies but I also know that other team members also track every news, update, new library, etc. Android development is just a passion of ours.
We also have regular meetings at Bright for all Android devs where we do not talk about our projects but simply gather online to discuss new trends, and share experiences from recent tests of new libraries, features, etc. Every team member can propose improvements that would reduce technical debt and improve our project.
Is there anything more you have to take care of?
Moreover, as a tech lead, I have to create an environment for devs that guarantees time and space to do their job. 🙂 Usually, a programmer needs to focus on one task at a time to finish it effectively. They shouldn’t be distracted by messages, instant requests, and other random stuff.
I make sure that their workflow isn’t disturbed a lot. Business representatives know that in order to make the work smooth for everyone they should contact me and then I can work out any issue with developers in a way I don’t interfere with their other duties. Micromanagement is not our style. We are responsible human beings. Therefore we trust each other and don’t interfere with anyone’s way of work.
How many people are on your Android team?
At the moment I have 10 people on my team. We create an international group of people. Most of the developers are from Poland, but we also have devs from Israel and The Republic of South Africa.
You are a Kotlin enthusiast. What is the quickest way to convince Java developers to switch to Kotlin?
The easiest way to convince a Java dev to use Kotlin is to offer to buy them a beer on the condition that they spend an hour to code in Kotlin. They will quickly realize what pain was it to code in Java over these years. And will come back to me with gratitude and probably a beer bought for me. 🙂
On a more serious note, a great way is to show examples of differences between Java and Kotlin. Let me show you the code needed to create a “Pigeon” class in both languages:
Java
public class Pigeon {
String name;
String color;
public Pigeon(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pigeon pigeon = (Pigeon) o;
return Objects.equals(name, pigeon.name) && Objects.equals(color, pigeon.color);
}
@Override
public int hashCode() {
return Objects.hash(name, color);
}
@Override
public String toString() {
return "Pigeon{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
Kotlin
data class Pigeon(
val name: String,
val color: String
)
Can you see a difference? 😉
Your team works on the JET POS project. What product do you build?
We develop an Android Point of Sale system for the well-known Just Eat Takeaway.com brand. Our software is used by restaurant staff who interact with customers. We help cashiers, bartenders, waiters, and chefs every day with managing every aspect of the restaurant order: from taking it and securing the payment, through preparation to the delivery. Thanks to our software everything is automated so the cashier doesn’t have to worry about any aspect of the transaction, the system guides them through the whole process.
Our system is based on an Android application that is connected to devices such as tablets, payment terminals, and receipt printers. Our app has been used across Europe by restaurants in Great Britain, and the Netherlands. Working on JET POS is really rewarding and fulfilling.
Why? What is the best about working on this project?
The crucial fact is that you have an influence on the technology you use. If you want to code using new tech which will benefit the product, we will enable you to do it. If we want to change some stack we use, we just do it. You can improve yourself using well-known technology and learn something new at the same time during your work hours.
Another pron of this project is that we get to do UI tests. We use various frameworks and libraries which enable us to do tests. It is a perfect project for QA Engineers as well as Android devs who are into UI tests.
Direct communication with the client is also an important part of this work. And in my opinion – really a huge advantage. You have a chance to know new cultures because the client’s team is spread all around the world. You connect with people from various countries. Naturally, it speeds up soft skills development and improves English communication abilities.
Last but not least, you develop something that is used by real users. We have users across Europe. Our product is stable and crafted in a high-quality way. Our client has ambitious plans and we are happy to deliver tools to help them reach their business goals.
We are recruiting other Android devs to the Bright team. Who is a perfect candidate?
From my perspective as a tech lead, it is very important for mid and senior developers to have holistic experience in Android development. I don’t expect people to know everything. Naturally, every developer is more into different aspects of programming. Even seniors don’t know every possible library and don’t have knowledge of how to resolve every issue. Especially in the case of Android development where the technology grows fast and we have to keep up with so many different devices being introduced on the market. So no one knows everything.
However, Android dev should try to know as much it is possible from every side of mobile development. It’s not only writing UI. Working with backend solutions or processing data is crucial as well. You don’t have to know everything. Yet you should master the basics and possess the knowledge and experience that enables you to look for solutions more easily and helps you see multiple options. No matter if it is related to frontend, backend, and others.
What are your tips for Android devs who want to join Bright? How to prepare for the interview?
It is crucial to be up to date. Kotlin and other Android tools are developing really quickly. You need to absorb updates, news, etc. So I guess it cannot be only a job for you, it should be something that really excites you. If you see a new update or a new library, check it out, and have some fun with it. Show that this is more than work. I guess it should be a passion.
During an interview, I can sometimes see that some programmers write code but don’t understand what this code really does. They can write what is expected because they are able to find it in some tutorials. I believe you should do more than copy and paste. You should dive into, and explore it to understand how it works. Our job is to understand code, not only write it.
I have met developers with even a decade of experience on paper and all this time they were using the same libraries, and they were writing the same scripts all over again. Despite being in the industry for so many years, they didn’t know how their code worked. They just wrote it. And they didn’t have this hunger to evolve and grow along with the technologies. Spending time on learning is gonna save you more time in the future.
So years of practice don’t really matter after all?
Yes, as it turns out, years of experience aren’t crucial. More important is the commitment to self-development and product tech growth. And that is what we want to know about candidates when we talk to them during interviews. We want to know if they go way beyond the code they write. We want to make sure that they understand what it means.
I want to reassure you that our interviews aren’t exams. It is a conversation. As a Junior, I had a chance to experience these types of interviews where someone told me to write a pseudocode for a doubly linked list in front of everyone. That was a stressful experience. It might be considered basic knowledge, but frankly, this wasn't mandatory for work. It shows something about you indeed, but in my opinion, it does not reflect your developer capabilities. I'd rather hear how you'd encounter daily challenges than see how many complex algorithms you already know. You don't need to know everything as long as you're eager to learn and digest new things at a reasonable time. 😉
I treat interviews like a conversation. I ask about candidates’ experience and ways of handling some issues. Also, I want to know how they would approach some subjects according to the knowledge and tools they know and use. You don’t need to have the answers to everything but it’s nice if you can show us what would you do to get those answers.
I know that apart from work, sports are a huge part of your life. What are your favorite activities?
I love to play badminton, basketball, and tennis. I also enjoy running and going to the gym. I used to train minigolf a lot. I was even Polish champion twice. However, now I deal with an injury and all I can do is count the days before I go back to these workouts.
Apart from sports I really love traveling, especially by hitchhiking. I hope that in post-pandemic times we will get opportunities for traveling this way again. I traveled over 15k kilometers across the Czech Republic, Slovakia, Austria, Hungary, Croatia, Montenegro, Serbia, Bulgaria, and Italy. Hope to experience this again.