
The rise of open source has dramatically accelerated the spread and evolution of technology. Popular tools often gather tens of thousands of downloads and are used in numerous projects – driving innovation forward. Vadym Semeniuk, a Senior Software Engineer at Amdocs and an expert in high-load systems, has developed several widely used tools that optimize the development process. In this interview, he shares how he chooses what to build and what trends are currently shaping the open source landscape.
Vadym, tell us a bit about your background. What led you to develop tools for optimizing development processes?
I’ve always been interested in high-load systems, and throughout my career, I’ve sought out such challenges. To make my work more efficient, I started building tools that would simplify and streamline routine tasks – allowing me to focus on the more interesting and impactful aspects of engineering.
At first, I created these tools for my own use. Then I started sharing them with colleagues and friends, eventually publishing them as open source. To my surprise, they gained traction. For instance, each of my two PHP libraries published on Packagist has now been installed over 37,000 times:
- Yii2 Many-to-Many AR Level Save Behavior – streamlines the handling of complex many-to-many relationships in databases.
- Yii2 File Processor Module on Packagist – simplifies data upload and processing on websites.
Why did database interaction, in particular, require a dedicated solution?
That tool was created early in my career when I worked in the engineering department of a web agency. We frequently handled projects for large corporations, and even won awards for our design work – so the challenges were both interesting and complex.
I noticed that I was spending a lot of time dealing with many-to-many relationships in databases and decided to create a solution to simplify that process.
Let me explain this relationship in more detail. Imagine a company with departments and employees. Each employee can belong to multiple departments, and each department can have multiple employees. That’s a classic many-to-many relationship. Representing this in code typically requires a lot of custom logic. Even a small mistake can result in excessive, unnecessary queries and performance issues.
So, I built a tool that would accelerate development, provide stable and predictable results, and help avoid bugs. Once I implemented it in my own projects, other developers started using it as well. To make it easier for colleagues to access, I made it public – and soon enough, I saw that tens of thousands of people had downloaded it. That’s when I realized it was genuinely useful to a wide range of developers.
Later, I developed another library to streamline data uploads and processing on websites, which also gained tens of thousands of installations.
Tell us more about your Docker image for local development. How does it improve the workflow, and what are its key features?
At my first job in a web studio, each new project began with the same problem: setting up the development environment. We needed to configure specific PHP versions, databases, plugins, and so on. Often we were working on several projects simultaneously, and switching between their environments on one machine was both frustrating and inefficient.
That’s why I created a Docker image – so that developers wouldn’t have to install the entire stack locally for every project. Instead, they could use a pre-configured image. This significantly sped up onboarding and allowed seamless switching between different projects.
Initially, this Docker image existed only on my local machine. But eventually, I published it in a public repository. Today, it has been downloaded around 500,000 times.
Your experience spans various technologies and tools, from PHP and Docker to JavaScript. How do you decide which problems to tackle when creating new tools or libraries?
I base my decisions on both my own experience and the input of colleagues. I always look at whether a process can be optimized—made faster or simpler. Most developers face the same types of challenges, so the tools I create tend to resonate broadly.
I believe my success with popular tools comes from a combination of experience and time. Often, junior developers are passionate about solving inefficiencies but simply lack the skills to implement solutions. On the flip side, senior engineers might have great ideas but lack the time to build them.
I was lucky: I had the skills and was able to carve out time to develop tools that not only helped me in my day-to-day work but also became valuable assets for thousands of fellow developers.
How do you view the current state of the open source ecosystem for development optimization tools? What trends do you find most promising?
Overall, I think the open source ecosystem is in good shape. Of course, there’s a lot of so-called “noise” – projects where developers don’t quite know what they’re trying to achieve. But there’s also a tremendous number of highly useful utilities, libraries, fully-fledged frameworks, and even entire databases available.
Some large tech companies are actively supporting open source initiatives. In fact, many have dedicated teams that create and maintain public projects. High-quality open source tools not only advance the tech community but also serve as powerful PR assets for the companies behind them.
As for current trends, many projects are focused on automating and simplifying specific DevOps tasks. Nobody wants to waste time on repetitive, manual steps – so tools that address this pain point are likely to remain highly relevant.
What advice would you give to aspiring developers who want to contribute to open source or create their own libraries?
Start with a specific problem that you clearly understand. Try building something that will make your own life or work easier. When you feel the pain yourself, you can act as your own focus group – testing solutions, refining features, and identifying real needs.
I also recommend publishing your tool as soon as it’s functional. The sooner other developers can start using it and providing feedback, the quicker you’ll discover flaws and find ways to improve it.
And most importantly: don’t abandon your project after launch. Even if you’re busy, try to find time to fix bugs and release small updates. That’s how you make a lasting contribution to the global open source community.