Pour some coffee, put on some relaxing music and join us for the fifth episode of The Hüb where Vladimir Tomić shares the valuable experience he obtained while working as Java Software Engineer at Zühlke.
How do you start working for a large client?
Working for a large client at Zühlke was a tad intimidating at first, especially coming from another big company whose processes and the overall organization didn’t always suit me. But I was in for a pleasant surprise.
The application I worked on is made of three parts, one is for our client’s end users, the second for customer support operators, and the third for the salespeople. So these are connected but are also separate entities. Mastering one of them doesn't guarantee you will be great at the others.
First of all, the team members were supportive, which was important for me as I was a junior. Starting was easy, but the system and the apps were complex. The lines of code are measured in millions.
What helped most was the organization of the project itself and the team. When a new person is introduced, regardless of their seniority level, there is always an onboarding procedure and delegated tasks for team members. For example, I might demonstrate CI/CD to you, another team member will let you know about the logistics, and someone third might show you Front End.
There was even a precise hour-by-hour schedule for the first few days. When I started I even had an onboarding procedure in Zürich with other teams who are working on the project. This was a great chance to meet people in person so further communication was not that complicated. In times where traveling isn't that easy, we invest a lot of effort and time into remote onboarding to get the same results.
Furthermore, you can utilize the first few weeks on the job to find your footing. Starting with easier tasks and working alongside colleagues until you are ready to take on more serious ones gives a certain freedom in getting to know the project. This kind of work organization and approach to new team members were most helpful for me.
What is the value of Pair Programming and Code Review?
Pair Programming is an excellent practice that most companies don’t take the time to do. We are mostly fully booked and can rarely afford two people working together on one thing. But if we are talking about a newcomer, then it makes sense to do it, because it will help the person become independent in his or her work faster.
Code Review is a must when it comes to code quality. A member of another team is more likely to spot an oversight, which is great when you think of Security and Data Protection. Code Review became mandatory and we started paying special attention to it a few years ago when we brought in new technologies and organized Microservices within the project. We also have a person from another team performing the Code Review, so a new member gets to know a little more each time about every module we work on. It’s a very good practice because you never know if someone might leave the project or if different project teams will swap members.
How can Microservices improve software development?
To go a step back, when I started working on the project, it was a monolith that created endless amounts of hours lost on back and forth feedback. We decided to break that monolith down into several small pieces which made the development drastically faster. Then came “the new world” last year, with all the new technologies where we have Microservices.
Development is made easier because everything is logically compartmentalized, and I can easily locate any part of the application in the code to develop it further. Of all the project phases I mentioned, this is by far the best, but we have a few more things to learn. What also adds value is that you use things you can easily find on Google or Stack Overflow. It wasn’t the case before, because the majority of software solutions or patterns were developed in-house. Having a well-known source with a large community makes any problem easier to solve
What does a Security Champion do?
A Security Champion is a role formed about two years ago with the goal to pay more resources and attention to Security topics in projects. This is how it came about that every team has a designated Security Champion, who is in charge of coordination with the security team of the client’s company. It was an interesting position and I thought I’d give it a shot and learn something new.
There are several tasks a Security Champion currently does on this project. The first is a huge project, actually a subproject that protects all the URL links in an application we are working on. What does that mean? If a URL contains a name, surname, phone number, or ID, it is considered sensitive data that can be misused by someone. Our task is to encode those links into one ID that gives out no particular information and hides the sensitive data. It’s something that is done by around ten teams for over a year – it’s a huge task.
The other thing we do is secure all the services and endpoints in the new infrastructure, and make it clear which privileges are needed to perform certain actions. It is an ongoing process, and we are yet to find an optimal solution.
The final step is to keep a high level of security awareness in the whole team, to exchange valuable information regarding security, and to notify the team on important matters. Of course, a Security Champion needs to be included in the process of Code Review whenever sensitive data is being handled, like phone numbers and addresses.
What is Solution Design?
Solution Design is handled by a person who communicates with clients and translates their requests into a technical language all the team members understand and can implement further.
For example, we get a request from a client for a certain functionality. To migrate things from system A to B or from B to C. My job is to first have a sit-down with the client to learn what their request is in the simplest language possible, after which I analyze the current status of the system, code, and application to learn how it functions and which elements require change or adaptation. My goal is for my colleagues to be able to immediately start coding after reading the story and to have a clear grasp of the logic, external systems, and the final solution. I had a colleague in Solution Design who wrote phenomenal stories with such clarity that even someone who wasn’t a developer would be able to get to grips with it. He is definitely my role model when it comes to this.
How do you acquire knowledge outside work?
The first step I made when it came to Solution Design was sharing my interest with my colleagues, and I got so much useful advice as a result. As for obtaining new knowledge, it’s the same as with other jobs or any new skill – you have to put some time aside for it. I learn about specific technical skills outside the job frame in order to improve them, understand a certain technology better, and pass that knowledge on to a team member. When it comes to soft skills, I believe active listening and asking questions is most important, that’s why I always insist on getting a clear list of demands from the clients and their criteria, so that we can avoid any misunderstandings.
One more thing I do outside the job is learning German. We work for a client from a German-speaking region, that's how I got in touch with the language and I found it exciting. My goal is to once master the language to business level.
How do you inspire others who are curious about your field of work?
Inspiring young talent is indeed a matter of the heart for me. I believe we are a great company when it comes to interpersonal relationships, work environment, and support for our staff. I really value that and want to be able to pass it on to others all the way through my career.
The first two days in the company were emotionally hard for me because it coincided with a job fair, which I had organized for a long time and I couldn't attend for the first time in years. But I was able to go next year and meet all the people I had cooperated with – representing my company! I lost my voice after two days because I talked to so many students about the projects we do, our benefits, and technologies. It was clear that our presence left a good impression on people since there were several people who came for an interview with us after speaking to us. One of them even said that I was able to give him a good image of the company, which is why he applied for the job. I must say I enjoy presenting the company this way and leaving a good impression on potential new talents.
Vladimir Tomic is a software engineer, working for Zühlke since November 2016. Since February 2017 he has been working on a project for a large Swiss customer, where he had the opportunity to take many different responsibilities - as a software developer, security champion, solution designer, and more.
After working hours, he spends his time mainly by doing photography, playing keyboards and chess. He also works on improving his German language skills and he loves coffee and chocolate.