Alright, now that I’ve warmed up my blogging muscles, it’s time to give you something of an introduction. I will try to leave specific details to the resume, but in this and the next few posts, I hope to give you a sense of what it would be like to work with me and the intangibles that I bring to the table.
When it comes to Software Development, I try to have a “can do” attitude and tend to have a lot of confidence in my ability to deliver. It’s not that I am some kind of wiz-kid, but given enough time to properly think about something – even very difficult, daunting challenges – I know I can get it done.
My confidence comes from multiple experiences where I have been thrown into the fire/ deep end/ what have you, without having the years of experience or even the proper skill set that would make most people (myself included) expect it to end well. So far, my track record has been pretty good in those kinds of situations, (which have strangely become a theme in my career), and I have gained a tremendous amount of knowledge, wisdom and skill in the process.
I think one of the things that has helped me to emerge victorious, against all odds, is the ability I have to conceptualize entire systems, with all of their interactions and edge cases, in my mind before writing a single line of code. I tend to be pretty good at building individual pieces according to the schematic in my head, and then bringing them all together seamlessly to make elegant, complete solutions. I think this talent is why I really enjoy the architecture/ system design aspect of software development.
A tangible – and slightly traumatic – example of this talent put into practice would be the data ingestion pipeline I worked on at my first job after college. I was a brand new graduate with less than a year’s worth of professional development experience, and yet I was assigned to a project that would completely overhaul the core infrastructure that made the company tick. As luck would have it, I ended up getting abandoned to complete the project all by my lonesome.
For this project, I had to convert a very complex and convoluted system of API calls, stored procedures, and triggers in a relational database into a just as complex system of API calls and C# code that would do everything the stored procedures and triggers did, but against a non-relational database. The system needed to process millions of records per second, run concurrently, and there was a ton of room for all kinds of nightmarish bugs and issues to arise (and they sure did). The sheer difficulty and scope of this project would have been a lot for a team of engineers, let alone a new grad who was on his own.
Needless to say, there were some rough times and I wouldn’t wish this situation on anyone. It was extremely stressful and my mental health took a beating. However, I was able to see the final system architecture and design in my head pretty early on. That vision of how it would all come together guided me as I built all the individual pieces. I even came up with a custom DSL (domain specific language) to express the database level operations that now had to be performed in memory with C#. Things like joining data tables together and selecting values conditionally based on those relationship, which would ordinarily be impossible in a non-relational database, could still be done using the DSL in an elegant manner without hard-coding those behaviors in the C# code. That last part was absolutely essential, as the way data was joined and calculated varied by client and having to write code to do things differently for each one would have been unsustainable. By expressing those behaviors with the DSL, they could be easily defined and modified, even by the client themselves via a web interface (can you imagine clients defining their own stored procedures? Yikes!).
The system I built is now running in production, acting as the backbone of the entire company’s operations. To this day, I look back at that project with a strange mix of horror and pride. But I wouldn’t trade the experience for anything – it taught me just what I was capable of as an engineer.
If you have read this far, I hope I was able to convey the source of my “can do” attitude and confidence. It’s not that I am the most experienced developer or the best versed in all the hottest technologies, but I have had opportunities to sharpen my problem solving and code design skills that, I hope, set me apart in other ways.
Thank you for reading. Please leave any comments or feedback you have below.