MY INTRODUCTION to the world of programming was comically accidental. Every Thursday afternoon, my fourth grade teacher Mrs. Keach would allow me and my fellow classmates to use the computers for an hour. Although the only program we had access to was "Oregon Trail", I never got tired of surviving off of meager rations, fording rivers, and constantly contracting dysentery. One afternoon, in my haste to continue the quest to Oregon, I forgot to insert the floppy disk in the disk drive before booting up the now-ancient Apple II computer.
Instead of being greeted by the game's familiar loading screen, I found myself staring at a completely blank screen, save for a blinking cursor in the upper left hand corner. I didn't know it at the time, but I had stumbled upon the "terminal", a command line interface in which one could type and execute text-based instructions. I cautiously tried typing words into the terminal, full of apprehensive wonder:
Through delightful trial and error, I somehow taught myself how to code in BASIC, the programming language supplied by the Apple II. By the end of a few months, I had finished my first program, which endlessly printed out fake error messages until a secret combination of keys was pressed. Mrs. Keach, upon seeing me "fix" the broken computer with the press of a few buttons, was so impressed by my technical understanding of computers that she named me the class Computer Master.
Since my youthful days of mischief, I've gained a greater understanding of what it means to be a coder. I learned how to write apps on my TI-83 calculator during my free time in high school. I picked up coding in HTML and CSS through building websites for my friends. And I took courses in college on architecting databases, building scalable servers, programming for mobile devices, and designing efficient algorithms.
These experiences have taught me how a programming language is much more than syntax and instructions for a computer to execute; the language serves as a framework for creation. Each line of code that I write contributes to my growing sense of anticipation and excitement for the app I am building. As more lines are added, the program begins to take on a life of its own, taking on value and expression as its own entity. And when the app is finally completed and shared, I as a creator take so much delight in making something good and beautiful.
As more lines are added, the program begins to take on a life of its own, taking on value and expression as its own entity.
The nature of bugs
Not all of coding is easy or engaging. Though I enjoy building new products and features, much of my time coding is spent on fixing bugs. Bugs are introduced when the objects that make up the program follow a faulty set of commands, which causes the program to produce an unexpected and incorrect result. They are usually unintentional and almost always undesirable, a deviation from the creator's original design.
They are usually unintentional and almost always undesirable, a deviation from the creator’s original design.
Oftentimes, they are minimally impactful to the app experience and go almost unnoticed by the everyday user. Other times, there are bugs that inevitably make it past quality control and other accountability checks. These bugs have far-reaching effects and can have huge negative repercussions on thousands of users.
A few years ago, I worked with a small team of developers, product managers, and designers on an upgrade for an app used by over 100,000 daily active users. We had announced earlier to our existing user base that this version of the app was going to be the next best thing since sliced bread.
I specifically worked on a feature called the People Space that would analyze a user's phone and texting patterns, identify which people are important to the user, and present an easy-to-access interface that would help the user call and text their favorite people. After weeks of long days of coding and longer nights of fixing bugs, we finally released the app's new version.
However, just as we were busting out the champagne, the app's performance dashboards indicated that a new crash related to the People Space had been discovered. The number of users affected started spiking aggressively. Within the hour, over 10 percent of our users were experiencing the bug that would not only break the People Space, but completely crash the entire app. I can't begin to describe the mix of somber uneasiness and exponential panic that thickened in the room as we grabbed our computers to figure out where we went wrong.
A bug of nightmares
I discovered that it was I who submitted the buggy code. The realization that I was responsible for a bug that could cost us thousands of users made me feel like I was being thrown out of a car, and left me emotionally reeling as I tried to maintain my composure. As I frantically scanned for the issue, I couldn't ignore the fear of being an inadequate and utter failure that was creeping into my heart. The tense, anxious looks on my co-workers' faces and the ever-increasing dashboard count of affected users served as fuel to the fire of lies already burning in my soul:
I couldn’t ignore the fear of being an inadequate and utter failure that was creeping into my heart.
You're a failure, and you've completely ruined this launch.
You are unworthy of being a creator, and you're completely useless.
These lies opened the door to the enemy as he attacked my identity. It was in that moment of intense spiritual and emotional warfare that the still, small voice of God broke in. I felt His call to seek a quiet place and just listen to Him speak. Though I knew how urgent the crisis at hand was, I knew my soul was in need of being fixed as well. I politely ducked out of the room and found an unused conference room where I collapsed on my knees in utter desperation for comfort, for truth, for anything to silence the lies. There, God spoke straight to the core of my heart:
"This is My Son, whom I love; with Him I am well pleased" (Matthew 3:17 NIV).
"My beloved is mine and I am his" (Song of Songs 2:16 NIV).
God began going through lie by lie and removing them, reminding me of the truth that I am His son. I began to see my false identity crumble in the presence of His voice, a new identity being forged through the simple act of Him speaking. The painful memories I had internalized as evidence of being a failure started to rise to the surface of my heart, only to be replaced by how God saw me and still sees me as His son. Empowered with a renewed sense of my identity, I was able to return back to my team.
The painful memories I had internalized as evidence of being a failure started to rise to the surface of my heart, only to be replaced by how God saw me and still sees me as His son.
Fixing a bug requires first figuring out how to reproduce it, then going line by line through the code, noting the state of the program, to see where the instructions were wrong.
I finally tracked down how the bug was manifested — a last-minute change made hours before the launch. The fix for the bug was simple: I changed one single line, deployed the fix to production, and breathed a huge sigh of relief as I saw the crash count drop down to virtually zero.
Encountering bugs while coding is an inevitable fate all developers must face. The safety measures built into contributing code in most modern day tech companies help prevent major bugs from ever affecting users, though many nightmarish bugs still find their way into released apps. I take them personally; all bugs are reminders of who I am as a creator — a broken, sinful being. A part of my flawed humanity is expressed with every line of code that I write.
And yet, each bug that I discover and fix points to how I am restored and redeemed by God. Just as the apps and websites of today are built upon the foundation of bug fixes from the apps of the past, so am I being daily refined as a new creation, formed and loved by creator God. I no longer fear facing and fixing bugs; rather, I embrace them as reminders of who I am: an imperfect coder formed in the image of my perfect Creator and a masterpiece of God, who delights in me as His beloved son.
And yet, each bug that I discover and fix points to how I am restored and redeemed by God.