Projects
In this page you'll be able to read a bit more about my projects and the technologies I've used. Of course, I can't reasonably describe all of them here, but i hope that I'll manage to list most of the interesting ones here! Also, please note that many of these projects have been developed in an enterprise setting where the clients were rather strict in regards to security. Because of this, text and logos might be replaced with random pixels and color schemes removed. This is done to ensure that you get an idea of the complexity of the UI, without giving away the particular clients in question.
Thousands of aggregated blog posts for you to read!
More information
Turns out that you can do a lot with feeds like RSS, if you know where to source the data! The users of the popular Hacker News technology enthusiast site shared links to their personal blogs and someone was kind enough to aggregate links to the corresponding RSS/Atom feeds where possible in a list. So of course I had to put that list to a good use!
The type of system where good performance is a must, with no leeway!
More information
This was one of the more recent systems that I worked on in the org and one that caused quite a few challenges along the way. The idea behind it was that not only would it integrate with the other systems that were being developed, for scheduling auctions, but it would also provide real time auctions for hundreds of users.
It was time to bring the sales platform into the current decade!
More information
Having the AngularJS EOL looming over the project's head was slightly concerning, however this also proved to be a great opportunity to rewrite it in more modern technologies! Notably, Vue, which had already been used previously in another few projects, alongside the features provided by the latest versions, such as the Composition API, which is in some ways nicer to use than React hooks, as well as state management solutions as Pinia and PrimeVue for ready made components.
A public platform for conducting B2B sales for one of the clients.
More information
Here's a sales platform that was meant to introduce a certain amount of self-service functionality to conducting B2B transactions. The idea behind it was that it'd integrate with the aforementioned ERP/CRM system and would allow business partners of a given org to sign up for certain sales processes that were conducted, as well as review terms and rules, submit the necessary documents to allow their participation, as well as choose the services and goods that they're interested in.
One of the larger multi-year projects, close to half a million lines of code!
More information
This was a rather complicated system for one of the clients, which involved work over multiple years, both on the continued maintenance of the system, as well as developing entirely new modules for it altogether. While many companies out there might attempt to customize an existing system for their needs, like Oodoo for example, there's also lots of value in doing the opposite - making the system adapt to your business and its needs, fully.
Despite being a developer at heart, I also have some experience in leading technical interviews.
More information
I've occasionally been asked to participate in the hiring process and help out the technical interviews for candidates who'd like to work at the organization. While there are many approaches to hiring, I think that both reviewing take home tasks and taking part in real time interviews are both good approaches.
I decided to make a polite guide about asynchronous communication.
More information
It's important to respect others' time, especially when working remotely. Especially in our line of work, where context switching will slow us down and decrease our productivity, where frequent interruptions will often prevent us from getting things done as quickly as we otherwise would.
Google Fonts is nice, but what about downloadable fonts for personal projects?
More information
I've used Google Fonts to great success so far, but not everyone wants to rely exclusively on web fonts, both because of relying on someone else's infrastructure, as well as over privacy concerns and so on.
Investing in increasing your bus factor will generally pay off well!
More information
Every system and project out there will have domain knowledge that won't be immediately obvious to anyone who's joining the team anew. It might be certain aspects of the business domain, it might be knowledge about the overall architecture, about the technical solutions and other noteworthy details. It is therefore important that we work on formalizing this knowledge and making it easier to transfer it to new colleagues.
What do you do, when there are still servers running your containers? Infrastructure as code!
More information
It wasn't enough for me to just work on modernizing how the applications are run and introduce containers, for you see, the containers still run on some sort of a host that has its own configuration, directories, users, permissions services and lots of other things that should also be managed in a sane way.
Turns out that containers are pretty great, both for development environments and production!
More information
This effort of mine took anywhere between months to years of efforts, depending on how you look at things. Initially, I started out with adding systemd services and Ansible for managing server configuration, but it turned out that this alone wasn't enough to ensure consistency across different environments. The answer to that issue was using containers instead and making the running application instances truly reproducible - you ship what you test!
Your applications work well... right? And you're sure of that? This is where APM comes in!
More information
I've seen people not think about day 2 concerns of development nearly enough as they should. It is not enough to just ship some software and get paid, you also need to think about keeping it running in the future. Not just that, but you need to know just how well the software is running, as well as have the ability to anticipate any potential issues ahead of time.
With some work, even most simple applications can scale to thousands of active users.
More information
When talking about scaling, opinions vary, as do the orders of magnitude in question: someone's system might run well with a hundred active users, someone else might need to serve thousands, whereas yet another organization might be working with tens of thousands of users and beyond. Personally, I haven't had to work with the latter outside of particular load testing circumstances, but even most boring real world systems can be optimized to perform better for gradual scaling up.
What if someone made a shell based alternative to Ansible?
More information
Tools like Ansible are pretty great for managing the configuration across many servers. However, Ansible in particular depends on a Python interpreter being present on the remote system. What if someone were to create a solution which is not dependent on the presence of Python, one that would work purely through a SSH session, in the remote shell, much like a regular human user would?
One of the more performant solutions for load testing.
More information
A part of my Master's thesis was not only deploying a web application, but also load testing it across different container orchestrators, to see how well it performs and whether the container orchestrator deployments have succeeded properly.
What if we used contact tracking instead of contact tracing? How would it scale?
More information
For my Master's thesis, I needed a system to benchmark and run as an example, to check whether my configuration management tool worked correctly. Because of this, I decided to explore whether contact tracing would be a better solution - whether GPS data from mobile devices of infected individuals could be aggregated responsibly to generate heatmaps, so even those without applications would know which parts of the city to avoid, as well as something that could aid in the research on the spread of the virus.
Turns out that lightweight Kubernetes distros do exist. Docker Swarm is still good, though.
More information
As a part of my RTU course, I had to spend some time doing a praxis - where I'd work in a company and do some research. Luckily for me, I was already employed at the time, so I could spend the time exploring various container orchestrators in detail, a question that was relevant for the org in regards to development environments at the time.
I helped increase the uptime of various environments.
More information
Uptime is a bit of a touchy subject. On one end, people seem to obsess over having zero downtime and make development much harder than it should be (though this is understandable for certain services), on the other people don't necessarily care as long as it doesn't impact themselves personally.
In my mind, doing all of the "easy" things to achieve good uptime is a no-brainer, even in regards to something like development, testing and staging environments - after all, you should make sure that QA have a pleasant experience as well.
I setup an entire pipeline to build and store all of the containers needed for development on-prem.
More information
Have you ever needed to build and store your own containers that aren't necessarily for public consumption? Do you need to avoid running into Docker Hub rate limits and not create unnecessary load on their servers? Do you want good performance while building your own containers, as well as to take advantage of layer reuse? This is exactly what I did for a few projects in the org.
A solution for when log shipping is out of the question.
More information
Have you ever found yourself unable to use log shipping, for any number of reasons? Maybe you have an older project, or maybe the team has simply decided that log files are the approach that they'd like to use. Well, you're going to have a problem - some days, weeks or months down the line, the server disk space is going to run out because of all of the log output, or you'll end up with log files that are hundreds of MB or even GB in size and thus hard to browse.
Ever had issues with not knowing which Jira issues should be done after which? I solved that.
More information
Project management software like Jira allows you to add "has to be done before" and "has to be done after" links to issues, so that you know which need to be done after which. But what are you supposed to do, when you have a sprint that has like 20-40 issues in it, all of which can have those links and amongst multiple different ones?