The day my project trended #1 on GitHub

Source: Deep Learning on Medium


Over the past 24 hours

It was a Sunday night and I was finishing up some applications for the Graduate Program I was applying to. Before I went to sleep, I wanted to open source a project I had worked on an year back. I had liked the work but had somehow never really found the time to clean it up for outside viewing. So I added a demo gif of the working of the program and a basic README that briefly explained the project’s reason for existing. After putting up the link on HackerNews as I have a habit of doing, I forgot about the project and started watching reruns of Game Of Thrones. This was at around 10 p.m.

An hour later, I received a message from a friend with the words “bro” and a link to a Twitter post. I checked it out and saw that the HackerNews bot had tweeted out my project link. Curious, I logged into the site where I witnessed

this

Well, there were only around 10 odd comments at that time but that was huge for me. I was freaking out when my friend who has been through this a few times before (Manraj Singh) told me to calm down.

This was really the worst repository to go viral, I had a file on the root folder titled “plswork.png”, the requirements.txt file was missing (build script), generated files and the cherry on top of the cake was the non existence of any instructions to build and run. The only thing it had working for it was the gif below (thank god for that). In my defense, I expected nothing more than a few stars from my friends a good ‘ol pat on the back. Best case scenario being the college admission jury taking a look at it to verify it’s existence. Comments disparaging me for releasing such a shoddy repository with little to no git hygiene were beginning to accumulate..

Before things got out of hand, I quickly checked out the repository and made the necessary changes and apologised on the thread. My saving grace was the line, “This is by no means a production worthy software, it only intends to be a demo”. That’s the 1st lesson I learnt about open source:

Don’t try to fool the people or hype your work. The developer community will spot it and disregard you. Furthermore, it also reduces your credibility as a developer. and makes you seem disingenuous.

Now would be a good time to describe my project. Here’s a gif that would explain it far better:

The doodle detection is via a Convolutional Neural Network

Back to the first day experience, the Hackernews community was holding an intense conversation where the benefits and fallacies of “Codeless UI” were being discussed. There were some well made points which I shall try to very briefly summarise

  1. Novelty: It seems like an organic and natural way of designing interfaces and seeing the results in the form of live code in real time. Proponents dreamt about a future where AI would be intelligent, introspective and mature enough to understand and create the code for complex UI.
  2. Fallacies: The demo is quite similar to drag and drop systems that have existed since a long time, further more learning a new visual design language is too demanding just so the user can draw a doodle.
  3. Fallacies (Cont): Training a model for every new component is not feasible even with transfer learning. UI isn’t as easy as placing elements on a screen. This is just a rework of decades old UI software that bascially do the same thing. As you can see, I can go on…

Rebuttal

Now I realise that this nowhere near a product that people can use effectively nor is it the “right” way of going about UI development. I am however a strong proponent of AI’s capability of influencing UX/UI development. A few things I can think of the top of my head are:

  1. Understanding what the user is trying to achieve and recommending code samples for that use case. This would be useful as an IDE feature, I believe Microsoft is working on baking in intelligent code suggestions in it’s products.
  2. Understanding positioning of elements and forming a rough layout that the user fills in with his/her UI components. One of the tough parts of UI development is retaining the design under different perturbations to the screen size (Responsive UI). A tool which does that would certainly be useful.

The point I’m trying to make is that this project doesn’t aim to provide a solution, but rather roll the ball further.

Pipe Dream

In the future, I see a tool that is able to generate UI instead of classifying it. Now such a tool should be smart enough to write responsive code without requiring rule based heuristics. Of course this is a long way off but it is certainly be possible. If models can moderately understand the English language with all of it’s contradictions (in some cases better than humans, see BERT), I believe UI should pose a simpler challenge given enough training data. Of course, this is all just educated guesswork.

Back on track

Anyway, the project became quite popular with it gaining around 50 stars every few hours, the 1000th star was an incredibly special moment. I presume it will stop soon but what a ride it has been :’)

I am really in awe with how the open source community has reacted to my work. I have been contributing and uploading my work to GitHub for about 5 years now not even dreaming of this (2nd most popular repo: 18 stars). This brings me to lesson #2 (Disclaimer: this is opinionated)

Work on impactful projects, think about what the requirement your project fulfills. Aim to better the state of the art or bring something new to the table. Also if possible try to visualise a future for your project.

I am really grateful for all the support of the people who allowed this to happen and am greatly energized to do this all over again. I think if I can have a most trending project, so can anyone else. It is a combination of luck, a novel idea and solid execution. I hope this post inspires you to start your own project and see it towards completion :)

#1

TLDR;

  1. Maintain a clean repository with instructions to build and run your project.
  2. Present your project well, but don’t oversell it.
  3. Share your work on HackerNews, Reddit and relevant Facebook groups.
  4. Be kind and responsive.