Very often, we as developers want to learn more, master new skills. The process usually starts with finding new technology to work on. For example, if you love mobile app development and you've enough knowledge of building iOS apps with Objective C, you are more likely to learn Swift next. Now, you search online or go to a Bootcamp to learn Swift. You do well because you have a solid programming language understanding. Then it's time to develop apps with this new language. You do make awesome projects, beautiful projects, user-friendly and sensible apps…
Cut short to 8 months, you're sitting in an interview which you know will allow you to grow as an iOS developer. The interviewer then asks you something which you think is very cruel. "Can you describe the process of how you started with this XYZ project and what all resources you took to get help?". You're jammed. Like literally! You sure have a sharp brain, you do recollect the help you got from your mentors or online, but the process? What about that? What you lack here is attention to detail.
Let me first clear two things:
This article is focussed on improving your ability to make good projects, taking along the best practices to start a new one (considering this is your first project) so that you become a complete developer (not another developer who purchases courses on Udemy, makes the same project which has already been developed by hundreds of other students, then forgets what did he did after some time).
This is the first time I'm writing such an article. So, if you find anything wrong, make sure you write it down in the comments, I will correct it wherever there's a need. I still recognize myself as a student, these are my thoughts of what I found over these years coding and making projects.
Looks like I've cleared out what I wanted. Okay, let's keep going!
Usually, there are three steps:
- Collecting ideas for the project 💡
- Planning the project 📝
- Building the project 🛠
Let's take a look at them one-by-one.
We've been there. Struggling to decide what exactly to make! We've heard programmers solve others' problems by writing code and making software. But how do they get an idea? Well, here's what you should do:
Whether you're an experienced professional or a newbie in programming, you will find tonnes of projects. The great thing for this 'newbie' is that they can look into other's code for free. You not only get to know what's happening in the world of your favourite programming language/technology but also, you will observe how other professionals out there write code.
2️⃣ Expand on an existing work: alright, you are just blank when the word 'idea' struck your brain. Do this, you must've been using products, right? Take a slice out of that big product and try to implement that on your own. Let me give you an example, you use WhatsApp every day, do you find anything you wished would be there but it's not there yet? Like I want WhatsApp to have animated sticker support. Make this! (Lol, I just gave you an idea for free!).
You have a basic understanding of how to write code for an iOS/Android app, now research, go through different websites, take notes, follow on your steps to make it happen. You'll never be the same person before and after you implemented that feature on your own!
3️⃣ Improve if you've already made one: now you have 5–10 projects sitting idle on your drive which you coded along with the instructor while attending a Bootcamp or an online course. What happens most of the time is you complete the course i.e. make 5–6 good looking projects, but after you're done with the course, got your certificate, you leave those projects right there. I did that too.
What you can do is take one project from the lot, modify it, add a new feature, or at-least change the interface to make it yours. If that feels not a great move, change the stack. Hah, that would be good! Building a web-app with React? Do that same with Svelte. Look for new tech stacks that are in demand and those which you can build upon. As I said already, there are thousands of students who've built that recipe app, recruiters have seen that, to be at a different league, you need to work hard and give that recipe app your 'twist'.
4️⃣ Don't hesitate to go beyond and work with a buddy: if you think "I'm a backend developer who cannot code frontend stuff" then you need to rethink. There's no harm in that.
Consider this, your nerdy friend did the backend stuff already but he's your project partner in a big hackathon, which you believe can win, or at least come as a runner-up, now he needs your help, then what you will do? Sit idle thinking of that trophy to come to you begging to collect? No, that won't happen. You will do that scary frontend part of the project. Yes, it will take a hell lot more effort from you and your friend but that shouldn't stop you from learning and getting out of your comfort zone. What's more soothing than calling yourself as a frontend developer although you love backend so much!
5️⃣ Ask others while you still think of becoming a freelancer: there is no harm in asking. We, as humans, talk a lot. But we as a programmer should ask for help, ask others if you can make their project(s) for their business? Be it a simple static web page or making an entire database for their company.
Of course, you can do this all for free, you're not a freelancer here. Remember, you should code for your passion, not for the sake of money. Hell no, you should do any work for passion and not just for money. Those dollars will come eventually if you do your work with full passion and patience. You're building nice projects, improving your skills and gaining more knowledge not doing a job in a company.
"In order to be irreplaceable, one must always be different." - Coco Chanel
A beginner might think "What's the need of planning when I'm about to make a very small project. Oh, 'project' is such a heavy word for that! It's like school homework…". Now here's what a programmer with a project plan and without a plan don't have in common - a better result.
1️⃣ It's about tech stack!: For the first-timers, stick to the programming language you love to code and are most comfortable with. Don't rush seeing others that they're using a framework or a platform you never heard of.
You know HTML and CSS, pick it up, do that 'design to code' stuff. You'll be so confident after you convert a design file into a working HTML document. Choosing a tech stack is the first step in planning your project. This might seem so obvious, but I have seen my mates choosing a framework first, dangling with it and eventually making a WordPress website…Don't do this, please.
2️⃣ The project outline: Take a piece of paper (or your code diary - as I have it), write down your project title (which may take your entire day to think about), write a short description of what this will do. Do you have this ambitious idea of fixing your city's networking issue to provide each family with a secure and private network with a mobile app? Pen down how this app will help others, how it will be operated by a noob. Figure out your app's features, make bullet points, what it will do and what it won't do. This helps to clear out any further doubts.
When you're the single person making this project, you will also take other's hats, for once you'll be the User Interface (UI) designer, the next time you'll be writing some code that connects your database to a backend service like Amazon Web Services (AWS). Make sure while making the design of that app, you provide some arrows between your app screens to show the flow of the app. This will make your work consistent and you'll know beforehand which screen to build after the first one. Of course, whatever you can do with a pen/pencil and a sheet of paper can be done with software/services like InVision Freehand, Sketch, etc.
3️⃣ Figure out the code/external libraries: we're still not there yet opening an IDE and writing code. Before this, you should know what classes or what dependencies your project will need to implement the features you listed above. For example, if you're making that same app using Flutter, then you can write what widgets you'll need to make the UI you need. Where will
RaisedButton come into play? How to request the backend? Is the default
http package enough? Make these decisions here, read the official documentation. Don't go for those outdated articles. Yes, the documentation might look boring but this is the single most source of truth for developers. You will make a habit of reading the official docs.
The idea of using an architecture pattern like MVT/MVC can also be decided after you've listed down the project's features. Break your project into different modules you'll need, separate the 'UI-only' files from the 'logic-only' files. This will clear out what you should code first.
4️⃣ (Optional) Make a timeline: are you someone who tracks work based on the number of days or the amount of time spent? Love the Pomodoro technique? This will be a cherry on the cake for you. By now you must already know how big or short your project will be. Is it an e-commerce app? That's big! Is it a todo-app? That's short.
Use a calendar, mark the day you'll start the project, take a slight guess of the last day of work (of course, this will change multiple times, no one's perfect!), make notes of how much time you are willing to give it each day. In the beginning, we all have that crazy enthusiasm to work which slowly fades away. That's okay, but don't give up anywhere in between. Plan out what feature you'll work on each week. Something like this: 'Week 1 - implement Firebase login'.
"In programming, the hard part isn't solving problems, but deciding what problems to solve." - Paul Graham
Yes, you are now in a perfect position to type those wonderful lines of code. When you're done collecting ideas and planning the entire project, you're done with 50% of the total work. See, how much importance the above two points have?
Now, the time is to finish setting the project with the following points:
1️⃣ Keep the resources handy: of course, you'll need resources. Articles, YouTube tutorials, Stackoverflow (opened in 10 tabs), books, etc. While working on the project you must know where to look when you're stuck. As I wrote above, official documentation will be your friend. Get to know how to browse through the docs, how to search the queries you have on Stackoverflow.
If you're in a community of your favourite tech stack, join their Slack or Discord group, you will get more handy resources there. Don't panic when the internet connection is gone or for once your laptop doesn't work, you can take the help of a book or a friend here. Jot down the pseudo-code in a diary and when everything else fixes, get back to coding taking the help of that diary. A great time saver!
2️⃣ (IMPORTANT) Don't get frustrated, take it slow: it's the reality. We all get frustrated while working. If this is your first coding project, there's a good chance when at one point you'll say this to yourself: "Okay, I'm done with this." To make sure you don't get to this point you need to focus on the 4th point written above about making a timeline.
When you have a realistic schedule, one which doesn't involve 10–12 hours of coding in a day, this will get away from you. Don't think that top coders program for hours, no one can do that. Our brain needs rest. So, do that. Make a flexible schedule so that you don't get to the frustration level and code step-by-step, not all at once. This will take more time, but in the end, both you and your project will say, "Great work bud" to each other.
3️⃣ Alright, time for your laptop work: finally we've reached that point. Awesome work if you've followed most of the stuff from above.
First, enlist the tools you will need for that great project. This includes IDEs/editors - WebStorm or Atom, online services - GitHub or Asana, productivity tools - Trello or some Pomodoro app, extensions - VisBug or React Developer Tools, deployment services - Heroku or Google Cloud Platform. Of course, these are focussed on web development (which I do for the most part), you can find tools for anything else. After you've all these handy, get down to coding!
4️⃣ (IMPORTANT) Write clean code: most of us are good at programming, this time think differently, it's time to write 'clean code'. What's a clean code you say? Well in simple terms 'Clean code is code that is easy to understand and easy to modify'.
Robert C. Martin's Clean Code is a good reference if you want to know in detail. But why should you care about writing clean code? Well, this not only affects you but also affects the team you'll be working in the future. So why not keep this habit from the start? You'll notice good things eventually in your coding style. For more precise knowledge about how to write clean code refer to the article below by Shubham Gupta:
If you need to know all about clean code and why does it matter so much in software engineering, here's an article by Severin Perez:
"No one in the brief history of computing has ever written a piece of perfect software. It's unlikely that you'll be the first." - Andy Hunt
Recently I was interviewed by a remote company, they asked some questions about my projects. There, right there I felt something missing. I couldn't remember how or why I wrote those major parts of the code months later.
What I learned from this short experience is as a programmer you need to know about the projects you made not only for your job/career but also for your good. What did I do afterwards you say? It was time for reflection. I asked myself, "Do I know what I did in this XYZ project to implement that ABC feature? What was my approach to solving that problem?" The answer I got was, "Nope, you know 40% of this, rest you just forgot because you didn't pay much attention." As simple as that.
To move out of this situation, I decided to write down. Yes, we need to have a diary beside and jot down! I took a project, opened it in Sublime Text, skimmed through a file at a time and wrote down what was my process to implement a feature. What were the classes used? What external libraries were required, what do they do in general? The architecture diagram of the project etc. Here's a snap of what I wrote to get an idea:
If you've read till here and implemented most of the points I wrote above, congratulations, you're one of those who write clean code and you're ahead of most of the other programmers. I hope these tips helped you one way or another, if yes, then let me know in comments or tweet me.
Here's a tweet to end this article by Emma Bostian:
Developer tips:— Emma Wedekind 🐞 (@EmmaWedekind) May 27, 2019
🎧 Invest in quality headphones
💻 Re-read code before opening a PR
🤜🏻 Ask for help when truly stuck
🙌🏻 Help others who are stuck
🙀 Take tasks that scare you
❤️ Don’t be afraid to admit you don’t know something