Especially when you have no prior experience as a software developer when applying to jobs, you need something to stand out.

One way to show what you are capable of is to build a portfolio, and here is how that should look.

A thread. ↓
1. Why a portfolio?

When you have little to no experience, it isn't easy to show a potential future employer that you can do the job.

Even a college degree doesn't guarantee that you can work in the industry.

Education actually differs a lot from reality.
Education teaches you how things work.

This holds true for:

- College courses
- Tutorials
- Books
- Online courses
- etc.

You often even learn HOW to do things.

But this doesn't ensure that you know how to apply this knowledge.
When a company hires new staff, they look for people who can get the job done.

They need workers able to apply their knowledge.

In the case of software developers, this means turning ideas and requirements into working software.
Prior work experience on your CV shows that you somehow managed to stay employed for a certain amount of time.

It gives some security to potential future employers that you were already able to do the job.

But if you miss this, it becomes difficult to assess you.
A portfolio of projects can give some security to interviewers that you know how to create software.

You probably developed this software on your own, but you can use many of the best practices that teams in the industry use every day.
A few personal projects, done right, can give you enough credibility that interviewers really consider you for a position and don't only throw away your CV because they look for someone with more experience.
And even if you have experience, having something to show could give you an edge over another candidate.

Most of the work we, as software developers, do, is proprietary and closed source.

Having open projects lets you showcase your skills even better.
2. What your portfolio should contain

You should aim for at least two projects in your portfolio. Three if you can find the time.

Those projects should be closely related to your position or the position you want to fill in the future.
As a backend developer, you could create two to three different micro-services with APIs and such.

As a frontend developer, a website, a SPA, or something like this can showcase your capabilities best.
Your portfolio projects should:

- Have publicly available source code
- Be running and working as intended
- Be covered with tests
- Have a demo deployed somewhere
- Have rudimentary CI/CD
- Be documented (At least a README)
- Be unique among them
You don't need to come up with a unique idea that no one has ever done before.

You don't apply for a product designer position. You apply for a job that requires you to turn the ideas of others into code.

Copy an existing product, and perhaps give it your own touch.
Even a ToDo-App, if executed correctly, can be a great portfolio project, especially when you don't want to spend weeks or months on your portfolio.

Just make sure it's at least large enough to really show what you are capable of, and don't build the same app twice.
3. Building your projects

Spend some time on your projects.

You don't do yourself a favor when you simply throw some unreadable code on GitHub, lacking documentation and having no tests.

All this does is giving a bad impression of you.
Your goal is to create a professional and small software project with best practices from the industry.

You should follow a few basic rules that we are going to cover next.
-> Keep your code simple

Don't try to impress interviewers with "ultra clever" code.

Clever code smells. Better keep it simple.

Readability is one of the most important things in the industry.

It makes the difference between delivering a project on time or far too late.
-> Organize your code

Don't throw around code mindlessly. Organize your code into folders and modules.

For example, components into a components/ folder, utility logic into utils/, business logic into services/, and so on.

Import and export logic where necessary.
-> Add comments where applicable

If there are places in your code that you can't make more readable, add comments.

Yea, it's considered bad to explain a what, but especially as a junior, better be honest and help viewers understand what happens.
-> Document your project

There are different views on code documentation, but I usually view it this way:

Everything that is somehow publicly available within your own project or to someone else pulling your project in as a dependency should be documented.
This means either:

- Docstrings
- JavaDoc
- JSDoc
- or whatever your language of choice offers

Follow the conventions of your language to create good code documentation.
Additionally, add a readme to your project.

It should contain:

- A description of the project
- An introduction to how to work with the source
- A guide on how to run your project locally
- A guide on how to deploy your software
- A list of runtime dependencies like a DB
- A link to a running demo version
- How to use your project

Someone completely foreign to your project should be able to understand what they look at and what the repository contains.

They should also be told how they could contribute to your project if they wanted to.
This includes how to clone the source, which tools are needed, and what commands to fire to build, test, etc., your project.

Next, your readme should state how anyone can start your project locally, so they can quickly take a look at a running version.
After this, it should state how your project can actually be deployed to a "production" environment. Be it Heroku, AWS, Vercel, Netlify, etc.

If your project has dependencies like a database, an API that requires an API key, or an account, it should also be listed.
A link to a running demo of your project makes the readme nearly complete.

A guide on how to use your project finally finishes the readme.

State how the APIs of your service can be used or how your app is to be used.

This is enough information for anyone to get along.
If a hiring manager or someone at a company you apply to decides to spend a look at your projects, they will have a far easier time getting around and evaluate what you built.
-> Test your software

This is a mistake even many senior developers still make when doing take-home tests or building a portfolio.

Tests are not optional.

Yes, there are companies where tests fall short because of "reasons," but this is not the norm.
Being able to write unit tests is usually expected from any software developer nowadays.

Not paying attention to quality assurance thus leads to some negative points because you make the impression that you either don't know how to or don't care.
-> Deploy a live version of your software

Publicly available source code is great, but not all hiring managers or engineers have the time to go through it.

If you have a running version, you give people the chance to see at least the final result of your project.
This gives hiring managers a chance to see what you actually built and perhaps prepare a few questions about your projects for you.

You can then probably go through the source code together later.

