Shedding Intern Season upon HackerEarth — Summer 2018

Hi, I recently completed my 3-month Front end engineering internship at HackerEarth and it was quite an amazing experience!

A little over a year ago, I walked into my first ever tech interview. A freshman with little knowledge of data structures and web development got selected for his first software-development internship. Having interned at another good startup afterward, infused a lot of enthusiasm in me for working in teams, building products, and learning things.

I, as you may know, love working at startups and watching them grow. Looking back at the past few months, I am amazed to see how much I have grown with respect to knowledge and understanding with realization that there is a lot more for me to learn.


Getting Ready

Gaining 12 months of internship experience, getting from 0 to 1, and aiming for 100 — I was ready and excited to learn even more and go bigger this time. Bigger in terms of users, stack, scale, and teams.

What can be better than contributing to a platform everyone around you knows about — HackerEarth!

Sending the Email

In December 2017, I sent an email at contact@hackerearth.com with a cover letter and my resume for the summer intern position at HackerEarth. Two weeks later I got a call from the HR, regarding my application and she explained the rest of the process.

I was lucky to clear all 5 rounds (including 1 app development test, 2 tech interviews, and 2 non-tech interviews) and get an internship offer from HackerEarth.

Believe strongly with unwavering faith and you can move mountains — always remember that 🙂

Never believed that I would get the opportunity to intern at a startup like HackerEarth — just after the 2nd year of college and yet it happened! That moment gave me a sense of achievement and joy — something that makes me believe in dreaming big, after all, it does not cost one to dream.

The Journey Begins

I still remember the day I joined, 11th June 2018. I was welcomed warmly by Narasimha and Navaneeth. They introduced me to my BUDDY — Lavish Aggarwal (The coolest guy at HackerEarth, Mozilla contributor and above all “Gaitonde” ~ his nickname).

There are mainly two products at HackerEarth — HackerEarth Recruit (recruitment management) and HackerEarth Sprint (innovation management). I was a part of the Recruit team and that is where I contributed that most.

I really appreciate the fact that every intern is paired with a buddy from day one to help him or her with everything. Also, you are introduced in person to every employee in the company!

Istarted with contributing to Nuskha (the react UI library of HackerEarth). I worked on adding minor features to some basic components like buttons and modals to get insights on the vast source code. Nuskha was built as a hackathon project by Chandransh (the all-time mentor) and Akanksha (‘woman-in-tech’ idol).


Later, I worked on FaceCode— HackerEarth Recruit’s video-interview platform, with Jagannath (Jaggu or Jag) and Akhil (George the Designer), two of the most humble people I found at HackerEarth. Our tasks included revamping FaceCode, add new features, and improving the legacy product.

While Akhil showed us the path by building designs and wireframes and re-iterating over them to build the best product out there, Jagannath did all the backend and engineering work. He even helped me with front-end issues whenever I was stuck while building the user interface for FaceCode.

FaceCode v1.0

It was an honor to work with both of them and lots of fun too! They will always be remembered.

Chaitanya (the cyclist) and I under the guidance of Udit (“Sartaj” as we called him), worked on making the HackerEarth Recruit GDPR compliant. Though a very small project, I learned a lot of things. Our challenge was to track European user, ask for the required consent, and save it.

I was really glad to see how seriously privacy and data protection of users is taken care of at HackerEarth.

Finally Lavish and I worked on adding Team-management feature to the HackerEarth Recruit. This project included building a react app to manage team members and a REST API for the same.

We did it and we launched it

The first task was to replace the current Team management page with a react application thus providing users with a better user interface and functionality. The next task was to add capabilities to create teams, add members to a team, and perform other operations.

I started by building a generalized table with sorting, searching and pagination functionalities and added it to Nuskha. The table could then be used in other projects and implemented with all the features by writing just a few lines of code.

Then, I worked on using that table in the React app that I had developed. This was then integrated with the REST API (developed by Lavish) while implementing all the required features.

This was really an interesting project. The best was part was that Lavish and I — as a team has an in-depth discussion about the how the API should work and how it should be consumed by the client app. This really contributed a lot to my learning.

