What's a Side Project and Why Should You Build One?
A side project, or a personal project, is pretty much what it sounds like––an app that you build on your own (or with a few friends) outside of a school or work environment. Side projects help you learn new skills and gain a deeper understanding of the skills you already have. Side projects also help you round out your resume and become a stronger candidate––especially when you don't have work experience in this field.
Danger: Putting the Cart Before the Horse
The most difficult thing about building out your side project is figuring out where to start. Let's say you have an idea for a web app:
A dog walking site that connects walkers to pups. But wait! You have a bunch of ideas for really cool features! Your app should also function as a social network for local dog owners. Oh and it should help dog owners find dog-friendly spots in their neighborhoods! AND it allows local pet store owners to promote themselves and share deals! AND and and and...you get the idea.
When you have an exciting idea, it's likely to spur even more exiting ideas. When you have so many super good ideas, you don't know where to begin. You might end up spending hours or days building a dedicated log in protal for pet store owners so that they can sign in and advertise their stores to...no one! Because you haven't yet built the most basic functionality of your site. So, where do you start? And how do you build your app up to include all of your sick features?
Guidelines For Building Your App
The exact approach you take to building your app may vary, but you can always follow this general guide:
- Identify your MVP
- Build your domain model
- Build your MVP features
- Identify one new feature to add
Step 1: Identify the MVP
When you're ready to build out your app, its important to start with a strong, simple foundation, and to add on more features from there. Ask yourself: what is the absolutely most basic version of my app? In our example above, the first idea was simple:
A site that connects local dog owners to dog walkers.
It might seem simple, but there's still a lot that goes into it. We need:
- A domain model that relates dog owners to dogs and dog walkers
- A way for dog walkers can list their contact info, some info about themselves and their availability
- A way for dog owners to browse walkers and contact them to schedule walks
These three components make up our MVP, or Minimum Viable Product. The MVP is the absolute bare minimum functionality that we need to have a functioning web app.
Step 2: Build Your Domain Model
Now that we understand our MVP, we are ready to design and implement our domain model. What do we mean by "domain model"? The domain model is the set of relationships between the different entities in our app. In our case, those would be our dog owners, dogs and dog walkers.
First, we'll decide what relationships each entity should have to the others. We'll say that dogs belong to dog owners and dog owners have many dogs. We'll also say that dogs belong to dog walkers and that dog walkers are aware of the dog owners through their relationships to dogs.
Now that we've decided on the relationships between these entities, we're ready to build the domain model. This will likely involve defining database tables and mapping them to classes or modules in our code. In a Rails app, for example, we would have a dogs table and Dog model, dog owners table and model and dog walkers table and model.
Step 3: MVP Features
Let's return to our two MVP features:
- Dog walkers can list their contact info, some info about themselves and their availability
- Dog owners to browse walkers and contact them to schedule walks
We want to approach these one at a time. First, we'll build our index page of dog walkers. Then, we'll deal with the "contact a dog walker" feature. Only once dog owners can successfully contact dog walkers will we worry about the "scheduling walks" feature.
Step 4: Choose ONE New Feature
Once we have our MVP up and running, we celebrate! At this point, you'll have done quite a bit of impressive work and you should be feeling pretty good.
This is a good time to consider your next feature. You can revist your earlier brainstorm of amazing ideas. However, you probably have some ideas that grew out of the work you've done so far. Another thing to consider when choosing a new feature to add is: what technologies or skills do you want to improve on or learn? If you've never build a feature that allows users to email one another, maybe your new feature is specifically designed to allow you to do that. Remember that your app is here to help you learn and level-up, and to help you show off your skills to potential employers. It can be more important to demonstrate a familiarity with a certain technology than it is to have the absolute coolest dog walking app out there.
Once you've chosen your new feature, approach it using the first three steps of our guide. Identify the simplest version of your feature, build the foundation first by starting with the domain model, if applicable, and then build that basic piece of funtionality. Once you have that working, you can continue to add to your feature and make it more complex. This approach: starting simple and gradually adding more complex functionality is called iterating.
Go Build A Thing!
You're ready to take your app idea and run with it! Just remember to start simple by building a functioning MVP. You can iterate on that MVP by improving the basic functionality and adding features after you have something that works. Happy coding!