
In August 1628, by the order of King Gustavus Adolphus of Sweden, the warship “Vasa” was launched from the Stockholm harbor with a grand ceremony. Vasa was an engineering marvel of its time. The King wanted the ship to have unprecedented firepower and forced the engineers to add an extra deck of cannons. But power wasn’t enough; the ship also had to reflect the glory of the empire. So, its hull was adorned with hundreds of carved wooden sculptures, gold leaf, and heavy decorations.
Just 1,300 meters after leaving the harbor, a light breeze caused the ship to list to one side. Those massive cannons, those dazzling sculptures, that “perfect” design unbalanced the ship so much that Vasa sank within minutes.
The engineers had fulfilled the King’s demands for “more features” and “more magnificence” (design). On paper, everything was spectacular. But they forgot one single thing: The ship needed to float.
Today, in the technology world, hundreds of “Vasas” are being built every day.
We, as technology leaders, often boast about our code compiling, our tests passing with green lights, or the pixel-perfect precision of our interfaces. Yet, in over 20 years in the industry’s “kitchen,” I have seen one single truth: Even the most perfect algorithm, if it does not cure a human pain, is just noise that heats up the processor. Just like Vasa’s carved statues, the “clean code” architecture of an app that no one uses is exactly the same thing.
Today, putting on my “Holistic Tech Leader” hat, I want to have a filter-free chat with you. Why do those “flawless” worlds we design at our desks shatter when they hit the dust of the street and the reality of the customer? Why do ideas we call “very logical” fail to become products?
Let’s adapt the philosophy of the Anatolian poet Yunus Emre, “Science is knowing science, science is knowing thyself,” to modern product development processes. Because in our world, science is knowing who, what, and which “Business Value” your code serves.
The product development process usually begins in a quiet and sterile laboratory: Research and Development (R&D). This is a playground for us technical people. There is no cost pressure, no customer complaints, only “possibilities.”
R&D is an intellectual tour around a problem. As emphasized in the book Pürüzlü Mükemmellik (Rough Perfection); “Sometimes you have to slow down to speed up.” Deep research done at this stage is the foundation that will save us from huge technical debts in the future. However, a great danger lies here: Kitchen Blindness.
There is a mountain of difference between a chef preparing sauces in the kitchen according to his own taste, and serving that meal in a restaurant for 500 people. As developers, we tend to fall in love with technology itself during the R&D process. The sentence “This database handles a million transactions per millisecond” excites us. But the real question is: “Does our user need to make a million transactions?”
We call what we get at the end of the R&D process a “Prototype.” You press a button, complex things happen in the background, and a result appears on the screen. This is the moment the technical team screams in victory. However, a prototype is just a beautiful ghost that doesn’t have a soul yet.
The sharp observation by Jason Fried and DHH, authors of Rework, comes into play here: “Prototypes are ideas in their rawest form.”
Just because a prototype works doesn’t mean it’s a “product.” A prototype is proof of a technical hypothesis (Proof of Concept). A product is a commercial and human contract. I can summarize the difference between a prototype and a product like this:
Anything that doesn’t have a ready customer, doesn’t soothe a pain, and is seen only as a technical challenge, cannot go beyond being a prototype. Even if you use the world’s most advanced AI models, if you don’t create concrete “value” in the life of the person who will use that model, what you are doing is just an expensive hobby, an exercise.
The biggest handicap of engineer-origin minds is the tendency to see the world as a linear equation. For us, it must be $A + B = C$.
However, the mathematics of real life does not work this way. Humans are not machines that make logical decisions; they are beings that act according to their habits, fears, and emotions.
“Vitamin” or “Painkiller”? Just because an idea is “logical” doesn’t guarantee it is “sellable.” There is a metaphor we frequently use in the industry: Is your product a vitamin or a painkiller?
Most ideas that seem logical to us are actually just beautifully packaged vitamins. To leave their comfort zone and learn a new product, the customer needs more than a “logical reason”; they need a “burning need.”
The Rework philosophy says “Scratch your own itch.” The most successful products usually don’t come from market research reports, but from the founder looking for a solution to a problem they personally experience. But there is a fine line here: The place where you itch might not matter to anyone else. Falling in love with your own idea is the biggest mistake a leader can make. You must be ruthless when validating your idea.
We all know that silent war that never ends in the software world: The arrogance of the Backend as the “engine doing the work” versus the insistence of the Frontend/Design team as the “face meeting the user.”
This discussion is usually held on the wrong ground. The question “How beautiful should the design be?” is wrong. The right question is: “How does design pave the way for functionality without getting in front of it?”
Just like the “Over-engineering” mistake we make when writing code, we fall into the “Design Over-engineering” trap in design too. As a CTO, my stance is clear: A design without function is an empty box, and functionality without design is an unusable treasure. However, the balance lies in pragmatism.
If you are developing a corporate (B2B) product, you need to understand your user’s psychology. That user is not using that software for pleasure, but to finish their shift. Their need is not animations creating a “wow effect,” shadowed buttons, or icons like works of art.
Their need is Clarity. In B2B products, design exists to reduce cognitive load.
Here, every extra effort spent on design makes the product clumsy. A “clean & decent” design that complies with standards is the perfection itself in B2B. Anything more is waste.
In works appealing to the end-user (B2C), the situation is slightly different, but the basic logic is the same: Don’t Wait for Perfect.
In a B2C app, the design must be professional enough to gain the user’s trust. But crafting every screen pixel by pixel is suicide that delays the product’s launch (Time-to-Market). The strategy here should be an “Acceptable Start.” The product goes out to the field, and user reflexes are observed.
Design should evolve not at the desk, but in the field, at the user’s fingertips. As stated in Pürüzlü Mükemmellik, life is rough/imperfect, and sterile lab designs usually don’t work in the chaos of real life. Let your design be shaped by the customer’s reflex.
Remember, the Vasa ship had a magnificent design too, but it couldn’t float. Our goal is not to make a painting to be exhibited in a museum, but to build a ship that will cross the ocean.
Architectures drawn on whiteboards in air-conditioned meeting rooms are always wonderful. Everything is modular, strictly scalable. “If this happens, that kicks in; if traffic increases, servers scale automatically.”
However, when you go down to the field and bring the product together with real users, “mental eclipses” begin.
I want to remind you of that striking truth in the book Rework: “Planning is guessing.”
Creating 1-year or 2-year roadmaps in the technology world is no different than fortune-telling. Because no one knows what state the market, technology, or competition will be in 6 months later. We usually fall into the mistake of “Let’s finish the product and then launch.” However, a product never finishes. A product is not something to be sculpted like a statue and put aside; it is like a garden, it constantly requires care, pruning, and attention.
The biggest strategic challenge I encounter in the projects I work on and the teams I lead is this: Trying to adapt a specific request of one customer to all customers.
A customer comes and says: “I want the rows to be red and the data to be sorted in reverse when I get the reports.” For a developer, coding this takes 15 minutes. It is very easy to get into “We’ll handle it” mode.
But for the product manager and technical leader, this is a nightmare. Questions begin:
This is the point where teams drown. While saying “Let’s please everyone,” “Let our product be very flexible,” a “Frankenstein” software emerges—one that is undefined, bursting with settings from everywhere, and impossible to use.
This is a mental eclipse. Structures designed to be “flexible” at the desk appear as “complexity” in the field. And remember, complexity is the biggest enemy of software.
A real tech leader is not the person who says “We can do this,” but the person who can say “We shouldn’t do this because it is against the spirit and simplicity of the product.” The technical difficulty is not in writing the code, but in deciding what not to write.
You took the product live (Go Live). Congratulations, the real trouble starts now. Let’s remember the unique words of Rumi: “Yesterday is gone, darling. Whatever was said belongs to yesterday. Now new things must be said.”
A live product is a living organism. It grows, gets hungry (consumes server/resources), gets sick (bugs), and wants attention (customer support). In this lifecycle, the most critical issue is your stance against Customer Demands.
Henry Ford’s famous quote, “If I had asked people what they wanted, they would have said faster horses,” is the constitution of product management.
Author’s Note: Henry Ford didn’t actually say this, but using it in such content has a different flavor :)
The customer is always right about their problem, but usually wrong about their solution proposal. If a customer says “Put an export to Excel button for me,” they are actually saying: “I can’t analyze my data in your interface, so I want to escape to the harbor I trust (Excel).” Your duty is not to put that button (that’s the easy way), but to improve the analysis capabilities inside the product. There is a huge difference between doing what the customer says and solving what the customer suffers from.
When to Cross the Line?
What will you do when your product vision conflicts with customer demands?
The experience I gained in projects touching different geographies in different areas of the industry taught me this: Developing a product is not just creating an engineering marvel. Developing a product is melting human psychology, commerce, aesthetics, and engineering in the same pot.
Your smooth plans at the desk will break in the field.
Services you said “will never crash” will fail to respond in the most critical customer demo.
The customer will find the interface you spent days designing “too complicated.”
Your most logical idea will be defeated by the market’s irrationality.
All of these are part of the process, that “rough perfection.” As the poet Nazim Hikmet said:
“If I don’t burn, if you don’t burn, if we don’t burn, how will the light conquer the darkness?”
To find the right product, we must risk burning inside those codes, making mistakes, destroying prototypes, and building them again. But always with this goal: To produce not just a technical success, but a value that lives in the field, in real hands, in real business processes.
My belief is that; the leaders of the future will not be those who just know the code, but holistic leaders who can manage the place where code touches the human, that fine line. Will your ship be like “Vasa,” fancy but fragile, or a ship that is durable against storms and takes its crew to the destination?
The choice is hidden not in the first line of code you write, but in the first dream you build.
Visuals generated with Nano Banana Pro.
This article has been translated from my blog post written in Turkish, with the help of AI tools during the translation process.