The next article initially appeared on Medium and is being republished right here with the writer’s permission.
There’s a faux confidence you possibly can carry round whenever you’re studying a brand new expertise. You watch just a few movies, skim some docs, get a toy instance working, and inform your self, “Yeah, I’ve obtained this.” I’ve performed that. It by no means lasts. A tough lesson usually accompanies the one expertise that issues.
You study by means of failure—falling flat in your face, wanting on the mess, and determining why it broke. Something that feels too straightforward? It most likely was, and also you didn’t exit the method with something value studying.
Ask About Failure: Failure === Expertise
After I’m hiring somebody who claims relational database experience, I ask a “trick” query:
Inform me concerning the worst database schema you ever created. What did it educate you to keep away from?
It’s probably not a trick. Anybody who’s been knee‑deep in relational databases is aware of there’s no excellent schema. There are competing use instances that continuously pull in opposition to one another. You design for transaction workloads, however inevitably, somebody tries to make use of it for reporting, then everybody wonders why queries crawl. One other developer on the staff inadvertently optimizes the schema (often years later) for the reporting use case solely to make the transactional workload unworkable.
The proper reply often appears like:
We constructed for transactional throughput—one of many founders of the corporate thought MySQL was a database, which was our first mistake. The enterprise then used it for reporting functions. The system modified palms a number of instances over the course of a number of years. Joins turned gnarly, indices didn’t match the entry patterns, and nightly jobs began interfering with consumer visitors. We needed to break up learn replicas, ultimately introduce a warehouse, and after 5–6 years, we ended up simplifying the transactions and shifting them over to Cassandra.
That’s an individual who has lived the trade-offs. They’ve skilled a drawn-out existential failure associated to operating a database. Whereas they may not know the right way to resolve among the foolish logic questions which can be more and more well-liked in job interviews, that is the type of expertise that carries much more weight with me.
The Schema That Almost Broke Me
I as soon as shipped a transactional schema that regarded advantageous on paper: normalized, neat, every part in its correct place.
Then analytics confirmed up with “simply a few fast dashboards.” Subsequent factor you already know, my fairly 3NF mannequin, now linked to each elementary classroom in America, was getting used like a million-row Excel spreadsheet to summarize an accounting report. For just a few months, it was advantageous till it wasn’t, and the database had made a sluggish‑movement faceplant as a result of it was spending 80% of its time updating an index. It wasn’t as if I might repair something, as a result of that may imply a number of days of downtime coupled with a rewrite for a undertaking whose contract was virtually up.
And the way had been we attempting to repair it? Should you’ve been on this scenario, you’ll perceive that what I’m about to put in writing is the signal that you’ve reached a brand new degree of determined failure. As an alternative of contemplating a rational strategy to reform the schema or separating what had turn out to be a “web-scale” workload in 2007 from a NoSQL database, we had been attempting to determine the right way to buy sooner laborious drives with greater IOPS.
I realized lots of issues:
- I realized that upgrading {hardware} (shopping for a sooner machine or dropping one million {dollars} on laborious drives) will solely delay your disaster. The actual repair is unavoidable—huge horizontal scaling is incompatible with relational databases.
- I realized the which means of “question plan from hell.” We band‑aided it with materialized views and skim replicas. Then we did what we must always’ve performed from day one: arrange an precise reporting path.
- In case you are having to optimize for a question plan each week? Your database sending you an vital sign, which you need to translate to, “It’s time to start out searching for an alternate.”
Lesson burned in: Design for the use case you even have, not the one you hope to have—and assume the use case will change.
What Does This Should Do with Cursor and Copilot?
I’m seeing lots of people writing on LinkedIn and different websites about how wonderful vibe coding is. These celebratory posts reveal extra concerning the individuals posting them than they understand, as they not often acknowledge the truth of the method—it’s not all enjoyable and video games. Whereas it’s astonishing how a lot progress one could make in a day or per week, these of us who’re truly utilizing these instruments to put in writing code are the primary to let you know that we’re studying lots of tough classes.
It’s not “straightforward.” There’s nothing “vibey” concerning the course of, and if you’re doing it proper, you might be beginning to use curse phrases in your prompts. For instance, a few of my prompts in response to a Cursor Agent yesterday had been: “You’ve got to be kidding me, I’ve a rule that acknowledged that I by no means needed you to try this, and also you simply ignored it?”
Every time I see individuals get excited concerning the newest, best fad factor that’s altering the world, I’m additionally the primary to note that perhaps they aren’t utilizing all of it. In the event that they had been, they’d perceive that it’s not as “straightforward” as they’re reporting.
The failure muscle you construct with databases is similar one you want with AI coding instruments. You possibly can’t tiptoe in. You need to push till one thing breaks. Then you determine the right way to strategy a brand new expertise as an expert.
- Ask an agent to refactor one file—nice.
- Ask it to coordinate modifications throughout 20 information, rethink error dealing with, and maintain checks passing—now we’re studying.
- Watch the place it stumbles, and study to body the work so it may possibly succeed subsequent time.
- Spend a complete weekend on a “wild goose chase” as a result of your agentic coder determined to disregard your Cursor guidelines utterly. ← That is costly, but it surely’s the way you study.
The trick isn’t avoiding failure. It’s failing in a managed, reversible approach.
The Meta-lesson
Should you’ve by no means damaged it, you don’t actually comprehend it. That is true for coding, budgeting, managing, cooking, and snowboarding. Should you haven’t failed, you don’t comprehend it. And most people speaking about “vibe coding” haven’t.
The individuals I belief most as engineers can inform me why one thing failed and how they adjusted their strategy because of this. That’s all the sport with AI coding instruments. The sooner you possibly can run the loop—strive → break → examine → refine—the higher you get.
