Blog

Documenting my journey through software engineering, embedded systems, and continuous learning. Each post explores practical challenges, design decisions, and lessons learned from building real systems.


Beyond Busynness: Why Output Is Not Value

  • Newport, Kim, Farley, Martin: different worlds, same conclusion
  • Greenfield or legacy: flow, trust, and small batches create value in both
  • Regulatory constraints are rarely the real barrier, organizational belief is
  • The job is not to produce code, it is to reduce complexity and create value
Read article →

When 'It Works' Is No Longer Enough

  • From working prototype to production-ready: refactoring a physics simulation
  • Factory, Strategy, Builder patterns eliminate code duplication and silent failures
  • std::variant over inheritance: compile-time safety instead of runtime crashes
  • The goal: move error detection from runtime checks to compiler guarantees
Read article →

From Defensive Programming to Type-Driven Design

  • Defensive programming: catching errors at runtime through discipline and process
  • Type-driven design: making invalid states impossible at compile time
  • In C: half the code is error handling. In Rust: types prevent the errors
  • The goal: move safety from manual checks to compiler guarantees
Read article →

Why I Do Not Like Linux Distro Hopping but Keep Doing It Anyway

  • From Xubuntu to EndeavourOS to Mint to Arch, each switch sharpens understanding
  • Simplicity is not a limitation but a deliberate choice
  • Easier to build aligned systems from scratch than reshape misaligned ones
  • The real goal: a system that enables focus instead of distracting from it
Read article →

Dr. Strangelove or How I Learned to Stop Worrying and Love Testing

  • TDD is not a testing technique but a design method
  • Test behavior, not implementation: the key insight that changed everything
  • Verification vs. Validation: building the product right vs. building the right product
  • Tests as a safety net: refactor with confidence, not fear
Read article →

From C to Rust - Evolving Programming Languages in Automotive Development

  • C remains essential for hardware-near programming where every cycle matters
  • C++ bridges low-level efficiency with modern software design patterns
  • Rust offers memory and thread safety at compile time without runtime cost
  • The future is hybrid: choosing the right language for the right layer
Read article →