Remembering the Moments

HackerEarth, a team of 150+ people.It is a very strong organization which works really hard to deliver the best to its customers and community.

The main cultural code of HackerEarth is “ Don’t be an asshole”.

It is not just a place for hard work but fun and play as well. HackerEarth is a culturally rich organization. They have a lot of events.

Social — the cultural event at HackerEarth, which is celebrated every quarter. People participate to showcase their talents like dance, writing poetry, singing songs, doing stand-up comedy, and a lot more. I was able to attend one in June. It was a nice experience being with so many energetic people who were enjoying the moment.

“Rubber Band” band performing at HE Social

Potluck another great event which promotes social interaction, bonding, and overeating. On this day people cook and bring dishes from their home, arrange a buffet, and have a grand feast together. Being an intern, all you need to care about is being on fast the day before!

The dish I liked the most was Akanksha’s coconut rice.

The Great Hackathon — which is an internal hackathon hosted by HackerEarth every quarter. This is done to collect new ideas and improve existing products.

While Chandransh worked on adding real-time linting capability to the code-editor and became the winner, we came third.

Manoj Jeswani (another intern) and I teamed up to participate in the hackathon and worked on automated deployment and testing for front-end apps.

  • Aim: To make it easier for a recruiter to test the front-end skills of a candidate
  • What we did: We created a micro-service that builds and deploys any Node.js based, front-end app irrespective of the framework on which it is based. For example, on React, Vue, Angular or any other JavaScript framework.
  • How does this help: This will save a recruiter’s time by allowing them to simply check the preview that is deployed.

We were also able to show real-time build logs to the candidate. We also planned to extend it further to do the following:

  • Perform snapshot testing by comparing the web app’s snapshot with the images provided in the question.
  • Analyze code quality using eslint to provide a detailed report of the candidate’s performance.

Being new to Docker, it was difficult to achieve all this in just 24 hours. We were really fortunate to have Udit support us in building the pipeline.

All Hands — the whole company gathers to listen to Sachin’s (co-founder — HackerEarth) company-related updates and answering to all the questions collected from the employees in an anonymous manner. He helps the people with all their doubts and provides information about the company’s future.


As he always say “The company’s growth is nothing but the growth of its employees” thus, motivating everyone to dream bigger and reach their personal goals. He also shares all the milestones reached by the company and the roadmap ahead.

On All Hands day, all the newcomers have to give their introduction and show their dance moves (mostly on a song of the audience’s choice:p).

Engineering All Hands — happens bi-weekly on Friday. People from various teams present what they have accomplished, technical difficulties faced with solutions, and what they learned. It is a very effective way to share knowledge, know what everyone is working on, and get relevant suggestions. I once got a chance to present the team management project and it was an awesome experience.

Photographer of the year — HackerEarth doesn’t just have great engineers, salespersons, or designers but great photographers too. There was an in-house photography contest hosted with 4 different themes — people, work, play, and architecture.

Clicked by Lavish

Independence Day Celebrations— people at HackerEarth are no less patriotic than anyone else. With flag hosting, reciting slogans , a few poems, the day was well spent.

HackerEarth 2,000,000 Strong — I was lucky to be part of HackerEarth when it reached 2 million users. We had cake cutting and celebrations.


Not Missing Deadlines

I feel that the workflows and the process of taking up a task and completing it are very efficient and effective at HackerEarth. The team follows a sprint of 15 days, in which everyone takes up their task, completes the development, gets the code reviewed, get its QA done (with the help of a really hard-working QA team), and pushes it into production.

To make the sprint efficient and successful, scrum meetings are held on alternate days. Not everything gets completed and there are spill-overs as some unaccounted things come up. The leftover tasks are moved to next sprint and things are planned again to set the goals straight.

People always help each other in making the product better. A lot of constructive discussions take place where people suggest their ideas about product decisions, engineering solutions, and much more. Everyone is motivated in delivering the best to the HackerEarth’s customers and contributing in the best way that they can.

