blog main page

Are You "Bikeshedding" Your Software Projects? (And Why It Hurts Your Codebase)

Ever spent hours debating whether a function should be fetchUser() or getUserData(), while critical architectural issues go unaddressed? That’s bikeshedding in action, focusing on the trivial because it’s easy, while avoiding the complex decisions that actually matter. In this blog post, I dive into why this happens, how it quietly sabotages codebases, and three practical ways teams can break the cycle.

Read more →

Why Extracting Generic Subdomains Improves Clarity and Business Focus?

In Domain-Driven Design, knowing what to focus on can make or break a project. One often overlooked strategy is extracting generic subdomains, those common, non-differentiating functionalities like authentication, logging, or payments. Doing so simplifies your core domain, sharpens business focus, and allows engineering efforts to deliver real value. In this post, I explore why separating generic subdomains matters, how to do it effectively, and the tangible benefits it brings to clarity, maintainability, and reusability.

Read more →

The Art of Microservice Granularity: A Guide to Natural System Evolution

Determining the right size for microservices is one of the trickiest challenges in software architecture. Too large, and you lose modularity; too small, and complexity explodes. In my latest blog post, I explore how letting system boundaries evolve naturally, rather than forcing splits based on rules or org charts, can lead to healthier, more scalable systems. I share practical insights on identifying when and where to split, spotting natural “fracture lines,” and building services that grow in step with real business needs.

Read more →

The Art of Mentoring in Engineering - Part 4: Managing Mentors and Mentees

This part focuses on managing mentors within organizations, aiming to create a culture of mentorship. It emphasizes clarifying objectives, matching mentors to goals, providing structured guidance, recognizing mentor responsibilities, allocating time for mentoring, avoiding assumptions in mentor selection, considering job skills training, encouraging participation of developers, fostering humility and growth, valuing internship programs, hiring interns strategically, and emphasizing diversity in internship hiring. These strategies are crucial for effective mentorship programs, contributing to continuous learning and professional growth within organizations.

Read more →