Grit

I want to take a minute to talk about something that happens all to often to us as developers but is rarely talked about, overcoming seemingly insurmountable challenges. There are many things that people consider hallmark traits of “good developer”

However, in my opinion, there is a far more important character trait that every skilled developer must have.

##Grit

Perseverance and passion for a long term goal

12 years of coding have taught me that grit is the one and only thing that “gets the job done.” Determination always trounces talent and intelligence. Hard work beats talent when talent doesn’t work hard enough. Your own natural skill and intelligence will only ever carry you so far. In fact, I believe that it will only ever get you to the starting line. It is grit and determination that enables you to finish a task that you started out on.

My Personal Experience

6 years ago I graduated from ECU with a degree in Computer Science. I knew how to write Java code (and by write I literally mean write, not understand). I fell into a contract position with a Condition-Based-Maintenance standards company called MIMOSA and I was tasked with writing a program that would convert this XML:

<?xml version="1.0"?>
<!--Copyright 2004-2008, Machinery Information Management Open Systems Alliance, All Rights Reserved-->
<mim_cris_v32 xmlns="http://www.mimosa.org/TechXMLV3-2">
    <!--row_status_type-->
    <row_status_type rstat_type_cod="1" name="Active" gmt_last_updated="1995-12-28T18:00:00" last_upd_db_site="0000000000000000" last_upd_db_id="0" rstat_type_code="1"></row_status_type>
    <row_status_type rstat_type_cod="2" name="Inactive" gmt_last_updated="1995-12-28T18:00:00" last_upd_db_site="0000000000000000" last_upd_db_id="0" rstat_type_code="1"></row_status_type>
    <row_status_type rstat_type_cod="3" name="Soft Deleted" gmt_last_updated="1995-12-28T18:00:00" last_upd_db_site="0000000000000000" last_upd_db_id="0" rstat_type_code="1"></row_status_type>
...

into this

<?xml version="1.0" encoding="UTF-8"?>
<!--Copyright 2009, Machinery Information Management Open Systems Alliance, All Rights Reserved-->
<CCOMData xmlns="http://www.mimosa.org/osa-eai/v3-2-3/xml/CCOM-ML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <ValidNetwork>
      <GUID>5b41e634-c6cb-4fd7-952e-de7d754d4d85</GUID>
      <Network>
         <GUID>c83a7e16-3c1a-4ab9-872a-e68785f64ea8</GUID>
         <Tag>70e346bb-915d-43d2-ae12-51b46b2ffe0eNetwork Type Taxonomy</Tag>
         <Name>Enterprise Classification Taxonomy</Name>
         <Network>
            <GUID>2df47839-42ef-4c69-b063-21ea642220b1</GUID>
            <Tag>Taxonomy</Tag>
            <Name>Taxonomy</Name>
         </Network>
         <EntryEdge>
            <GUID>9c4953a2-c2f6-4de2-aa14-503de4ffccc0</GUID>
            <ToEntity xsi:type="DataDictEntry">
               <Type xsi:type="EntityType">
                  <GUID>4c460999-2367-4ed0-adfd-5f970ddf4503</GUID>
                  <Tag>Entry</Tag>
               </Type>
               <BaseType xsi:type="EntityType">
                  <GUID>400ebcb3-80f3-4601-b693-49e4232ff797</GUID>
                  <Tag>Undetermined</Tag>
               </BaseType>
            </ToEntity>
         </EntryEdge>
         <EntryEdge>
...

I was in well over my head. There were business concepts I was less than unfamiliar with. I had to write a GUI (which I had never done before). Hell, I didn’t even know what XML was. The most complex thing I had ever done up to that point was write a Java application that solved the Rickety Bridge logic puzzle. Oh, and I was the only coder at the company.

And, I worked remote.

I was on an island, alone, and paid to do a task that I had convinced myself was impossible. So, I started to to what everyone does when faced with an insurmountable challenge. I started thinking of ways that I could quit without disappointing or angering anyone. I wanted nothing more than for my boss to call me and say “actually, we don’t need that XML anymore.” Eventually, he did call me but he asked for the product to be delivered in a 2 months. So there I was, 23 years old with a 25,000 line pile of XML that I had to shovel through in 2 months. The longest code file I had ever seen up to that point was in the hundreds.

Deep inside, I knew I did not want to quit. I knew that I would forever be disappointed in myself if I quit my first job on the first coding assignment I had ever been given so I did the only thing I could do. I rolled up my sleeves, worked early in the mornings till late into the night and came up with this (which I foolishly published to Github 4 years ago).

Looking back on this code, I realize now that I did every possible thing I could of done incorrectly, incorrectly. Conditional branching ran wild. I consumed the entire XML file into a single massive DOM and directly manipulated/restructured it with xpath queries. I even wrote a “Driver” in XML to detail the structure of the soon-to-be-generated new XML document. However, I am still prouder of this code than I am of any other code I had ever written because I finished it. This task taught me a valuable lesson that shaped my career path for years to come.

Work happens in silence and solitude and no one is cheering while you do it.

During those 2 months, while my code skills were tempered on the hot fiery iron that was this XML converter, I learned that it doesn’t matter how much you “know.” All that matters is how much you do. There will be times that you feel completely defeated. You will feel as though you have learned nothing and accomplished nothing and it is in those times that it is the most important to stay the course. Because, it is those who persevere who end up at the finish line. You may be exhausted and you have have finished last but that is nothing compared to the defeat quitters feel when they never see the finish line.