Skip to content
Mustafa Erbay
Career · 5 min read · görüntülenme Türkçe oku

20 Years in Software: Things That Still Surprise Me

In my twenty-year software career, beyond technical knowledge, I'm still surprised by the human factor, the power of simplicity, and the true cost of technical.

100%

Recently, when a junior developer asked me “Why is this like this?”, I realized there are still aspects of my twenty-year career that surprise me. Technical details, new frameworks, or shifting paradigms rarely surprise me; what’s truly surprising is the profound impact of human nature and organizational dynamics on software projects. The experience I’ve gained over the years has shown me that even the best-designed systems can fail in unexpected ways.

In this post, I want to share a few key points from this long journey that still make me think and surprise me. I’ve found that solving the technical part of the job is often just one piece of the puzzle.

Why Do Even the Most Complex Systems Get Bogged Down by the Human Factor?

Working in system architecture and software development for twenty years, I’ve seen that the most critical problems rarely stem from the code itself. When faced with a problem like continuously missing shipment reports from a production ERP, I would initially examine database queries, ORM optimizations, or server performance. However, most often, the real issue was either the report not aligning with the expected workflow or different departments interpreting data differently. This shows that no matter how technically perfect a solution you offer, if users don’t adopt it correctly or if processes aren’t aligned, the solution’s value remains limited.

I’ve experienced that what we call software architecture is often a reflection of a company’s organizational flow. When developing an internal platform for a bank, the most challenging part wasn’t the technical constraints, but rather unifying the expectations of different business units into a single platform. Such experiences prove that software is not just a technical product, but also a social construct.

Why Are “Simple” Solutions Often Overlooked?

The fondness for new technologies and the tendency to label everything as “microservice” is still something that surprises me. When designing the backend for my own side projects, I often find myself looking for the simplest solutions with the fewest moving parts. Yet, in most projects, more complex, supposedly “modern” approaches are preferred. This situation can stem from a desire to try what’s new and popular, rather than making the best use of existing technology.

Even in topics like choosing index strategies in PostgreSQL or setting eviction policies in Redis, sometimes the most obvious optimizations are overlooked. The solution is sometimes not a new tool, but a deep understanding and correct configuration of existing ones. Once, in a financial calculator I built for my own site, I was considering a complex caching mechanism to solve a performance issue, only to find that a simple SQL query refactor completely resolved the problem.

What is the True Cost of Technical Debt?

I’ve experienced countless times that every temporary solution in software, dubbed “let’s just get it done quickly,” leads to a much larger bill in the future. This actually angers me more than it surprises me. I’ve seen how decisions that postpone even security measures like kernel module blacklisting (algif_aead) “for now” can create serious security vulnerabilities later. Such postponements are a typical example of short-term gains turning into long-term risks.

In a production ERP, a PostgreSQL WAL bloat warning that was ignored in the past eventually filled up the database disk, bringing the system to a halt. Such situations demonstrate how technical debt affects not only performance but also reliability and even business continuity. Unfortunately, the tendency for these “temporary” solutions to become permanent seems to be an immutable truth of the software world, and we usually learn the most painful lessons this way.

Why Can Even the Best-Intentioned Architects Be Wrong?

Seeing architectural decisions I made twenty years ago become obsolete today, or a design I thought was most correct with my knowledge at the time failing years later under new requirements, doesn’t surprise me; it teaches me. Last month, I personally experienced a container being OOM-killed in a system because a sleep 360 command in a loop ran longer than expected. This reminded me once again that I needed to switch to a polling-wait pattern.

We can’t always make the right decisions, and that’s perfectly normal. What’s important is to learn from our mistakes and design flexible and adaptable systems. Transitions from monolith to microservices, or choices made in architectures like event-sourcing or CQRS, have to evolve over time. In a client project, we saw that our initial database partitioning strategy became insufficient with data growth, requiring a significant refactor. Such situations show that a “perfect” architecture might not stand the test of time.

Conclusion

After twenty years in software, what still surprises me most isn’t technology itself, but our interaction with technology and how we apply it. The human factor, the power of simplicity, the insidious nature of technical debt, and how our architectural decisions evolve over time have been the most valuable lessons of this long journey. With every new project, every new error message, I continue to learn something new.

What has surprised you most or taught you the biggest lesson on your journey? I’d love for you to share it with me in the comments.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

How was this post?

Frequently Asked Questions

Common questions readers have about this article.

How can one understand the importance of the human factor in software?
In my experience, to understand the importance of the human factor in software, one must consider the impact of users and organizational dynamics beyond technical details. In a problem like missing shipment reports from a production ERP, providing a technically perfect solution might not be enough. Understanding user expectations and processes is critical to finding the root cause of the real problem.
How can I make system architecture more effective?
I believe that to make system architecture more effective, one needs to thoroughly understand the company's organizational flow. When developing an internal platform for a bank, the most challenging part was not the technical constraints, but rather consolidating the expectations of different business units into a single platform. Therefore, when developing system architecture, it's important to consider the organization's real needs and workflows.
How can I calculate the true cost of technical debt?
To calculate the true cost of technical debt, I believe one must consider long-term costs alongside short-term gains. Creating technical debt to develop a system quickly might save time initially, but it can increase maintenance and update costs in the long run. Therefore, to calculate technical debt, it's important to consider both its short-term and long-term effects.
How does the power of simplicity manifest in software?
In my experience, the power of simplicity in software ensures that complex systems are understandable and manageable. Simplifying a system makes it easier for users to use and for errors to be detected more easily. Additionally, simplification can help reduce technical debt and make the system more flexible and scalable. Therefore, simplicity in software is critical to making the system more effective and sustainable.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Comments

Server-side AI Moderation

Comments are AI-moderated server-side and stored permanently.

?
0/2000

Server-side AI moderation

✉️ Free · No spam · Unsubscribe anytime

Get notified about new posts

New content and technical notes — straight to your inbox.

  • 📌
    Best of the week Single most-worth-reading post
  • 🔧
    Toolbox notes Real tools I used this week
  • 🧠
    Behind-the-scenes Notes that don't make it to blog

We don't spam. Unsubscribe anytime. · Tracked only by Umami (self-hosted, no Google).

Your Reading Stats

0

Posts Read

0m

Reading Time

0

Day Streak

-

Favorite Category

Related Posts