Before I get into the nitty-gritty of the blog post, I want to explain my intention behind this series. My plan here is to use this to talk about my experiences in the world of development, any challenges I have, interesting tidbits I've discovered, new technologies I have interest in... I think you get the gist. The topic will obviously change from post to post, but the plan is to have the underlying theme based around development in hopes that I inspire or help other developers out there.
Anyway, my intention on this first one was to talk about an unusual problem I had encountered, which I will cover in some detail, but while drafting the idea in my head I realized there was a much more important topic that needs to be addressed.
Now, I am not a tenured developer by any stretch of the imagination. My first "hello world" program came to fruition at most 5 years ago and that's being generous. As for job title I am a junior developer in a .NET shop. I spend 40 hours a week building internal web applications that take away people's jobs. Most of these apps are ETLs, or for the uninformed, Extract, Transform, and Load. What does this mean? I take data, massage it, and load it in a database to be viewed on a website.
Everyday I walk into work I deal with something known as Impostor syndrome. Impostor syndrome is simply the inability to view the progress or accomplishments you've made coupled with the fear or anxiety of being exposed as a fraud. You will be hard pressed to find a programmer out there who has never once felt this feeling.
For me it usually happens when I feel untouchable and nothing is too hard for me to do. Then BAM! I get stuck on a problem for weeks with no end in sight.
"How am I so bad at my job?"
"Am I even smart enough to be here?"
"Why did they hire me?"
For me, this has happened recently.
Currently I am working on a project where we are taking a large ETL and converting it from a windows console application to a cloud application. The task I struggled with simply populated an excel template with data.
See when I converted the code to the newer framework I was getting an issue. After the task ran, when I opened up the document I received a warning. The document was corrupted and needed to be repaired. Selecting cancel closed the document, while selecting repaired fixed and opened it. Upon further inspection the data matched what I would expect. Well if the data matched and I simply lifted and shifted the code than this is something they must already experience in production right...?
Console apps and web apps live in two complete different worlds and thus a problem arises. With the console apps you have the benefits of working behind the scenes with Excel DNA, but with the web app you must use third party tools. These third party tools don't work the same way as the Excel DNA does which caused the document to become corrupted.
My first inkling was that one of the cells in the document had an error with it. To avoid the frustration of running the app multiple times after changing or commenting out code I wrote a few integration tests. I then commented out code blocks that populated the different worksheets to start to debug the issue. I quickly realized that the document became corrupted when 1 of the 3 main work sheets was not populated. There are a total of 5 worksheets for the document but three of them are absolutely necessary for the file to not be corrupted.
Why is that the case?
The opening sheet was running calculations based on these three main sheets. In the code we were forcing these calculations to run or else the template wouldn't know to do that. When one of these three sheets was not populated it would break the document. When I commented out the calculation part of the code the document would create, open without any warnings, but the calculations would not be correct. To get around this I moved the calculation to the worksheet level, but only if there was data there to be manipulated.
What's the point of all of this and why am I rambling on about boring excel documents?
Here's why, I felt like an idiot for about two and a half days trying to figure out why I was corrupting excel documents from a lift and shift of the code. How did I create something out of thin air? I felt like I didn't belong in the job or the field. When I realized it was an environmental issue and then put the use skills I had accrued throughout my short career I was able to solve the problem. It wasn't until I reflected on all the skills I had learned to come up with a solution did I no longer fill like an imposter.
Often times it's difficult to not feel like an imposter. Many time's we feel like we aren't making any progress at all. My old roommate used to tell me to look back a year from today and ask myself if I would be able to do what I can now back then. Nine times out of ten the answer is no. Learning is difficult, tedious, slow, and often times it feels like you aren't making any progress at all. That's why it's important to celebrate your accomplishments, understand that growth takes time, and most of all not be too hard on yourself. Learning is all about failure so don't be afraid to fail.