
Engineering in Practice is a series about the realities of building software — the problems that appear during development, the technical decisions behind the solutions, and the lessons learned along the way.
Software engineering is rarely just about implementing a feature from a specification. While working on real projects, we encounter compatibility issues, unexpected behavior, architectural decisions, security concerns, deployment challenges, tooling limitations, and many questions that require investigation before a good solution can be found. This series is where I document some of those experiences.
The articles are based on projects I build, technologies I use, and problems I encounter in practice. Some posts may focus on a specific implementation, while others may explore a concept I needed to understand deeply before applying it to a project. The goal is not simply to explain how something works, but also to share why I approached it a certain way, what alternatives I considered, what worked, what did not, and what I learned from the process.
The topics will evolve naturally with my work and interests. They may include:
Angular and frontend engineering
npm libraries and package compatibility
API design and integration
OAuth 2.0 and OpenID Connect
Keycloak and authentication
Testing and quality
CI/CD and automation
Docker and containerization
Terraform and infrastructure as code
DevOps and deployment
Software architecture
Developer tooling and engineering practices
Some articles will be technical deep dives. Others will be practical guides, experiments, or lessons learned from solving a particular problem. The common thread is that they come from hands-on engineering experience rather than theory alone.
I’ll continue adding to this series as I work on new projects, explore new technologies, and encounter new engineering challenges.
Build. Investigate. Experiment. Learn. Share.



