code for yourself

January 2022

I started writing code in high school about 3 years ago. When we as students learn how to code, we reach a point where we are done with the material that is provided. This material could be a lecturer's notes, a textbook, a blog or, a youtube video. And then, you go, now what? You have this new skill and you somehow want to exercise it, or at least, you ponder about exercising it.

A common piece of advice is to "solve problems on coding platforms", which is okay. Another common piece of advice is to "build projects". I want to dig more on this one. I think this advice is good. But it is vague. It leaves you with more questions than answers. And that is probably okay because life is about figuring shit out by yourself. And in my course of existence and "building projects", I want to share an idea that has worked for me over time. By “worked”, I mean that it keeps me fulfilled and helps me during interviews. The idea is to code for yourself. What do I mean by this? I mean that you should write code that solves your problems.

Why? There are quite a few reasons to do so. Building a personal tool makes you feel more involved in what you do. I see many people making projects for the sake of making them. The difference I feel in building something personalized vs something that is just a "get the grades and throw it away" thing is a certain level of disconnect with the process. I care about the code being written in both cases. I care about writing correct and fast programs. But when I am working on something that is being made just for the sake of it, I get a voice in my head that goes, "you or anybody else won't use it the day you declare you are done with it". And that is scary to me. Why did I build something the world or I won't use? And I see this trend quite a lot. I see many people on the internet building vague things that don't add value to their own life but are just a display of the ability that they can write code (or maybe, just copy code, given the abundance of it). A common example of this is "clone apps". A “clone app” refers to an application that is a copy of, usually, a famous application. This is not an official term. That is just how I want to describe it. Examples of building clone apps could be cloning facebook, medium, or twitter. Now, clone apps are in a way, powerful. When you take a popular web/mobile application and write it yourself, you might have to take care of many things, depending on how you define your feature set. But the problem is, it is hollow. It is a display of skill with a dead end. That clone app does not find a way into anybody's daily life. It does not help anybody. Your employer might like it but that's the only good part about it. But, a personal project, makes you stand out in times when so many people want to get into tech. You have your own feature set. You have your own set of problems to solve. You have something that you can't just copy from a tutorial. You are forced to think. You get to go through the process of building something that makes an impact.

An obvious follow-up question is: how do you come up with things to code for yourself? Well, let me admit, I am not an expert in that. It is somewhat tempting to implement lightweight clones of existing software. In my experience, it has not been easy to keep coming up with project ideas that solve my problems. I think you need to introspect a little. You need to pay attention to what are the pain points of your life or what is it in your life that could be done in a better way. I can give some examples from my life. maketest is a tool I built to generate mock test data in large numbers with customization of data types. Another tool that I built is kkrh, a personal activity tracking service. Another relatively simpler one is the dead-simple notepad that I built that just helps me take random notes at ease, without leaving my browser. I built delp to bring some commonly used dev tools together. subcode is a python script to help me convert code with sample input/output into pdf. This site you are on is generated using makesite. And here is one thing that I have noticed: building these things can lead you to discover more things that you can build. For instance, when I built kkrh, I needed a way to capture and process the application logs and do periodic health checks. This paved the way to kkrh-meta. When I wrote this page that showed my GitHub contributions, that gave me the idea to build collector.

An aspect of this is how do you allocate time for these things? I don't have a definitive answer for that. it is upto you. what i do think that has helped me over the past two years is the structure of online classes. remote life is a boon.

A thing that you should pay attention to is deploying and/or releasing your projects. It is important to put your work out there. In most cases, building things and working on actual projects is a much better way to improve than grabbing course completion certificates for LinkedIn. If your project produces binaries or APKs, you could just release them via GitHub releases. If you have a frontend-only thing to host, you could use Netlify. For a backend, you could consider using Heroku. Heroku gives a free PostgreSQL database with 10k rows to work with. If you need Redis, you get 30MB free from here. You could also look into Firebase or Supabase if your use-case fits. Each mentioned thing has at least a free tier which you can use to put your project out. If your project picks up attention, you can probably monetize it and fund your way to the non-free tiers, which brings me to the idea that when you pursue your interest and build something, it has the potential to be monetarily beneficial to you. So a random passion project can turn into a business if it meets the needs of the masses.

My intention here was to highlight that personal projects can be fulfilling and beneficial in many ways. I am not suggesting that this thing replaces the rather usual things that students do: leetcode and building clones. Leetcode gets you through those DSA rounds. Building clones helps you exercise the tech you know. But when you are not doing any of that and looking for something to code, consider the idea of coding for yourself.

Vivek

<- back to home