As a developer, your online presence speaks louder than your resume. Your portfolio is a calling card. It needs to make a great first impression, showcase what you can do, and inspire confidence in your potential.
Projects are the core of your portfolio. To stand out, you need well-crafted, intriguing, unique projects.
That's what this post is about - choosing great projects for your portfolio.
We're going to look at the three types of projects that you build throughout your learning journey. They serve a different purpose for building and showcasing skills.
But not all of them belong in your portfolio. So after digging into examples of each project type, we'll look at whether they're portfolio-worthy and why.
Quick note: these aren't specific project scenarios. I'm not going to tell you what to build. Instead, we'll look at the types of projects you should build, how they're different, and why it's important to build them at various points in your journey.
What Belongs in a Portfolio
Hiring managers and interview panelists don't spend more than a couple minutes looking at a portfolio. Two reasons: 1) They don't have much time to evaluate you or your projects, and 2) most portfolios look the same (short bio, a few stock photos, links to some clone sites).
So in most cases, the portfolio evaluation is about two things: "Does the portfolio exist?" and "Is there anything off in the design or content of this portfolio so I can disqualify the candidate?"
You've got a split second to grab their attention before they form an opinion about your skills, and if they're not hooked, potentially move on to the next candidate.
As a result, your portfolio should be simple and functional. Introduce yourself and your work. Include your contact information and your professional interests. Make the design crisp and with personality, but professional. And make sure it loads quickly and works across browsers.
And include the right kinds of projects.
The Three Projects Types
- Projects for Practice
- Projects for Evidence
- Projects for Experience
1. Projects for Practice
Objective: Focus on reinforcing foundational concepts and exploring new technologies.
Benefits:
- Solidifies core programming concepts.
- Introduces a broad range of technologies and frameworks.
- Provides a safe environment to make mistakes and learn from them.
You havenβt really learned a skill until you're able to apply it to solve an emerging problem. The way you get there is by practicing a specific skill or set of skills over a period of time in different contexts, with increasing complexity.
Intentionally practicing a specific set of skills deepens your understanding and writes knowledge to long term memory.
Practicing over time strengthens your ability to call up the skill when you need it. They say practice makes perfect - itβs because repetition helps you do things well and have more control over what youβre doing.
Obviously this isn't the most attractive type of project, so you may be tempted to skip smaller practice projects and move on to building something meatier. But if you skip practice, you risk not truly understanding the foundations, and how tools work under the hood. Without solid fundamentals and more situational experience, it's hard to know when to use the right tool for the job.
Include in Portfolio: No
Examples:
- Practice Problems: Short, situational coding problems to help you sharpen your skills. This can be a single feature of a website (e.g. styling a form) or some sort of math or logic problem. Some courses include practice problems: Scrimba, Udacity, and Codecademy are the best at this. FreeCodeCamp is also pretty good, though their problems are fairly guessable. ChatGPT is also pretty good at coming up with practice problems. Give it a scenario like βan event planning websiteβ and ask it for practice problems on whatever topic (e.g. styling a form, passing parameters between React components, control flow in Python)
- Tutorial-based Projects: Follow along with detailed tutorials to build applications. This introduces you to new tools and libraries and helps you learn to apply these tools in new situations. But donβt code along, thereβs a better way.
- Algorithm Challenges: Take on coding challenges on platforms like LeetCode or HackerRank to sharpen your problem-solving skills.
- Clone Projects: Rebuild existing applications or websites. This helps in understanding how certain functionalities are implemented. But donβt just clone any site - ask ChatGPT for ideas of applications you might build to practice certain skills, and then look for websites to clone.
2. Projects for Evidence
Objective: Create projects that test and demonstrate your development abilities.
Benefits:
- Proves that you can work on real-world software.
- Refines your skills set to solve real world problems.
- Helps you spot additional areas to work on.
- In some cases, exposes you to the dynamics of working within a team.
Evidence projects act as tangible proof of your skills and dedication. Employers arenβt going to take your word for it that you know how to build applications. You have to have something to show for it.
At the same time, evidence projects help you measure your skill level and uncover gaps.
The best way to see how your project stacks up? Get feedback from more experienced developers. Have them check your architecture, your systems design decisions, and your implementation.
Evidence projects are one of our main focus areas at Curricular; real-world projects that help developers see how their skills stack up.
Once you're confident and can crank out evidence projects, you're ready for professional development.
Include in Portfolio: Yes
Types of Projects:
- Personal Website/Portfolio: Yes, your portfolio counts as evidence, particularly of your design / frontend development skills. At the end of this post, I have more tips for making a great portfolio website.
- End-to-End Applications: Develop applications that show the full range of what you can do. These could be passion projects or apps you wish existed. The more real-world you can make these projects, the better. If you need ideas, again you can consult ChatGPT. Or you can browse some of the portfolio project prompts on Scrimba, Udacity, or Codecademy - you won't get the full requirements, but enough to see the domain and problem, and you can do some additional research to flesh out the requirements.
- Hackathons and Coding Competitions: Participate in hackathons to experience the pressure of delivering a working prototype under time constraints. The bonus is you're typically provided a fairly detailed prompt, so you can focus on understanding the problem and devising a solution.
- Automate Something Repetitive: I have a friend who just graduated from a bootcamp who was annoyed with having to write tons of cover letters, customizing them for each company. So she integrated with ChatGPT to input her resume and a few details about the company and voila, out came a well-written cover letter. She ended up sharing the app with several of her classmates as well, which transformed this into a βskills experienceβ project. Who do you think was hired first from her cohort?
Note: You might be tempted to think clone projects are evidence projects. But clone projects are practice, because youβre basically following a guide of what someone else created. They're like a better tutorial. Solving a problem that nobody has solved, or at least taking a new approach to solving a problem, is far superior to cloning someone else's solution, especially for a portfolio. We can debate this in the comments.
3. Projects for Experience
Objective: Use your skills to solve real world problems for real users.
Note: these project donβt mimic real world scenarios; these are actual production projects with users.
Benefits:
- Add to the most important part of the resume: experience
- Builds user focus - understanding client requirements and delivering accordingly, and iterating based on feedback and emerging needs.
- Potential for income
Companies are significantly more likely to hire someone who has worked or is working professionally. That's why CS programs push internships - internships are actual professional experience.
If you want to stand out to employers, find ways to work professionally. Experience projects are far superior to evidence or practice projects.
This goes for your resume and your examples during the interview process. Every hiring manager I've spoken to has said the same thing: experience shipping production applications is essential.
Who were your users? What were their problems? How did you solve them? Those are the key questions you should be able to answer. And you should be ready for follow ups like what approaches you considered, why you chose particular tools to build your solution, what tradeoffs you had to make, and how you might improve it in the future.
Include in Portfolio: Yes
Types of Projects:
- Freelance Projects: Take on freelance projects that match your skill level. This could range from developing websites for local businesses to joining a freelancing site like Upwork, or taking on a bounty on Repl.it.
- Internships or Entry-level Projects: Work in a real development environment, even if the role is unpaid or at a super entry level. You might try to find a local business with a software-related problem to solve (nearly all local businesses have these problems; you may have to talk to several until you find one willing to accept a solution, and even then it will probably be complimentary).
- Contribution to Open Source: Contribute to open-source projects. Your commits serve as a tangible contribution to real-world software. There are projects for nearly every language and framework, and often there will be issues logged βgood first issueβ - a great place to start.
How do you know you're ready for an experience project?
Complete a few evidence projects. If you can solve challenges in new situations, and feel confident you can explain why you made certain decisions, you should move on to experience projects.
If you're still not sure if you're ready, find a more experienced developer and ask them to review your code and give you feedback on ways to improve. Ask them to treat it like a professional code review and to beat up your code.
Again, this is how we treat code reviews for evidence projects at Curricular. The bar to become a professional developer is high. You've really got to know your stuff. Developers who pass our projects have cleared a significant hurdle. And they come out of the project experience with specific actionable takeaways for how they can improve.
Conclusion - Building an Outstanding Portfolio
Successfully launching a career in tech involves a blend of learning, demonstrating, and applying your skills.
By engaging in projects for skill development, creating evidence of your skills, and gaining real-world experience, you'll position yourself as a valuable asset in the tech industry.
In the end, what makes the perfect project portfolio?
- Updated: include only your greatest projects. As you gain more experience, those projects should replace your evidence projects. Discuss what you're working on now.
- Polished: Make sure all the links work. If your applications are hosted, they should still run. Use a design system, and try to make it look timeless.
- Professional: Some personality is good, but don't overload it with details about your personal interests. Limit the number of hobby / niche projects, unless those hobby projects are dev tools.
If you found this helpful, check out more resources at curricular.dev. We're building a library of projects (practice projects and evidence projects) to help developers master any technical skill.
Top comments (3)
Thanks for this write up, that's super helpful.
Something i will add is that the portfolio has been even more helpful for me during the interview.
I had lots of success answering questions like "what is your experience with X" with "well actually i can show you what I have done, do you mind if I share my screen?"
Thanks @jmfayard. That is such an awesome interviewing technique. I can see why it's been successful. A project is worth 1,000 words!
A portfolio site is entirely unnecessary.