5 Lessons I've Learned from Three-and-a-Half Decades as a Software Developer
After more than 35 years in software development (I know I don’t look it—dermatologists hate me), I’ve written a lot of code, solved a lot of problems, and worked with all kinds of people and projects. The technology has changed dramatically, but the lessons I’ve learned along the way are still applicable, even decades later.
Here are five lessons that continue to shape how I approach both software and business today.
1. Never assume; always ask
When I was a younger developer, I sometimes thought I knew what the client wanted without asking too many questions. Inevitably, I’d spend hours building something that didn’t fully meet their needs. The hard truth is: assumptions cost time and money. Asking questions, even the ones that seem obvious, may feel slower at first, but it saves frustration in the long run.
2. Software projects almost always take longer than expected
No matter how carefully you plan, there are always unexpected hurdles: integration challenges, changing requirements, or simply the complexity of building something new. That’s why I’ve learned to build in buffers, set realistic expectations, and stay flexible. It’s better to under-promise and over-deliver than the other way around.
3. Work with clients that align with your values
One of the best pieces of business advice I’ve ever received is this: don’t work with jerks. No amount of money is worth the stress of a bad partnership where you’re never going to see eye to eye. When clients share your values—respect, honesty, collaboration—the relationship is smoother, the projects are more successful, and everyone enjoys the work more.
4. “Simple” requests are often more complex than they appear
When a client says, “This should be simple,” it often means they don’t see the complexity behind the scenes. What looks like a minor tweak can involve unraveling interdependent systems, refactoring code, or rethinking architecture. That’s not the client’s fault—it’s just the nature of software. I’ve learned to gently set expectations and explain why “simple” might take longer than expected.
5. Last but not least: Hire people who put the team first
Talent matters, but teamwork matters more. I’ve seen brilliant developers derail entire projects because their egos got in the way. On the flip side, I’ve seen so-called average coders elevate a team by collaborating, sharing credit, and supporting others. Ego can destroy a team; humility and collaboration can make one unstoppable.
Software development has been my career for more than three decades, but it’s also been my teacher.
At Sovereign Systems, these principles guide how we approach every project. We don’t just write code; we build partnerships, solve problems, and create software that helps organizations thrive.