Hobbyist Competitive Programmer to Software Developer at HackerEarth




Prologue - Late December 2012, beginning of a new semester.

Reached college campus 2-3 days earlier only to know that we have planned to "mass bunk" the first week. Had no plans whatsoever for the 10 days that lied ahead. Took a stroll around the hostel and found a guy who, I speculated had already started studying for mid-semester exam. On later inspection I found that he was solving some mathematical puzzle on codechef.com. I had heard that name before but never bothered to browse around. He explained me that puzzle with sample input and asked me for output. It all started there, the craving for the green AC tick.


Fast forward to February 2014.

All of the last 14 months, I consistently kept on participating in various contests on CodeForces, HackerEarth and CodeChef. I saw people around me were launching apps, websites and I was stuck in a loop. Competitive Programming taught me how to write an efficient solution, but it didn't teach me how to build a product. It taught me how to code faster, but it didn't teach me how to write cleaner, reusable code. It made me a great debugger, but not so great tester. Debugging in 500 lines of shitty code didn't scare me but 50000 lines of beautiful codebase (with comments) did. My code lived for hours, say a day given that I brag about its beauty among my friends :p. This is when I realized it was time to move on. I had to do something substantial, that would leave an impact, that real people would use.

Right then I, along with Abhinav, started a project which had edX like test environment and HackerEarth like functionality with the motive to use it for offline college practical exams. We finished 90% of work in 2 months but the other 10% is still pending. Yes, it's easy to build a working (beta) product but that extra push, the final finishing touch takes much more time than anticipated.

In Summer 2014, I started work as Software Engineer Intern at HackerEarth. I had already used the product in and out. As a preparatory step, I also went through their other products viz. MyCareerStack (now HackerEarth Academy), CodeTable (collaborative code editor), API. Also, it was fascinating to read about the engineering behind such a powerful product. I believe, for a tech startup, engineering blog drives better job applications than their careers page. I sent out an email (in search of internship) to Vivek right after reading about HackerEarth technology stack.

I began to commit code from Day 1. The fact that my code is going to affect thousands of users was exhilarating. I enjoyed the ownership of the features I developed. Everyone does end-to-end full stack development. You pick a task, develop and deploy and own it for the rest of your stay. 9 weeks passed like a breeze and I left for college with a mindset of coming back to HackerEarth next summer as a full-timer.

June 2015 - Back to HackerEarth!

Whoa! I left a team of 10 and now I see a team of 50. I observed drastic changes in the way we operate. Last year we were close to a dozen people who did development, designing, marketing, operations, sales, support, content generation etc as a whole. Now we have dedicated teams for Engineering, Design, Sales, Operations, Marketing, Support etc. There's more to it. Engineering team is further subdivided into teams according to the product they work on. I'm currently working on the recruiter end of HackerEarth.

The development and deployment process has also changed a lot. Now, every single line of code I write goes through a review process. Is it optimized? Is it modular? Does it follow our writing guidelines? Oh and obviously, does it work without breaking anything else in the production? The whole process slowed down the development. But it is important that we maintain the quality of code pushed into master because by-and-by you'd spend more time reading someone else's code than writing your own.

The description of complete development cycle is not in the scope of this post, but I'll make sure I write about it someday. We make quick decisions and adapt to changes in no time. For instance, recently we moved from JIRA to Phabricator in order to improve code review process. Everyone still works in full-stack end-to-end on any product/feature, which ultimately leads to fast and easy development. I do not work 9-5 but I make sure my tasks are delivered within reasonable time frame. On major deployment days, I might stay till 12 or even 2 in midnight while sometimes I'd spend whole day playing and chilling without accomplishing anything :P. You get the trend now, right?

Epilogue - 100th day at HackerEarth

Today, September 9th, marks my 100th day at HackerEarth as full-time Software Engineer. I truly enjoyed the last 3 months. This change from Competitive Programmer to Software Developer was meant to happen. It's not that I didn't enjoy CP but shipping features is far more challenging and rewarding than AC tick in a contest. My work gets recognized by the team and more importantly by real users around the world. I double my knowledge and productivity every week. My code is going to live longer, for years. And more so than anything else, I have faith in the guys who run the company.

Till next time. EvĂ­va!