Never built a project before? Here are some easy steps to get started! But first, why build one in the first place?
Why personal projects?
- Win cash prizes 🤑 in CSESoc’s Personal Projects Competition 👀
- Improve your coding skills:
If you had no coding experience before COMP1511, we rely on labs and assignments to code and build our skills, but the best way to cement the new skills we learnt in uni courses is by building our own project from scratch.
- Experience the development lifecycle:
In the industry, no one is going to tell you how to build something like labs and assignments do. They expect you to know how to do it. Through a personal project you get to practise coding in a product-driven way: from conception to completion.
- Discover which subfields of computer science you’re interested in:
Front-end dev? Or back-end dev? There is no limit to what you can create in your own project, so you’ll be able to dip your toes in many areas and see if you prefer UI or algorithms or systems etc.
- Resumé builder:
In the careers aspect, personal projects are a great way to stand out from your competition. You come out of CS/SENG with the same degree as everyone else in your cohort and your academic transcript does not show who you are, what you're interested in and what problems you like to solve. However, you would stand out if you created a product that helped your community, friends or family.
Personal projects can also show your soft skills! By building your own project from scratch, it will show that you are self-motivated, able to learn new skills independently and great at debugging errors.
Ok, now you know the great benefits of personal projects, how should we get started?
Step One: Discover
To begin your project, you need an idea. This is where you’ll be able to flex your creative muscles, so get your brain flowing! Stuck? Don’t worry and let’s start with finding any topics you find fun or are passionate about. Do you like gaming, sport, art, science? What are your hobbies or interests?
Then think about how you can turn this into a project. Is there a problem that needs solving and you’ve got a solution? Is there a game you’ve always wanted to digitalise? Is there a website or app that you believe can help your community? If you're on the job/intern hunt, try to build a project that has some relevance to the role. Take your time to research if you need to!
For my fellow procrastinators and beginner programmers, this may be the hardest step but it doesn’t need to be. Try to reflect on your own life and see if there are any daily problems you, friends or family encounter which can be fixed. It could be anything from a to-do list to a grocery shopping list. Or you can get some inspiration by checking out ✨ CSESoc’s Youtube channel and Podcast ✨ for our fellow student’s personal project showcases! There are also many other project ideas floating around the internet. You could even redesign existing websites and apps to shape them how you envision it. When searching for ideas try to find one which can overlap multiple skill sets you would like to cement your understanding in or want to learn more about.
Here is a list of some ideas for different skill levels:
- A basic website template
- Calculator app
- To-do list
- Tic-tac-toe game
- Alarm app
- Random password generator
- API-based projects: weather app, Spotify music taste analyser, food recipe app, real estate app
- Discord bot
- Management systems
- Music player
- Chess games
Note that the project doesn’t have to be a massive nor fancy project! Especially with the uni workload, it is actually best to keep it small so that you can have a well-executed project to showcase.
Once you’ve found an idea, write a brief description of the project. For example, if I would like to create a time difference calculator, I might write:
In this program, the user selects at least one location and it will display the current time of the location and the time difference in hours.
And there you have it, a project!
Step Two: Technologies and Tools
When choosing a programming language, you should consider what type of application you are building as different programming languages are optimised for different purposes. Make sure to take into account if your chosen language has library support, packages or modules available to increase your productivity. You might also want to consider if you’d like to use a software framework, which like libraries, work on top of programming languages to simplify the development of some tasks. For example, for web development you may use Node.js. Here is a list of which programming languages suits which application:
- Back-end dev: Python, C#
- Machine Learning/Analytics: Python, R, Clojure, Julia
- Data Visualisation: Python, R, Java, C#
- Operating systems: C, C++
Want to learn some new tools for your personal project? Then make sure to look out for workshops developed by CSESoc’s Education portfolio on Facebook! 👀
Step Three: Features
Now that you have decided on your project theme and tools, we have reached one of the most important steps: features! Begin by brainstorming and listing all the features that you would like to include in your project. Then you should go through each listed feature and sort them into two categories: essential or non-essential.
Essential features are components of your program that are necessary in order for it to meet your project specification and are generally the first aspects of your project you implement. In my opinion, essential features can also be features you think you’ll learn the most from coding.
Non-essential features are components that are additional elements that would improve the user’s experience and are generally implemented after you have successfully built the essential components.
By grouping features in this way, not only would this help you to scale down your project, you would also create a clear direction for developing a minimum viable product (MVP), but more on that later.
This might have sounded very confusing so let’s go through an example. Let’s say that I’m building the time difference calculator website I mentioned before. Some features that I might include are:
- Digital time of each location
- Drop-down box for selecting user location
- Time difference from the user’s location
- Text for location names
- Add, delete selection
- Interactive world map
- Clock faces
- 24-hr option
By categorising these features we see that:
So, when I start building my project, I should focus on the essential features first, then add the non-essentials later.
Step Four: Visualise
Until now all your ideas must be floating in your head but now it's time to take the old paper and pencil out! If your project has a one-page design, create a flowchart of features so that you can visualise how the user will interact with each feature, and how each feature links to any other relevant features. You could also start planning which functions you may need to implement each feature. If you think of any new features, add them to the flowchart! A flowchart example for my time difference website could be:
If you have a multi-page design, draw rough sketches of each page and link these pages like a flowchart to visualise how the user would progress through each page. This would allow you to understand the logic of your project as a whole and ensure you don’t have any overlapping components. Additionally, for each page, I recommend you follow the one-page design visualisation as well.
Step Five: Plan
With uni and work and extracurriculars and social life, there is already a lot to handle but with good time-management you can still create a compelling personal project. Start planning by estimating how complex each feature is. If you’ve coded a similar feature before, try to remember how long it took you. If you’re learning how to do it for the first time, try to allocate a few days to that specific feature. If you’re learning new technologies, also remember to account for the time to learn! Also, a major factor that changes project timelines are BUGS, so think where possible bugs can appear and account for that in your project timeline. Try to group tasks into weekly phases so that you’ll create a good workflow. To keep you motivated, consider making deadlines but these can always be flexible!
You could also utilise many helpful tools such as Trello or Notion to manage your project. This allows you to keep track of each feature’s development stage and makes the project seem less intimidating. In each card you add to the board you can also add a to-do list, which keeps you organised. Here is an example board:
Step Six: Develop
Now it’s time to start coding! Remember we are aiming to implement the essential features first to create a “minimum viable product” or “MVP”. An MVP is like a draft of your final project and only contains the minimum necessary features for it to be usable by the user. The purpose of the MVP in project development is to give the earliest opportunity for you to validate your project idea and potential users to test your product and provide feedback. So gather a group of people to evaluate your product! After, analyse the feedback you’ve received and see which features need modification. It is recommended you repeat this process until users are satisfied with the performance of your product.
Once you have a fully operating MVP, you can begin to add the non-essential features to your project. In a matter of time and a few more lines of code, you will have completed your project!
- Keep it small and execute it well
- Always revisit your plan to make sure you’re implementation fulfilling your project specification
- Check out CSESoc’s Youtube channel for personal project showcases and past workshops.
- Look out for workshops developed by CSESoc’s Education portfolio on Facebook.
- Search online for similar projects: see what problems they encountered
- Ask the community for help: StackOverflow, friends
- Familiarise yourself with Git and Version Control
It may seem intimidating at first and you may experience many challenges but when you make your start you’ll begin to build up confidence and by the end of it you will have grown into a better programmer and problem solver. Always remember to consistently give yourself a pat on the back for every success in your project even if they are small and ask for help when needed! And finally…remember to submit your project to CSESoc’s Personal Projects Competition to win cash prizes!