When you’re putting together a software developer resume or emailing a prospective company, including links to projects you’ve (co-) created can vastly improve your chances of convincing people to hire you. But how do you build a portfolio of projects when you’re a student who also works, takes care of family members, or has other responsibilities that make the words “side project” sound like a distant luxury?
I can’t lighten your load, but I can share what I did to showcase my work—which was enough to get an interview with Atomic.
If you’re like me as a student, you may be unsure of how to showcase your work and/or be overwhelmed by the idea of projects on top of classes and jobs. My main barriers to creating a portfolio were not considering my coursework as worth sharing, lacking skills to show my code, having unrealistic expectations about what a side project needed to be, and not having much time to spare. Here are some examples:
- Age 20: I got really stuck trying to export a jar file for a Java program after my first programming class.
- Age 21: I made my first website for a school teacher as a favor. I thought my static HTML didn’t count as a “real project.” Yet that’s when I first learned HTML, CSS, and about serving files – knowledge I used today in my job at Atomic.
- Age 22: Spending “20” (at least 40) hours a week on my own coursework and “20” (actually 20) hours as a teaching assistant, not to mention other responsibilities.
- Age 23: My side project ideas were hugely ambitious, like making an interactive graph of wealth distribution in the US using csv files from Congress.* I passed up applying to an amazing internship because there was a form asking for my GitHub account, and I felt I didn’t have anything worth showing.
Finally, at ages 24 and 25, I got more realistic about little projects, gave myself credit for what I had done, picked out some cool code from old class projects, and got creative with my school requirements and job situations to make programs that demonstrated what I can do on my own. Here are some things I learned:
1. Show What You’re Already Doing Anyway
- Intentionally put project-based classes in your course schedule. No one wants to see your old problem sets, but they will want to see a data analysis project, a database project, a game, an operating system (or part of one), etc.**
- Make every class project a git repo—not just for your sanity, but so you can update and package it later.
- See if you can get course credit for an independent project.
- It can be worth it to “just pass” one class if it gives you energy to make a really awesome project in another class.
2. Set Realistic Expectations
A side project can:
- Be something that’s been done many times before (see random student picker above).
- Be easier than what you’ve done in classes or jobs.
- Start as a class project, tutorial, or GitHub fork.**
- Be something you don’t think is impressive or unique enough. Something is always better than nothing in this game. Don’t let perfect ruin good.
3. Set Up for Success
- Start with technology that you’re comfortable with, and do something new with it. Or pick one new technology to learn, and use it to do something you’re comfortable with. Then add on one thing at a time. We’re all very smart when we’re teaching ourselves one thing at a time, and we all feel discouraged when we’re learning four things at once by ourselves.
- Make a timeline: two or three hours to research and experiment without expecting anything to work, two to three hours to make something that does ONE thing, and two to three hours of cushion time. If it’s not working yet, it’s up to you if you want to give it another try, do less (in industry terms, this is “redefine scope” not “lower expectations”) or do something else (a.k.a. “pivot,” not “quit”).
- Research any new technology before you commit to it. Pick a well-established tool like Ruby and start with the hello-world. If it’s not a giant, then pick something with great documentation (e.g. TableTop.js) and examples or tutorials like this example for TableTop.js. See if that documentation is written to your level. See if you’re comfortable with the technology it depends on. And (optional but encouraged) see if there are answers with high upvotes on Stack Overflow.
- Beware of bad tutorials, under-documentation, and bad documentation. Some tools falsely advertise super-quick “Getting Started,” but they leave out crucial steps. If it’s not working for you after three solid tries, it’s not you. It’s them.
4. Pick a Strategy to Get Going
- Start with a tutorial or an example and gradually make it your own.**
Some examples are JQuery mobile tutorials or D3 tutorials. I built a prototype for a financial coaching application starting with this example about a wine cellar. I don’t even drink wine.
- Copy the directory of a project you already have, change the name, and change the interesting part of it to do something new.
5. Use Tools for Sharing (Listed in Order of Effort)
- Get a GitHub account and make a Gist of the last interesting piece of code you wrote. It doesn’t need to be a whole thing that runs.
- Get a GitHub account, put your project(s) on there even if they’re not complete or pretty, and put writing a README on your todo list.
- Make an account and do a Getting Started tutorial with Heroku to show any web thing you already have. They have beautiful tutorials, you can get it going on a weekend (1-3 hours tops), and it’s a professional-grade tool for prototyping. It’s super-cool to send the url to your friends!
- Now that you have this stuff online, you can add these links to the PDF of your resume, and include them as proof of your skills when you introduce yourself to potential employers via email.
6. Hack the Economy, Build Community
I found it easier to do little projects when they aligned with my other interests, and/or were for people I cared about. People who can’t pay the going rate for professionals will be patient with you as you take it one step at a time (and it’s worth asking to be paid what you’re getting paid in your other job).
Projects that helped me were a website for a teacher who was helping me, organizing links for a counseling center I was part of, and making it easier to randomly pick my students for the teaching job I already had. On the Code the Change mailing list, I connected with a community organization that was happy to work with me even though I was teaching myself as I went. It was a great partnership (and an “independent project” for course credit. See what I did there?).
Please share your frustrations with, successes in, and resources for showcasing your work as a busy student below!
7. Take a Break, with Support
A very different option, that I haven’t done but I learned about from friends, is The Recurse Center. It’s a diverse, supportive community where people can work on their own software project, with expert coaching, for three months in New York City. The program itself is free, and they are very serious about their need-based grants for paying living expenses while you’re there.
* Please take this idea and run if you have time!
** For course-related work, make clear what the requirements for the course were and what should be considered “extra.” Always document in a README file or comments what code comes from you, and what code comes from other people. Have no shame about this if you document it clearly. Professional engineers build on each others’ code all the time. If they didn’t, the internet probably wouldn’t work!
One thing that helped me was to make a really simple website (http://joshferge.github.io) and start immediately listing everything that I’ve done, things for classes and otherwise. I also keep a list of things that I am calling (in progress) to hold myself accountable to do them, as well as a way to remember to do them.
Cool – thanks for sharing!
As a student just starting out, finding the time for side projects is incredibly challenging, especially not knowing where to start. I found your article incredibly helpful. Thanks for sharing your great ideas :)
Glad to hear it – good luck with all your studies!
Comments are closed.