And even if not, you will be able to talk about your creation process.
-> Spend some time on CI/CD

Of course, DevOps engineers and SREs in the industry take care of larger deployments, but some basic CI/CD ensures you can show that you know about the full software lifecycle.

It's not about advanced pipelines. It's only about the basics.
Make sure:

- Your project is built and tested on each commit
- Can be deployed to your production environment
- Optionally does merge checks

That's something that takes you only a few minutes to configure with GitHub Actions, for example.
4. How much time you should spend

You are probably already busy enough with your life, family, friends, and hobbies, and that's fine.

Putting in all this additional work takes a lot of time, only to get a job.
You can optimize the time you spend on your portfolio projects by limiting their scope already at the beginning.

You don't need to add all features that seem interesting or could be useful.

If your app misses an admin UI, then be it. Prefill the DB with a script.
The only thing you should aim at is to deliver something that "feels complete."

A user should not get the feeling that your project is unfinished. But you should usually get a feeling for yourself for that when you try your own project out.
As a good rule of thumb, but largely depending on your experience, you should only build something that roughly takes you ten to fifteen hours.

You can still extend your projects later, but if you don't have much time, it's a good time frame to begin with.
5. Thread end

That's it for this thread. I hope you found something useful in it for you.

If you enjoyed reading this thread, consider dropping a like, retweet the first tweet, or follow me (@oliverjumpertz) for more content like this.
6. Attribution

Thank you very much, @thinkLikeADev, for the original idea to write about what a good readme should contain! 😊

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Oliver Jumpertz

Oliver Jumpertz Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @oliverjumpertz

2 Aug
I started to take Twitter seriously in March 2020.

Since then, I grew a community of over 30,000 awesome and unique human beings (and some bots).

Here are some lessons I learned along the way that might also help you.

A thread. ↓
1. You need a real goal

I'm not gonna lie. When I started, I thought to myself:

"Let's see how many followers I can get."

But this is not a great goal. There is no end to it.

After 1k followers come 2k, 5k, 10k, 50k, 100k...and so on.
This is a treadmill that is most likely going to lead to burnout.

You'll get depressed when there are days with super slow growth and become ecstatic when you have days with ultra growth.

And this goes on and on and on.
Read 40 tweets
2 Aug
Having a good portfolio is crucial to showcase what you are capable of.

It can lead to jobs, gigs, and long-term clients.

Here are some ways to build a portfolio for software developers, developer advocates, data scientists, UX designers, and many more.

A thread. ↓
1. Create a portfolio page

A portfolio page is one of the most crucial things to have if you aim to market yourself and showcase your work.

You can be present on multiple platforms, but there should be one central place that you own.
You can build this page yourself, use a no-code platform, leverage WordPress and a template, or whatever else helps you in building your page.

Spend some time on this page. It's a one-time effort.

Don't simply use the first template or design that you find on the internet.
Read 18 tweets
31 Jul
For the last two weeks, I posted at least one thread every day about cracking your tech interview, marketing yourself, and growing as a software developer.

Here is a collection of the threads I published.

And there are many more to come in the future.

A thread. ↓
1. "Are there any questions left we can answer?"

This inconspicuous question is one of the most important ones in any interview.

This is where you can shine and make a lasting impression.

2. "Where do you see yourself in five years?"

Many candidates hate this question because we usually don't even know where we will be in a few months.

You can, however, use this question to your advantage and here is how.

Read 17 tweets
30 Jul
Cracking a tech interview is one thing, but it's a whole other level of difficulty to get an interview at all.

Marketing yourself takes time, but there is a way to minimize your efforts: LinkedIn.

Let's see how you can use LinkedIn optimally to market yourself.

A thread. ↓
0. Foreword

I have used LinkedIn for quite some time now and put some great effort into optimizing my profile and approach.

Before I decided to go down the content creator route, I had at least 10 recruiters (more often 20 to 30) contacting me daily about new roles.
As soon as I set myself as "open to offers," I can't even catch up with all the messages I get anymore.

This is not to brag but to prove one point: LinkedIn gives you visibility, leading to potential interviews.
Read 40 tweets
29 Jul
I've been a software architect for most of my professional life, and system design has always been my bread and butter.

Here are 7 steps that I would advise you to follow to ace your system design interview.

They will bring you further than ever, promised.

A thread. ↓
0. Foreword

As a software architect and tech lead, I had the chance to interview some very bright engineers throughout my career.

I've also interviewed quite a few times myself.

This approach is the one that I would use to design a system.
I highly believe that this approach is the one you should use in your interviews, as it's an incremental and organized workflow.

Your goal is that your interviewers understand what you design.

This enables them to follow along as you design.
Read 39 tweets
28 Jul
Data structures and algorithms are important for any software developer.

Sometimes loved, more often dreaded, but at the core of our craft.

Here is an introduction to the most important data structures, including learning resources.

A thread. ↓
1. Why you need to learn them

The reality is: You will and should never implement many data structures yourself on the job.

There are libraries for this purpose. Either a language's standard library or a commonly used library will provide them for you.

But is this all?
To decide which data structure you need in what case, you should know about them in the first place.

You need to know:

- Which exist
- What they are good for
- How they work
- Their runtime characteristics (time and space complexity)
- Their pros
- And cons
Read 32 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(