What to expect as an intern at HackerEarth?

  1. Don’t expect to be an intern. You will be treated as a full-time employee. Your suggestions will matter the same and you will have the similar amount of work to do.
  2. Challenging work with a chance to learn from experienced developers and work on projects having a scale of 2M users.
  3. Free parties and outings :p. (quite a lot parties happen at HackerEarth)
  4. Great office and location. (8–9 cool places to party within a 200-meters radius and many more nice places to eat at)
  5. Play table tennis, foosball and carrom board. (you won’t win easily)
  6. A bunk room to sleep and a stocked pantry for when you are hungry.

People who made it even better

  1. Chandransh — my all-time mentor. Though I never got a chance to work together on a project with him, he always helped me with things, whenever I was stuck, while working on any project. He even solved quite a few bugs for me. Every discussion with him taught me something new.
  2. Himanshu — my all-time party buddy. This person made the 3 months even more interesting. I can’t even count how many Friday nights we spent together partying around the office. A cool person, a nice guy, and a neighbor in Delhi. All that time wouldn’t have been the same without him.
  3. Lavish — my all-time buddy/mentor/bro — the Gaitonde. From the first day to the last day, he made life at HackerEarth fun. You’ll be lucky to have him as a buddy.

Thank you

HackerEarth is a great place to work at, learn, and grow. I was fortunate to spend 3 months working there and contributing to the product. I will always remember this time. Thanks for the chance and for believing in me.

clicked by Lavish

Building Gitfame — Github Open Source Contributions Analyzer

All it takes one to learn a new framework, a language or a third party API is to build something out of it. With the same thinking I started with this project Gitfame — Github open source contributions analyzer a long time back in October 2017.

Check it out: https://gitfa.me
Find it on Github:
https://github.com/hereisnaman/gitfame

The open source project was meant to be presented as an example PWA application at GDG-ND Dev Fest 2017, for my talk on “Progressive Web Apps With Polymer”.

Talking about PWAs at GDG-ND Dev Fest 2017

Gitfame 1.0 (Polymer Js)

Gitfame started as a frontend only application based on PolymerJs, though now is based on React Js with a separate server based on a graphql api built with graphql-yoga(nodejs). With the consuming the best of PolymerJs the web app easily implemented the features including:

  1. PRPL pattern (learn more: understanding the PRPL pattern)
  2. Work Offline (learn more: offline caching with service worker)
  3. Push Notification (learn more: using platinum elements)

…and much more.

PolymerJs out-of-box implements sw-toolbox and sw-precache for easily setting up service workers and pre-fetch, pre-load resources.

The webcomponents.org is house for 1000s of web components which makes the development much easier and interesting.

The PolymerJS based Gitfame is available at: https://github.com/hereisnaman/gitfame/tree/polymerjs

Gitfame built with PolymerJs

The earlier version of the Gitfame based on PolymerJs consumed the Github’s V3 Rest API for fetching fresh data for the user and performing basic analysis such as stars, forks and commits per repository and same collectively. Multi pattern caching was established as to provide fast website load and offline user experience. Combining the offline working capabilities and providing a manifest.json for the web app, made the app possible to be saved by the users at home screens on their mobiles.

Gitfame 2.0 (React & Nodejs)

Taking the idea forward I decided to re-write the project using ReactJs for frontend and NodeJs for backend. This time I focused on doing much better analysis and consuming the then new Github V4 graphql API.

Gifame 2.0

Consuming the Github’s graphql API, I was able to reduce the response time to about 75% and later optimizing the requests, to about 60%. With graphql you can request only the particular fields that are required by the app making it faster than consuming the REST API.

Although Github’s graphql API is fast in some cases but till the time of writing this post, is unable to deliver big queries. It breaks even when querying for total commits and total user commits of some big repository in a single request.

The latest version of Gitfame perform in-depth analysis:

  1. Popular owned repository based on stars and forks
  2. Repositories per language analysis
  3. Owned and forked repositories per language distributions
  4. Popular language based on stars and repository count
  5. Primary and sub language repository count distribution
  6. Total stars, forks and watches of owned repositories
  7. Issues and pull requests analysis

