As developers, we make different types of mistakes at different points in our career.
But theres time for musing later.
Youre reading this article because you want to hear about a train crash, and Im the engineer.

I was nervous to be working from somewhere other than my couch, in something other than my pajamas.
It involved a lot of customizations to the WordPress registration and login flow.
The previous developer was reputed to have achieved significant progress by simply editing the corewp-loginfiles.
40% off TNW Conference!
Can you guess where this is going?
That plugin, as fate would have it, only backed up thewp-contentfolder.
Whatever WordPress hacks were in those core files were gone forever.
I was so humiliated.
Ive learned to really cherish managed environments like WP-Engine, with a robust backup/restore system.
Its quite fast unless you have a very large connection.
The UI is simple.
Ithasa UI, period: Anyone who knows how to use WordPress can work with this.
Im a big fan.
Well, almost everything.
I seemed to be having a lot of trouble with the magic mouse.
More than that, I was just clumsy with a new fine motor skill.
Back in these days, our WordPress development flow still included deploying to production via FTP.
Gosh does that sound bad!
But thats how it was.
One day our entire platform was just gone.
Our sysadmin was quick to assume it was some kind of DDoS or something generally at his level.
As for us developers, we trusted his instincts and assumed hed figure it out soon enough.
The day came and went.
Our sysadmin had identified the problem.
He pulled the FTP logs and observed that my user had moved our entire platform into a sibling directory.
That is,wp-contenthad become nested underwp-includes.
I was crestfallen, but our CTO was great about it.
I found two really helpful things.
The first was to locate a CLI command to prevent Cyberduck from allowing remote-to-remote file movements at all.
This was a good safety measure and we adopted it as a company policy immediately.
The second was that I took a keen interest in deploying via Git.
Eventually, I wound up writing a WordPress plugin to weave our Bitbucket versioning into the normalwp-adminupdate flow.
Ever since then, weve had almost no reason to evenhaveFTP access to production.
This plugin is one of my favorite professional achievements.
Of course, an affinity for Git is a prerequisite for developers today.
The request was to append a badge to posts of a certain category.
I tested it quickly in staging to confirm that the requisite posts got their badges applied.
Then I deployed it and left work for the day.
As you might guess, the universe exploded.
Can you see why?
The issue was that instead of returning$contentin my guard condition, I was returningfalse.
But really there are many layers of mistakes here.
Why was I content to only test that posts received a badge?
Why did I not also test that other posts remained unharmed?
Why was I deploying to production so late in the day?
Why was it that ourqualitycontrol consisted entirely of me clicking around a little bit and refreshing the page?
The answer to all of these questions can be summarized asmaturity.
It worked on my local!
It had a lot of math, in particular, a lot ofdivision.
About 30 minutes later, I got an unfriendly Skype from our sysadmin.
Dead in the water.
Wikipedia
So what does this mean for computers?
And it gets worse!
This had the effect of a DDoS attack, albeit an absurdly self-inflicted one.
The bad thing about this mistake was that it took down a high-traffic site.
The good thing about this mistake is that it dramatically changed my approach to work.
More than anything, I was ashamed by my willingness to implement without understanding.
More than that, I vowed to never again ship code that was not highly readable to novice developers.
The time I let a project spiral out of control
I had landed a really fascinating project.
Things proceeded rather well for the first iteration of the project.
The trouble began when we began to showcase progress to the client and implement his feedback.
We exceeded Gmails limit of 100 replies per thread several times!
Things began to get uncomfortable.
My Amazon developer mentioned one day, I wonder if we should use Trello.
Huh, I thought.
Does a three-person team need a platform like that?
Again, my usual tendency is to prefer fewer tools, less overhead, less complexity.
Immediately, the project resurrected itself from its digital tomb because we could communicate with far less mental overhead.
Im happy to say that that project was completed to the clients full satisfaction.
Nowadays, I consider Trello or Jira to be a de facto requirement for teams of two or more.
Whats not okay is for captains to make lieutenant mistakes, or for lieutenants to make private mistakes.
Whats more important is how you grow from them.
I hope to remain curious and accountable when I make mistakes so that I continue to innovate past them.