Blog
Articles about software engineering, agile practices, and modern development.
Encryption at Rest for a Raspberry Pi using Yocto
Implement LUKS encryption at rest on Raspberry Pi CM4 with yocto. Complete guide covering initramfs, cryptsetup, OTP keys, and self-provisioning setup.
Bringing Secure Boot to Embedded Linux with Yocto
Secure boot for an embedded Linux devices based on raspberry pi CM4 using the yocto project
Demystifying the Cyber Resilience Act: A pragmatic starting point
A practical guide to the EU Cyber Resilience Act: key requirements, security-by-design, vulnerability management, incident response, SBOM & incremental compliance.
Cyber Resilience Act verstehen: Praktische Umsetzung statt Mythos
Praktischer Leitfaden zum EU Cyber Resilience Act: zentrale Anforderungen, Security-by-Design, Vulnerability Management, Incident Response, SBOM & inkrementelle Compliance.

std::expected in C++23: A Better Way to Handle Errors
Practical introduction to std::expected: intent-revealing, structured error handling for recoverable failure paths in modern C++.
Building a local AI agent with Llama.cpp and C++
Learn how to build a local AI agent using llama.cpp and C++. This article covers setting up your project with CMake, obtaining a suitable LLM model, and implementing basic model loading, prompt tokenization, and text generation. Ideal for those interested in running AI models on their own hardware without relying on cloud services.
Faster build times with artifact based CI
Artifact-based CI can optimize your CI/CD pipelines by reducing build times, improving reliability, and streamlining workflows. Discover strategies for efficient artifact storage, versioning, and retrieval, and explore best practices for implementing artifact-based continuous integration in modern software development.

The 7 CMake anti-patterns that eat your time and energy
CMake is powerful, but often blamed for bad build experiences. Most of the frustration, though, comes from avoidable mistakes. Here are 7 common CMake anti-patterns that waste your time - and how to fix them.
Optimize your code for reduced cost of change
Software products might live for a long time. After the initial cost, the cost of change is the major cost driver. Optimizing your code for reduced cost of change is paramount.

Using Conan as a CMake Dependency Provider
With the addition of dependency providers in CMake 3.24 using Conan to manage dependencies becomes easier and more integrated. This post shows a step-by-step guide on how to use Conan as a CMake dependency provider.

Preventive vs. Corrective Planning in Software Development: Striking the Balance
Striking the balance between preventive & corrective planning in software development is helps navigating critical decisions and uncertainties effectively.

CMake line by line - Creating a library
How to set up a library with CMake, including proper symbol visibility and installation
LLMs and AI make software development harder
AI code assistants like copilot or chatgpt are a great help for developers, but they also make our job harder by stripping away the easy parts of our job.
The four core powers for empowered agile teams
The term empowered teams is often used in the context of agile software development. But what does it mean? There are many variations of this but there is a definitive set of 'minimum powers' that a team needs to be able to be agile.
Testing strategies for software that interacts with hardware
Whenever software that interacts closely with hardware is developed, testing becomes more complicated. This article discusses some strategies to make testing easier and more effective.

Organizing CMake presets
CMake presets are a big help in how to configure CMake. This article shows how to set up and organize them.

CMake line by line - Building and Android APK with Qt5
A line by line explanation of how to build an Android APK with CMake for a Qt5/QML application using the Android NDK and SDK.

Bringing software quality into roadmaps
Bringing engineering and quality topics into a development roadmap for software can be tough, especially when the pressure to put out more and more features are high. Leveraging the ISO 25010 standard for software quality there are a few relatively simple methods to bring the topic to the table.
Writing "CMake Best Practices" - A writing journey
From August 2021 to May 2022 I spent quite some time writing the Book CMake Best Practices with Packt Publishing. This article contains a highly subjective and opinionated story of the writing journey.
The Mountain Mind - Mountain climbing and software development are the same
Taking and assessing risks, commitment, and focus on the task play an important role when climbing as well as when writing software. A few thoughts on how being a successful mountaineer influences my work as a software engineer and what can be learned from being in the great outdoors.
Reproducible build environments for C++ using docker and vscode
How to set up a build environment for building C++ applications with docker and visual studio codes remote container environment (devcontainer)
kickstarting agile product development
Agile software development is the way to go when developing a project. But how does one get started with a project or a product? What is needed to get an initial backlog up and running and how much information should one collect to enable all people involved to act empowered?
Why software engineering is different
Why running software projects is different than other engineering disciplines from the MINT field and why agile software development is needed to leverage the full potential of software in a product.
Frequent vertical integration for the win
How early and frequent vertical integration will increase the quality of embedded products and help projects running on schedule
Lean backlog handling
Agile software development in a regulatory environment
how to benefit from apply agile software development in a regulatory environment such as ISO 13485 or IEC 62304

CMake line by line - using a non-CMake library
how to use the find.cmake mechanism to include library into your CMake project, even if it is not built with CMake itself. By combining find_package with a custom .cmake file we can migrate any library to be usable with a CMake project.

Ditch the estimates and start forecasting
Robust code with design by contract
The art of slicing stories
Making remote teamwork work
7 factors for successful change

Leading across the golden circle
The joy of failure
The currency of getting things done

CMake line by line - creating a header-only library
On leadership debt

Scaled Single Sprint Scrum<sup>TM</sup>
Help! I'm getting SAFed!
A practical guide to tangible product visions
A commit a day keeps the boredom away
Decide to decide better

Chase the dopamine and get motivated

How to iterate fast when developing software and hardware together

Quick and easy unpacking in C++ with structured bindings

Don't fear large scale agile frameworks

Better estimates by using applied linguistics

Do not leave your innovation to the engineers

Standard Attributes - CleanCode for C++17

initializers in selection statements - smarter coding in C++17
Stop calling it agile

C++17 - What's in it?
Planning ahead the agile way
Five and a half steps to efficient meetings
The Seven Must Reads For The Aspiring Agilist
Get Professional - A professional skillset for software developers
