My name is Nataliia Horova, and I continue to share the inspiring stories of our teammates. In today’s story for the Growth Stories rubric, I want to introduce you to Dmytro Derzhevytskyi, an Advanced Software Engineer (Java), who joined Innovecs in 2016 to launch a project with a team. Later, Dmytro left the company but returned after one and a half years to embrace the Senior Software Engineer (Java) position.
In the interview, Dmytro shared valuable advice to developers based on his experience. How to be more productive at the start of careers in tech for Junior Specialists; why Middle Developers must learn Cloud and receive certifications; the direction for Advanced Engineers to move forward. He also highlighted necessary skills for Java Developers and recommended essential books that should always be on hand for Java Developers.
I got acquainted with the tech field when I was at school. I enrolled in Basic Programming courses at the House of Young Technicians. Initially, it was more like a hobby for me — I became interested in how people develop programs, operating systems, and games. Moreover, my friends, who were also passionate about computer technology, inspired me to delve deeper into this area. We even contemplated creating our own operating system, which, for sure, was unrealistic at the time.
After the 8th grade, I transferred to a school emphasizing computer science. We studied higher-level programming languages such as Turbo Pascal, Delphi, and even some C# in specially organized classes. We also learned graphic editors like Photoshop and CorelDRAW and Front-End technologies like JavaScript, HTML, and CSS. Interestingly, around 15 years ago, a programming language called ActionScript (FlashX) was gaining popularity, thanks to which people created all web animation in the 2000s. Of course, this technology is no longer in use today.
I received a degree at the National Technical University of Ukraine, “Kyiv Polytechnic Institute” (KPI), majoring in Faculty of Informatics and Software Engineering, Department of Technical Cybernetics. When finding a job, I encountered a well-known challenge — most employers want to hire someone with work experience, but where should a student or just graduate get an experience with enterprise systems? Fortunately, my Java SE/EE lecturer, who worked in tech, helped me. She invited all her students to apply for courses at the company she worked for, which later provided an opportunity to join real projects. That’s how I got my first job.
I joined Innovecs in 2016 as a Middle Java Developer when my friend suggested working together on launching a new project from scratch. In a team of four, we initiated a project that is still in the company and brings substantial profits to investors. We were in production in less than a year and started growing as a team. When I left Innovecs, around 16 people were working on the project.
I returned to Innovecs after 1.5 years when the company was looking for a Senior Developer for one of the projects. My friend, Dmytro Kryvenko, a Senior Architect at Innovecs, recommended me for that position, and fate brought me back to the company. Currently, I hold the position of Tech Lead and am evolving toward becoming a Solution Architect.
Innovecs has a fantastic atmosphere. I appreciate the opportunity for knowledge sharing within the company. For example, if you want to use new technology, you can approach developers from other teams that are already using it and discuss their experiences.
No matter what, it’s crucial to have an interest in exact sciences, an engineering mindset, and knowledge of discrete mathematics. It’s the foundation where everything begins.
A desire to learn and evolve. Technologies are growing incredibly fast, so it’s vital to make a habit of reading specialized resources and news.
Experience has shown that it’s crucial in modern tech to have imagination, the ability to generate and propose ideas, and a positive attitude toward new technologies. Mind activity is impossible without imagination. If you’re just a coder who simply follows the given directions, it will be difficult to progress further in your career.
Collaborate with the team. Today, every project consists of a group of closely interconnected people. It’s not merely a case of one or two individuals huddled in a garage, reminiscent of Steve Jobs and Steve Wozniak’s early days. Working in a team is very important, and you need to be able to work together to achieve goals and solve problems.
Possess and develop communication skills. The ability to communicate and convey your thoughts to the team and the client is essential for an engineer. You must effectively express your ideas both in written and spoken form.
Effective management of your time and maintaining a well-being balance. Your productivity and efficiency depend on how you manage your time. Generally, on most projects, we prioritize our work as follows: first, we resolve production-related tasks. Next, we dedicate time to daily tasks such as writing new features. Less priority is given to minor technical tasks, such as process improvements and resolving technical debt. In our project, Scrum Master is responsible for it, but on smaller projects, Team Lead usually takes care of this. In addition to adequately allocating your work time, it’s important to balance work and personal life. Avoiding overtime is necessary, as it can quickly lead to burnout.
Adaptability. When processes change, such as how we conduct code reviews or deploy to production, you should quickly analyze the changes and adapt them to your work.
You must develop leadership skills if you have ambitions and aspirations about advancing to positions like Team Lead, Solution Architect, CTO, or CEO. For example, managing, directing, and motivating your team. The leader must conduct one-on-one meetings, resolve conflicts and disputes, and be able to take responsibility.
From a hard skills perspective, a Junior Java Developer should learn one of the most popular programming languages they want to work with, e.g., Java, C#, JavaScript, or others. However, simply knowing the language is not enough in today’s world, so it’s important to learn the Spring Framework and Hibernate. And, of course, understanding how the Git version control system works.
A Middle Java Developer should polish these skills and be able to use them independently or with the help of Senior developers. At this stage, it’s crucial to start learning Cloud technologies, regardless of the specific provider — Amazon AWS, Microsoft Azure, Google Cloud, or Oracle Cloud.
By the way, Cloud certifications play a significant role in career growth and increasing your value as an engineer. It’s worth mentioning that certificates are now valid for only one year, not two, due to the rapid pace of technological changes. The Cloud has become an essential part of operations, and you need to know what to offer clients at any moment. Storing data in the Cloud has several advantages over storing it on a physical server, such as data replication, backups, and lower costs.
A Senior Java Developer is an experienced developer who can independently analyze and execute tasks and may also substitute a Team Lead when necessary.
For an Advanced Java Developer growth, a specialist must decide which direction to pursue — Tech Lead, Architect, or Manager — and enhance their leadership or architectural skills accordingly; be able to develop technical requirements for future tasks and present ideas to clients.
Creating an action plan and following it is crucial for successful career development. To become a Solution Architect, I plan to take the AWS Certified Solutions Architect Associate 2023 exam and read the book “Clean Architecture” by Robert Martin, also known as Uncle Bob. I would recommend this book even for Juniors. Even if you don’t understand much initially, you will gradually gain more insights by rereading books of this kind.
Here are the TOP-5 books that I recommend every Java Developer to read:
These books are considered essential and can be read from scratch. Purchase them in their original printed format to have constant accessibility.
In order to stay informed about the current happenings in the tech field, it is essential to browse relevant websites. I highly recommend DZone, dev.to, and Medium; that’s where I find the latest information and ideas. Just make it a habit to read articles and tech-related news on these websites every morning. Moreover, reading specialized content in its original form improves your English skills.
Before the quarantine, I used to attend a conference that I highly recommend for Java Developers — Java Day, which lasts for 2-3 days. The organizers always invite top-notch speakers, so the time spent among Java specialists will be beneficial.
In any field, it’s important to constantly develop and strive for the best, as it’s an ongoing process. Be ready to learn something new because technologies don’t stand still, and the world changes rapidly. You need to be flexible and adapt to changes.
Take, for instance, the emergence of ChatGPT. It’s like an assistant that helps me save time on routine tasks and enables me to concentrate on tasks of higher value and strategic importance. This highlights the significance of embracing new technologies when they arise; otherwise, you can fall behind in progress and lose your attractiveness in the market.
If you feel continually undervalued on a project, it doesn’t mean the problem lies with you but rather with the management. You need to realistically evaluate your skills and, if necessary, consider changing jobs. Working where the team and company value you as a specialist is crucial, which accelerates your development and helps avoid impostor syndrome.
But honestly, it is important to acknowledge that impostor syndrome is a common experience for many individuals, and it’s normal. My advice is to believe in yourself and proactively seek knowledge in areas where you feel uncertain. If there are some knowledge gaps, you can read relevant books and find informative articles and educational videos to bridge those gaps.
When you encounter burnout, you need to organize your work schedule and limit your available hours for work-related matters. Spend more time with your family or loved ones or even enjoy solitude, depending on what makes you more comfortable. It also helps to shift mental activity to physical one. If you have hobbies, they can prevent burnout. For example, jogging, working out or even cross-stitching.
In conclusion, my final recommendation is to step out of your comfort zone and constantly strive for personal growth. Enjoy your work, acknowledge and celebrate your achievements, and embrace new challenges.
I want to thank Dmytro for this exciting conversation filled with insights. I’m confident that every Java Developer gained valuable knowledge from our discussion, which they can readily implement on their career journey.