How Dark Souls Made Me a Better Software Engineer

“Today is victory over yourself of yesterday.”
— Miyamoto Musashi, The Book of Five Rings

Dark Souls is not a game for the masses. It’s known for its brutal difficulty, its near-total lack of guidance, and a story buried so deep in item descriptions and environmental detail that most players never piece it together.

I first played it when it launched, and I hated it. I spent hours trying to understand how to level up my character and make it stronger, and found only death, again and again. Every path I took ended the same way: killed by an enemy, or falling into a trap I never saw coming.

The game never told me where to go. No tips, no shortcuts, no markers. I’d find an item with no idea where to use it. I’d meet an NPC with no way to know if they were friend or foe. Even the weakest enemy could kill me if it caught me off guard, or if I let myself get surrounded.

After enough suffering, I quit. But the feeling of defeat followed me for years. What had I done wrong? Was the game just bad? Was it punishing for the sake of being punishing, designed only to make players angry?

It took me years to find the answer. I’d grown up a little, both as a person and as an engineer, and I decided to give it another try — this time with a more mature, more patient, more deliberate approach. And almost immediately I understood what had gone wrong the first time.

I Was Playing It Wrong

Dark Souls is not a game that holds your hand and hands you free doses of dopamine to keep you hooked. It doesn’t show you where to go. Instead, it lays every path in front of you and lets you choose, and then expects you to learn — the hard way — that the path you picked wasn’t the one you were ready for yet.

It teaches through its mechanics, not through tutorials:

  • You can’t be good at everything at once. Instead of leveling every attribute, you learn to focus on one or two, and to pick the weapons and armor that scale with them. That’s how the game teaches you to specialize.
  • Spend your progress with parsimony. After killing a few enemies, it’s smarter to rest at a bonfire, level up, review your build, and move on. Push your luck instead, and you risk losing all your souls to a single trap or an invader.
  • Keep one eye on everything at once: your stamina, your weight load, your build, and the strengths and weaknesses of your own character.
  • Don’t rush a new enemy. It’s probably a trap, and most of the time it is. Retreat, think through your strategy, then advance one hit at a time. Be greedy, and you die.

The first time around, I had done the exact opposite of every one of these. I spread my levels across every attribute and mastered none. I burned my souls the instant I had them instead of banking my progress. I sprinted into every new room with my eyes on the loot, and walked face-first into every ambush. I wasn’t fighting the game. I was fighting the way I’d decided to play it.

The difficulty wasn’t cruelty. It was a teacher. I just hadn’t been listening.

You Are Your Own Enemy

The hardest enemy in Dark Souls is the player. Smash buttons, rush forward, fight without strategy or restraint, and you will die — a lot.

The game becomes easy the moment you understand this. You learn to control your anxiety, study your enemies, move with patience, and make progress one deliberate step at a time.

Died for the tenth time to the same boss? Don’t give up. Persist, but change something each attempt. Study the boss’s behavior, learn its patterns, find the openings between its attacks. And when you finally win, the real reward isn’t in the game. It’s the knowledge that you kept control and discipline when it would have been easier to rage and flail.

I know that moment intimately. Ornstein and Smough killed me so many times I was sure the fight was simply unfair, controller halfway to the wall. The shift came when I stopped playing angry. Instead of charging in to get it over with, I’d put the controller down, breathe, and actually watch what they did before each swing. The fight never got easier. I did. The same attacks I’d been dying to became a rhythm I could finally read.

You didn’t beat the boss. You beat your own internal enemy.

The Software Engineering Connection

Software engineering, it turns out, demands almost the same set of skills — and most of them are not technical.

You have to resist the urge to reach for the hyped new framework just because it’s there. You have to study the problem before attacking it, and come up with the best strategy to beat it. You have to read the situation, find the openings, and pick the right weapon — the right tool — for each occasion instead of swinging the same one at everything.

Re-read that list of lessons with an engineer’s eye, and it’s almost the same list:

  • Specialize before you generalize. You can’t master every language, framework, and platform at once, just like you can’t max out every attribute. Go deep on one or two things first, and let the rest transfer from there.
  • Make progress in small, safe steps. The bonfire is a commit. Do a focused piece of work, consolidate it, verify your build still stands, then move on. Try to do everything in one heroic push and you’ll lose hours to a single bad bug.
  • Watch your own capacity. Stamina and weight load are your bandwidth and your tech debt. Overload yourself and you’ll be too sluggish to react when something goes wrong.
  • Don’t charge into unfamiliar territory. A new codebase, a new system, an unfamiliar problem — treat it like a new enemy. Observe, understand the patterns, then move one careful step at a time.
  • Persist on the hard problems, but change your approach. Banging your head against the same bug the same way is just button-mashing. Step back, study the behavior, and form a new hypothesis on each attempt.
  • Read the lore before you touch anything. Dark Souls hides its story in item descriptions and the shape of its world; a legacy codebase hides its story in commits, comments, and tribal knowledge. Nobody hands you the plot. You reconstruct it, piece by piece, before you act.
  • Not every newcomer is on your side. In Dark Souls you meet characters with no way to know whether they’ll help you or knife you in the back. Every new dependency, library, or “quick” integration is that NPC. Vet it before you trust it with your build.

But the most important thing I took from the game and applied to my work was this:

“If it’s too hard, you’re doing it wrong.”

This doesn’t contradict the difficulty being a teacher — it completes it. The difficulty is always real. The question is whether you’re facing a wall you must learn to climb, or standing at the wrong wall entirely: under-leveled, wrong area, wrong weapon. In Dark Souls, grinding harder against the wrong wall just feeds it your souls. Telling the two apart — climb, or walk away and come back stronger — is the whole skill.

Learning to stay calm — and keeping enough emotional intelligence to recognize those moments where the difficulty is a signal, not a wall — was the turning point in my career. When something feels impossibly hard, it’s rarely because the problem is impossible. It’s because I’m approaching it wrong: wrong tool, wrong abstraction, wrong order, or simply rushing. The difficulty is feedback. Listen to it.

Conclusion

You won’t prosper by rushing, or by trying to do everything at once without thinking through your strategy. Success — in the game and in the work — comes after you learn to master and dominate your own flaws: impatience, ego, the craving for instant gratification, and the impulse to flail when things get hard.

Dark Souls didn’t make me a better engineer by teaching me anything about software. It made me a better engineer by teaching me about myself. The enemies, the bosses, the traps were never the real challenge. I was. And once I learned to beat that enemy — with patience, discipline, and the willingness to step back and rethink instead of pushing harder — everything else got easier.

Praise the sun.

Lastest Posts