Another Iteration: Writing the Graphql API

Recently while learning graphql I thought of updating the then present Gitfame REST API into a graphql API. howtographql.com being my first source of learning graphql, after obviously reading actual graphql specs from the docs, made me aware of the great development going at graphcool, the graphql-yoga and prisma.

Find the Gitfame backend: https://github.com/hereisnaman/api.gitfa.me

I wrote my first ever graphql API using graphql-yoga — a wrapper around graphql-tools, apollo-server and express. The other library prisma — provides database as a graphql API. Working on providing connectors for all major databases, currently Prisma provides connectors for MySQL and Postgres.

Gitfame uses prisma with postgres connector. The database schema is defined in form of graphql schema type definition. Prisma takes this database schema and build or make changed to the database structure. It then generated the graphql API schema for the database, which provides much more advanced query and mutation options than any other ORM I have tried, making it very easy to do tasks like pagination, subscriptions and more.

The then generated database graphql API is consumed by the prisma-binding for performing operations on the DB easily in NodeJs. Gitfame thus have a 2 level graphql API architecture. The application API based on graphql-yoga, which the client side interacts with, above the underneath database API generated by Prisma.

Upcoming Features

Working on making the app much more sharable and interactive the following features are in pipeline:

  1. Share report as image
  2. Latest user searches
  3. Compare users
  4. Push notification alerts

Conclusion

This has been really an interesting project with learning new things by experimenting with different frameworks and libraries. Don’t forget to checkout it out at gitfa.me.

Spend 4 Mins Not Earning Money And Knowing Your Next Big Mission

“We all just running after money”, It’s a truth that I think you should consider. You are working hard, doing extra hours in your office to impress your boss or probably just to perform well but what for?

Most of the time to get a promotion, which in turn gives two things: some increments to your “the people who call me boss” list and most importantly bucks $$$, comment if I missed something. Okay, some “self-satisfaction” stuff too, yeah we can consider that.

I am the Boss

If you are yet a student like me, then you probably be struggling and working hard to get yourself placed in some nice big MNC or to start something of your own, (same as me), then what next ?

We all have that short goals and plans for ourself, most of them revolving around bucks $$$; and if you don’t even have some goals, your motivation tank is just empty, that is quite same as being dead.

Have you ever thought doing something more than just earning. Do you strive to create a legacy or bank balance? And if not both, then just stop reading this, you are already dead, starting worshiping “Light God” and figuring out a way to get back to life, as Jon Snow did.

I challenge you to stop reading and start asking yourself:

What after you be the next Bill Gates (from the money side)?

What after you be what your boss is at the moment?

What after you are successful? Even when that “success” is something most of us spend our whole life not understanding what it really means to ourselves.

Think

Well if you are back from thinking about it and quite surely I would say, didn’t get the answer to the questions and you probably won’t get it in next 5 years, I too haven’t got mine, people don’t get all their lives but what matters is “Think” because “You’re gonna die”.

You may remember the famous clip by Gary Vaynerchuk:

The greatest thing about accepting your own death and using “You’re gonna die” in a very positive, optimistic, empowering way is that it motivates you to do extraordinary things. — Gary Vaynerchuk

It’s obvious that someday we are all gonna die and if you are living that “being settled” the dead life, you have to first come to life and then die again.

Think if you have just one week to live. The inner you might be like “Shit! There is so much I have to give, if I had known it earlier, I would have squeezed everything out of what I had”.

Now what? You probably won’t run for money now, with only a week to live. “What will you do then?”, ask yourself.

And if you just want to live your life earning money that is quite okay. I am not compelling you to think more.

Let me be rich

Our society teaches us to be rich. Whenever you try to be “better”, it tells you to be “better than others”, being a selfish moron. And trust me you’ll need to do a lot of hard work to just take the positives from it.

There will come a time in your life or might even already have; when you have some set back, quite be possible on situations like you prepare hard for some interview and you don’t clear it or when you have a lot of pressure from office and you’re exhausted or might be even when you just have a breakup with your girlfriend; you will go into the “discovering the inner-self” mode.

