What kind of companies can you work for as a software developer? How can you evolve throughout your career? What are the skills you need to fit into any work environment? <p>Pour some coffee, put on some relaxing music and join us for the third episode of The HüB where Katarina Marković shares the valuable experience she obtained while working as Full Stack developer at Zühlke.</p>
What types of software companies can you work for?
If we look at the big picture, software is there to solve problems and bring value to a business. My experience includes working in companies where software development is not the main business, but also in companies that focus only on software development, whether developing their own product or as a service provider.
When working in a company whose focus is not on software development, your role is to contribute to its overall growth. The IT department is only one piece of the puzzle, and not the most important one in the company, but it is the best place to learn about the company’s business domain and processes.
In a company that develops its own product, you are inclined to think about all the possible clients and their various needs, and about the options you can offer to satisfy them. You have to be focused on quality and user friendliness, and on making sure to develop virtually bug-free software, since someone is paying for a well-finished product. You will probably come to identify with the product and feel a strong sense of ownership, but for some people, working on one product for many years can become monotonous, especially since in IT there are always new trends and technologies out there.
When working as a service provider, it is the client who decides whether to accept imperfect solutions to save costs. You also take on the culture of your software company, act as a consultant and work closely with the client. Then it really depends on what the project is about, sometimes you can be deeply involved in a client’s business, and at others you will become familiar with only one specific segment of the problem.
If you are a developer who is focused on coding and is less concerned with the wider scale of the business or organization, those differences are less noticeable or important. The common feature of all three types of software company is that you will write your code based on the requirements you are given.
How can you stay motivated as a software developer?
It is important to realize what motivates you most. Is it brand new technology, learning new tech stacks, creating something new and innovative, making someone’s life easier, a good team atmosphere, communication with clients or learning about the domain? There are so many aspects you can be motivated by, so you should search for an environment that can enable at least some of them. It is also important to have the courage to say openly when you don’t like to do something, and to ask to do something that you like, since software development is a wide field that offers so many different options.
There are many possibilities: different software products, business cases to be solved, different team setups and corporate cultures – I am sure that everyone can find something that works best for them.
Creating a high-performing team is not easy. On the one hand you have to put together people with the right skill sets, but on the other you have to take all their personal motivations into account. Matching personality types in a team would give a huge advantage, but that is another topic.
What is unique about full stack development?
Some companies split front-end and back-end positions. The front end have to think about visual effects, different screen sizes, browsers, state management, UI components etc. Back-end developers “live” in the cloud or beside the server, they write APIs, most of the business logic, connections to external systems like databases, file systems, other applications and so on. The full stack developer covers both sides. The full stack developer can contribute to every part of the application, to set the architecture of the whole project, but the disadvantage is that he will have less knowledge about a given topic than a specialist.
It is difficult to be an expert in every field. In my current company we all try to be experts in our own chosen area, but to have experience and to be able to cover a lot of others.
Let me illustrate full-stack engagement using a recent project I completed in an IoT field. It was about digitalization of some machines that do field work. We had to connect sensors with the software that runs on an IPC (industrial PC) and sends data to the cloud. Since there might be no internet connection during field work, this also needed to be covered. In the cloud, data was aggregated and stored for further analysis and displayed in many different screen sizes. There were a lot of technologies involved and a lot of different problems to solve.
A full-stack developer has to have all these aspects in mind when working towards a solution, while a front-end or back-end developer has to think only about their part of the problem.
Is the technology market oversaturated?
There are plenty of technologies that come and go. Some make it through, and many do not gather a large enough community to survive. You may think that I have wasted time working in Aurelia, which I will never use again. However, concepts are what remain beyond technology.
So, when you know the basics and the concepts, it is easier to switch between technologies. That is why I would advise people to focus on concepts, not on technology itself.
How can you evolve as a developer?
I obtain new knowledge through the internet, video courses, attending workshops and training. I also learn a lot from other team members while working on a project. Every person has his own way of learning. It also depends on what you are interested in, for some skills you need a book to read, while for others you can only learn through experience.
Different types of product from different industries and companies provide you with an opportunity to learn not only about technology, but about team organization and culture, agility, product lifecycle etc. That is why the kind of project you work on is important, since every project can bring you different knowledge. For example, projects for some old-fashioned companies require more effort to make them agile and follow the scrum process, but that gives you a unique opportunity to experience that transformation.
While working as a developer, you have to know a lot about the problem you are solving, so if you want to, you can become an expert in that area later, and continue your career as a business analyst in that specific field. You can also evolve in any other role like team leader, software architect, scrum master, project manager.
What skill set do you need to work in a modern software environment?
Besides strong tech skills, you also need a lot of soft skills to be successful. Software is developed by people and for people, that is why communication is the key factor. Working is always easier when the team atmosphere is pleasant. You also need to develop presentation skills because you often present your work to the client.
Agility requires you to react quickly to changes and to continuously notify the team of changes, give feedback on processes etc. You need to be skilled at giving feedback, both on process and content. At Zühlke, we see feedback as a chance to grow and bring awareness about something we would like to change.
It is not easy to give and to accept feedback, especially when it appears to be negative. People are different, and those who give feedback must decide in which situation to give it and when it can be useful. It should always be factual and well-intended. It should never criticize personality, only behavior. You must focus on the good points first, and then on the things that need improvement. This way, the person is encouraged and sees it as an opportunity for growth, instead of as an uncomfortable experience.
Katarina Markovic is full-stack developer and since November 2017 at Zühlke. Her main area of expertise includes working in .NET, Angular and SQL Server, and she has experience in React.js and in Aurelia. She worked in many projects and domains, including banking, telecommunications, IoT and health. Her passion is creating software that will make people's life or work easier.