Finish what your start
During the week I had to create some Elixir GraphQL schemas that involved date times. How hard could that be, I’ve already done extensive work with Elixir and GraphQL, what's so hard about date times. Well as it turns out I don’t remember ever using them, so I did my google search and didn’t find a whole bunch which was disappointing. I stumbled upon the documentation for Absinthe which more or less said “yeah there's a date time structure here's the raw code”, no real explanation nothing. I spent a long time in various parts of the system trying to get date times to work properly throughout the system. In the lower levels, Ecto the database wrapper for Elixir excepts raw date times in the format `#DateTime<2015-01-23 23:50:07Z>` which is fine, you can generate them pretty easily. Yet when it came to GraphQL they don’t have any built-in DateTime format, they only except strings and integers. This stumped me for hours after spending hours trying to get the Ecto side working properly. At one point I gave up, I said “I hate date times, I’m going to live the rest of my life without ever looking at a clock again”, so I did, I spent the next 10 minutes not looking at a clock and shooting at the office basketball ring. Then I quickly went back to my code because I couldn’t stand not completing it. The worst part of the whole ordeal was that the error messages from Elixir were just about the most un-helpful messages in the universe. Eventually, I had a thought, maybe I had to make it a string, sure enough, I did, it turns out that Absinthe does the conversion from the string to the date time format supported by Ecto. I was going to give up about every 5 minutes, and I did multiple times but I couldn't get over the unfinished code, the code that haunts developers, the code that says “Hey I’m better than you, you will never complete me”, that code is a dick and it stirs something inside developers that makes them keep going. This spirit is vital in becoming any good as a developer, without it you won't be very successful. You simply can’t cant stick it out if you don't have this trait. This trait that no matter what you won't let the code mock you with it's incomplete, un-working state. You have to solve it, you have to complete it. If you don't have this ego, this competitive drive to never lose to your code, you won’t succeed as a professional programmer.
Finishing what you start is more than just finishing what seemed like impossible code. It's about writing the correct and proper tests. It's about writing documentation for the code you just wrote. Finishing what you start is vital to becoming a great programmer, it's about finishing off the ticket completely, not leaving small items or bugs left over for someone else to deal with. It takes a certain level of character to see things through to their end, often juniors (I’m guilty of this) lack the resolve to finish hard code or properly complete tickets. It’s very hard to become a senior engineer, maybe impossible if you can’t stick things out to the end. I can't tell you the amount of times completing a hard bug or task has been 10 minutes longer, you're just about to give up, or you're just about to move onto another approach and you figure it out, it's often just around the corner. Developing a commitment habit to your code and many other things in your life is the first step to progressing your career. All senior engineers have this habit already and if they don’t they aren't senior material. Without this vital skill, you can't possibly succeed in programming.
I’m always learning something new and with Pluralsight I can have unlimited access to all things programming. But hold on, it’s not just programming. There’s photoshop, visual communication, manufacturing and design. There's a whole bunch! Sign up today and get a free 10-day trial!