Hello my guiding angel

That moment you’ll think about “What your next big mission is?”

Do everything, enjoy life, just don’t be a selfish moron, and most importantly Think!

The Story of Yet Most Rewarding “Open Source Summer”

For most college going Delhiites, the arrival of summer is a halt to late night studies and stressful examinations. Many students will spend their time visiting to some cliche hill station, running from, the city being showered with the wrath of Apollo; while others will spend their summers employed as interns.

I, on the other hand, who had then recently got to know about GSOC and Season of KDE, already eager to contribute to open source, was informed about an upcoming similar program, BOSS. I devoted myself to BOSS — Bountiful Open Source Summer 2017 challenge. Not an internship but a voluntary participation contest.

Many dreams of getting accepted into GSOC but does not know where and how to get started. And as it was same with me, BOSS appeared to be a red carpet for starting my open source journey.

What was BOSS?

BOSS was a contest powered by Coding Blocks. To be the winner one needs to collect maximum bounties by fixing issues of any project which comes under Coding Blocks umbrella and eligible for BOSS. There was no registration or any such complex process to start with. It was open to anyone willing to put efforts and contribute.

The Journey

The contest started from 15th May 2017 and ended on 15th August 2017. I started with exploring different projects and understanding their code bases, which eventually led me to fix many issues and be a very active participant.

Github Contribution Chart Summer 2017

With every PR getting merged and seeing the world using my lines of code, my motivation tank was getting refilled. I worked on projects like Online IDE and Hacker Blocks— an online code submission and assessment platform for Coding Blocks students.

This was an amazing and very engaging experience. There were plenty of issues with bounties assigned to start with. Mentors assigned for each project were really supporting and helped at every point where I stuck. The community was awesome, people including the mentors and the participants too were always ready to help.

My Contributions

I worked on about 9 projects ranging from web games and Jekyll based blogs to online coding platforms; some of them I mentioned earlier.

BOSS Leaderboard

I started my journey by submitting my first pull request for the Coding Blocks Blog. I improved UI in some, added minor and as well as major features in other projects and even worked on a project from scratch.

In the course of three months I submitted 64 pull requests out of which 60 got accepted. I managed to grab 9650 bounty points which made me WIN the BOSS Contest.

Being The BOSS Winner

Welcomed at Open Source & GSOC Meet Up

I started my journey with the thought that I might land in top 10 and grab a T-shirt as a prize, and even that thought motivated me to participate. But as I kept on contributing and collected bounties I became the BOSS 2017 Winner.

It is obviously a great feeling being successful at what you were devoted to. Last summer was the best one yet, the amount of things I learnt and achieved during this time is of great value. This was really not achievable without the support of the mentors from Coding Blocks, the great programmers, recognised open source contributors and GSOCers namely Arnav Gupta, Umair Khan, aayush arora, Harshit Dwivedi and Prateek Narang.

The Rewards

I consider my experience participating in BOSS- the open source challenge, that most rewarding one. Open Source has made a huge contribution in developing the world of Information Technology by showing new paths, building new roads and making the journey of a coder more interesting every day.

Receiving First Prize at Open Source & GSOC Meet Up

By contributing to open-source, I was able to develop my skills while at the same time, I was able to collect bounties which led me to win a MacBook Air 2017 as a prize with some more goodies.

But the best prize: was that feeling which I feel every time someone uses the tools and platforms which I have contributed too. It gives an immense feeling of joy and satisfaction when the world is using your lines of code daily.

The noblest pleasure is the joy of self-satisfaction and understanding.

The Conclusion

After participating in BOSS, I can really say that I am an open source contributor. If you are looking forward to do some open source contribution, there is only one requirement i.e. willingness to learn. You just need to be motivated for the cause.

You can start with exploring GitHub for trending open source projects. Once you find something you are really interested in and want to contribute to, just start with reading and understanding its source code. You can add some new features, resolve the issues and can even open a new issue if you find one.

You will learn a lot of things in the process, don’t get disappointed if your pull request doesn’t merged, take it as a chance to learn some thing new.

Most importantly Have Fun!