It is hard to imagine any other field where lifelong learning is more important than in software engineering. Another unique characteristic is the degree to which learning material is available for free on the internet. On top of that, we create various resources ourselves by documenting issues, submitting bug reports, writing notes, creating documentation, and many others. The sum of all these resources can be called a knowledge base.
You could argue that every developer has a system to manage their personal knowledge base, whether they know it or not. In this post, I explain my knowledge management practices.

A software engineer’s personal knowledge base is likely to overlap with the knowledge of their employers and project partners. Be sure to carefully study your data protection obligations. A good basis is to keep your personal knowledge base strictly technical and to never include data that is related to customers, or people in general.

I chose this topic mainly because of three reasons:

  1. Fun:

    I enjoy thinking about my workflows and trying to improve them. Maybe a little too much, some friends have started to roll their eyes when I try to recommend a new tool to them.
  2. Improving my system and workflows:

    Writing a post about my Linux setup has been very rewarding for me. While documenting my configuration, especially my command-line workflows, I identified some shortcomings that I have since eliminated. After writing this article, I can already say that my knowledge management workflows have improved similarly.
  3. Relevance:

    Knowledge management in all its forms is integral to software engineering.
Knowledge management tasks are done frequently. It pays off to do them efficiently. (Source:

Knowledge management tasks are done frequently. It pays off to do them efficiently. (Source:

Much of this post comes down to describing my usage of software tools. The stars will be

Copying all of my practices will likely not serve you well. I invite you to try out things at your own pace and revisit this post whenever you are looking for new ideas.

Even though everybody loves books, or at least says so, myself included, the reality is that we rely on digital resources most of the time.
The challenge is to organize this knowledge efficiently without creating too much overhead.

There are some naive approaches that I do not deem sufficient. Until a few years ago, I relied mainly on browser bookmarks, but for some reason, browsers do not provide proper organizing features.
Another way is to just copy the URLs into notes, project issues, documentation and all other kinds of manually created content. This is viable and we all do it regularly, but it has nothing to do with what I think is bookmark management.

My current setup is a little more complex, but in the end, it does not require more work than keeping bookmarks solely in the browser.
I organize my bookmarks in multiple layers, depending on how often I want to access them and how long they should persist.

Maybe you are thinking of caching now, but fortunately, bookmarking layers are not caching levels. This would be hard to manage because as we all know, there are two hard problems in computer science: cache invalidation, naming things, and off-by-1 errors.
In contrast to cache entries, a bookmark is not supposed to move between layers. Instead, it gets inserted at the right place and stays there.

The following figure illustrates my layers:

Bookmarking layers

Bookmarking layers

1. Chrome Bookmarks

Chrome bookmarks have some nice benefits. They are synchronized between devices, new ones can be added easily, and organizing them in folders brings at least some structure. Another advantage for me is the Albert Chromium extension that lets me access and open my Chrome bookmarks from Albert:

Searching through Chrome bookmarks directly from Albert. Pressing enter opens the selected entry in Chrome.

Searching through Chrome bookmarks directly from Albert. Pressing enter opens the selected entry in Chrome.

Because of these advantages, Chrome bookmarks are ideal for things that I need often and want to have accessible somewhat independent of context. They are, however, not well suited for keeping extensive bookmark libraries. There is no tagging, it is not possible to add comments, and browsers do not even save a timestamp for when a page was bookmarked. It is further not possible to filter and search Chrome bookmarks using complex queries. In my experience, browser bookmark libraries are hard to manage if they grow beyond a certain size.

Some examples of well-suited Chrome bookmarks:

  • AWS EC2 dashboard
  • Google cloud platform console
  • Slack workspaces
  • GitLab boards
  • Content sites, such as Hacker News, InfoQ, and DZone

Examples of things that should not be Chrome bookmarks:

  • Blog posts to be read later
  • Links to Open Source Projects
  • Stack Overflow questions

2. Workona

Workona is a relatively new addition to my toolbox. I have mixed feelings about it, mainly because it can feel a little slow at times.
There are some things it does very well though.

Workona lets you create browser workspaces that come with their own list of bookmarks. This works nicely when you have multiple projects that you work on for longer periods. It will also remember which tabs you had open in a specific workspace and synchronize this information across devices. It is, therefore, a nice place for things that I need often dependent on context.

Screenshot of a Workona Workspace (Source)

Screenshot of a Workona Workspace (Source)

Workona further allows you to add apps and will then collect links and even features for those apps to be quickly accessible. For example, I use it to access my different GitLab and GitHub projects, Slack Workspaces, and sometimes even StackOverflow questions. These entries are automatically created by Workona and therefore I do not see them as bookmarks. It is also possible to access features of these apps directly from Workona, mainly to create new resources, such as GitLab/GitHub projects, Google Docs, DropBox Files and so on. It feels a little bit like Station built directly into the browser.

The selling point for me is that Workona lets me do all of the described things via shortcuts and it is even possible to customize these shortcuts at chrome://extensions/shortcuts.

3. Notion

Finally, we arrive at the layer that is suited for maintaining a large library of bookmarks. For this, and many other use cases, I use Notion. It has become the core of my personal knowledge base.

Notion’s free tier comes with a hard limit on the number of blocks you can create. This means that you will have to switch to the paid version if you use it seriously for a while. It is free for students and teachers.

All links to Notion in this post are affiliate links. If you sign up for an account through these links, you will get 10$ of free Notion credit and I will get 5$. This works even if you create a free account.

The killer feature for me is the database. It is amazingly flexible and is single-handedly able to replace multiple other tools for me. For my bookmark collection, I use a single large database. Adding new items can be done via the Notion Web Clipper. I am a little annoyed that the web clipper doesn’t let me add properties and tags directly, but other than that, it works well. Previously, I used Trello, which was also quite good at keeping bookmarks. However, to limit the number of different tools I use, I replaced it with Notion.

My bookmarks database filtered to show only entries related to this post.

My bookmarks database filtered to show only entries related to this post.

The goal with this database is that I can find something years from now with only a vague memory that it should be there. This is possible because Notion automatically stores metadata, such as a creation timestamp. Even more important, I can add tags and arbitrary properties.

Things get really exciting once you use relations between different Notion databases. As an example, I have a database of my blog posts that has a relation to my bookmarks. I can now filter my bookmarks by blog posts and quickly see which sources influenced a particular post.

I cannot cover all Notion database features in this post. I think this is something you have to see for yourself. The Notion docs page about the topic might give you some further impressions though.

The downside of this rich feature palette is that it requires some discipline. I tag and annotate new entries, that I added via the web clipper, about twice a month. Often, I just delete new items because they do not seem important anymore. If I can not think of appropriate tags or relations for an item, this often means that it is not very relevant to me.

Another important lesson I had to learn the hard way:

Do not use too many databases in parallel. Notion provides excellent methods for filtering, and searching tables. You can even define different views onto the same database that only shows a specific part of the data. It is therefore not required to separate all kinds of things into different databases. For example, at first, I had three different databases for Python resources, Django resources, and Wagtail resources. This was a bad solution. Now, these all live in the same database with appropriate tags.

I hope that someday I will be able to search through my Notion databases from Albert. Maybe I will build an extension myself once the Notion API is finally released.

To illustrate what I have described in probably too many words, you can have a look at a public fraction of my bookmarks database containing all the resources that were helpful for writing this post. The post-column in this public database appears empty because the related table is not public.

4. Native Bookmark Sources

The last layer does not require any work at all. It only means to be aware of native bookmark sources when trying to find something, and also when thinking about adding new bookmarks. For example, it is quite easy to search through questions you have answered on Stack Overflow. It is also not a problem to go back to your Hacker News posts or search through projects you starred on GitHub. Keeping those things in your own bookmark sources adds redundancy and noise.

These are some of my most commonly used native bookmark sources:


I am aware that this sounds immensely complicated. However, I stick to my statement that it does not actually require more work than keeping all bookmarks in the browser. You still have to add every bookmark only once. If you internalize your system, you will not have problems searching for bookmarks as it will be quite obvious where a specific resource could be. Admittedly, it does require some maintenance to keep a large bookmark collection in Notion, but it pays off soon and the pay-off accumulates over time.

Having a proper system for external resources is great, but it does not help much if everything you write yourself is a mess. Therefore, it is essential to organize self-written resources.

Blog Posts

My most successful blog post is about how I run and host this website for free. However, the post does not cover the most work-intensive part about running this site: Writing and maintaining blog posts. For this, I heavily rely on Notion. I have a database with all my past blog posts and ideas for future posts. It is simple to add tags like done, doing, idea, and to view the database as a kanban board with lanes based on those tags.

Drafting Posts

All posts that are published on this blog have been drafted in Notion. When they are more or less finished, I use the markdown export and copy the content into a new text file in my Hugo project. There are some minor issues with this. Usually, I have to adjust code formattings and links, but overall it works very well and has some nice benefits:

  • Edit on all devices

    Using notion, I can easily edit my drafts on all devices, even on my phone when I am moving.
  • Use existing notion content

    I can quickly add code snippets, links, and other stuff that I keep in Notion. This can be done via database relations or just by dragging the respective blocks into the draft page.
  • Lightweight version control

    As developers, we love GIT. However, for adding a couple of lines to a blog post, it is an overkill. Notion has versioning features build-in and keeps track of all changes automatically. Naturally, it does not offer sophisticated merging options, but it’s easy to stay clear of conflicts when you are writing a personal blog.

Once a post is released, I move the post from doing to released.

Keeping Track of Update Ideas

You may have noticed that some of my blog posts are quite long. Keeping them up-to-date is a little challenging. Fortunately, I have Notion to assist me with this. I have a database where I add proposals for updating my existing posts. Using a relation, I link these ideas to the respective posts in my posts database:

It is hard to know when you are finished setting up the perfect Linux workstation.

It is hard to know when you are finished setting up the perfect Linux workstation.

Tracking Sources

To keep track of third-party resources that were helpful in creating a post, I add them to my bookmarks database and link them to my posts database.

My bookmarks database filtered to show only entries related to this post.

My bookmarks database filtered to show only entries related to this post.

You can also have a look at the full list of sources for this post via a public fraction of my bookmarks database.

Taking Notes

I suppose every software engineer takes notes to some extent, even if they do not have a system and just casually write stuff into text files.
There is also a large amount of free and paid software for taking and organizing notes. Some people even like to use physical paper with the BuJo system.

No matter which method you prefer, you have to think about when, why, and how to take notes.

When to take Notes

I thought quite a bit about this question, and previously I did not adhere to any predefined rules regarding this matter. To gain a better understanding of my habits and to decide what worked best in the past, I looked through my notes from the last years that were spread over multiple applications and lots of files. I tried to find common patterns:

  • Capturing information from audio sources

    I am a visual learner and prefer written content over audio. However, there are many types of audio sources that everybody encounters:

    • Meetings
    • Presentations
    • Meetups
    • Conferences
    • Informal Discussions
    • Videos
    • Podcasts
  • Preserving information that is often needed but doesn’t fit in any proper documentation project

    In my case, these are things like the following:

    • Command-lines with multiple parameters, complex options, and paths. I keep them in my notes so that I can quickly copy-paste them in the potentially distant future.
    • Instructions for tasks that will likely have to be repeated in the future, for example
      • setting up a development environment for a specific tech stack
      • deploying a project on a specific hosting service.
  • Questions

    Sometimes I think of a question that I would like to ask someone specific, who is not available at the moment. The question and its eventual answer are a nice use case for a note.

Thanks to a more sophisticated command-line setup with Zsh and various plugins for auto-completion and history-search, preserving command-lines has become much less important for me. If you are still using Bash with its default Ctlr search, I think you would profit from my post on setting up a Linux workstation.

On the other hand, it is important to make clear also what should not be a note in this system:

  • Project-specific knowledge

    Everything that is directly related to a specific software project, should not be a note in your personal knowledge base. Instead, it should go into whichever system is used to keep track of issues, merge requests, documentation, and so on. This post includes a separate section on this below.
  • Information that is needed for a very short time
    Sometimes I need to take notes during a conversation that I will need only immediately afterward. For this, I just open VSCode and type ahead. Once the information is no longer needed, the file can be deleted completely.

In general, don’t overdo and don’t underdo it. If you take notes all the time, you create overhead and redundancy. If you never take notes, well, you will not have notes.

Why Take Notes

The obvious answer is to remember things. This does not mean that note-taking should replace your memory. To the contrary, taking notes provides structure and context and therefore helps your brain build up a map of your knowledge. I believe that taking notes increases the amount of data that you can recall from memory.

Additionally, some things are just very hard to remember, such as complex tech stacks presented at meetups, command-lines with several opaque options, numbers, and so on. Writing these things down can extend your knowledge base significantly. Notes are also very helpful when writing documentation in the future, or for writing blog posts like this one 😉

How to Take Notes

It can be tempting to just type ahead during a talk. Noting down whatever seems interesting at the moment. However, you should meet basic formal requirements and write down some context. Otherwise, you will have trouble extracting useful information from your notes in the future. If you take notes regularly, it is also important to organize them by assigning tags and properties, having a creation date, being able to filter and search through them, and so on. Software can help with these things.

Until about a year ago I kept notes mainly on my local machines, syncing them with Dropbox. Applications that focus almost exclusively on note-taking, such as Evernote, never had that much appeal to me, even though I used Google Keep/Notes. It is not so bad, supports e.g. labeling and works with little friction on mobile. However, there is not even basic formatting support, let alone markdown formatting or code syntax highlighting.

Then, I discovered Notion.
At first, It wasn’t really about note-taking for me. I liked it mainly because of its database concept and for organizing third-party resources as described in the bookmarking section. However, by now, I use it heavily for almost all of my notes and other types of self-written content. I think Notion’s mix of markdown syntax support, slash commands, and WYSIWYG makes for a great writing experience.

I strongly recommend organizing all your notes in a single database with appropriate tags, such as meeting, presentation, tc, and question. Similar to the bookmarks database described above, Notion will automatically provide a column with the creation time of the note. If you have frequent meetings with the same people, you can think about adding a Participants column.

A notes database is the perfect use case for another great Notion feature: Templates. This feature will allow you to created templates for your different types of notes and then, for example, add a new meeting note with one click. Depending on the template, the new note comes with a pre-defined layout and might include fields for the meeting’s participants and agenda. This is what opens when I click to add new meeting notes in my database:

My basic meeting notes template.

My basic meeting notes template.

In my experience, it is best to keep project information as closely together as possible. For me, this means that issue tracking, merge requests (i.e. pull requests), documentation and everything else that comes with a software project should live alongside the source code.

This practice guarantees that anyone who works on the code now, or in the future, has access to all the information. My solution for this is to use GitLab for everything related to a specific project. This includes pretty much everything except some quick notes that I sometimes write in Notion because I do not want anyone else to see them.

To do this, GitLab offers a lot of project management and documentation features, such ass issue management, a project wiki, a Code snippet space for all projects and accounts, and more.
A project wiki is a great place for all documentation that is not specific to an issue. This can include the following:

  • Instructions for setting up the development environment
  • Instructions for manual deployment
  • Architecture descriptions and diagrams. I am a big fan of mermaid, which allows creating UML diagrams with Markdown and is supported by GitLab.
  • Guidelines regarding naming conventions, design paradigms, etc.

If you have read my post on running and hosting this website, you know that I use GitLab also for this personal blog project. Nevertheless, I use Notion for much of the project documentation and management tasks, because it comes with some unique benefits for this use case, as described above.

Of course, there are alternatives. GitHub has caught up in the past and offers a very similar feature set. I have only limited experience with Atlassian products, but I suppose you can achieve the same thing by using a mix of BitBucket, Confluence, and Jira.

On a side note, writing in Confluence feels a lot like writing in Notion. Both recognize markdown syntax and offer slash commands to quickly insert complex content types.

This one is relatively straightforward. I think the most important thing is to use some form of cloud storage. Personally, I use Dropbox.

Next, you should think about a proper folder structure. Finally, you should be able to search for your files quickly.

I use Linux and rely on Albert for searching through files. If this doesn’t work I use the locate command and, my last resort are command-line tools, such as find, and grep. They are still king for complex search requirements, such as regex matching and including also file content.

If you can tick the three boxes

  1. availability on all devices
  2. structure
  3. searchable

you should be all set.

Notion databases support file columns. This means you can upload a different file to each cell. I have not yet found a use case related directly to software engineering for this. However, it is great for managing invoices.

In this section, I want to present some special kinds of knowledge management use cases that are unique to software engineering. Most of them I have picked up properly only after starting to use Notion. By no means, I want to say that you should copy all of them, but you are very welcome to try out what you think looks interesting.

Code Snippets

Currently, I have two ways of collecting code snippets. I hope I can eventually integrate them somehow.

VSCode User Snippets

The first one are VSCode User Snippets. VSCode does many things right and snippet management is one of them. It is very easy to define new snippets and use them by typing a predefined string. Simply press CtrlShiftp and choose Preferences: Configure User Snippets. Then, you can split your snippets into multiple files or just put all of them together in the global-snipptes.code-snippets file. These are some of my snippets for writing blog posts with markdown and Hugo:

"figure": {
    "scope": "markdown",
    "prefix": "fig",
    "body": [
        "{{< figure src=""  class="center-figure"  caption="" >}}"
    "description": "Insert hugo figure shortcode"
"callout": {
    "scope": "markdown",
    "prefix": "callout",
    "body": [
        "{{% callout "warning info tip note" %}}",
        "{{%/callout %}}"
    "description": "Insert hugo callout shortcode"
"code": {
    "scope": "markdown",
    "prefix": "code",
    "body": [
        "{{< highlight bash "linenos=table">}}",
        "{{< / highlight >}}"
    "description": "Insert hugo code shortcode"

The snippets can then be used by typing the prefix and pressing Ctrl Space:

Notion Snippet database

The second use case concerns small pieces of code that I have written myself and that I would like to remember. This is not necessarily for productivity reasons, but rather for nostalgia. It is ideal for small algorithms, for example when you manage to substantially increase the performance of something by applying some clever technique.

I keep those snippets in a Notion database, which works great because I can tag them and add arbitrary properties. A nice benefit of this habit is that it’s not a problem if you don’t do it for a while. Your database will not look messy all of a sudden.

An exemplary entry of my code snippets database in Notion.

An exemplary entry of my code snippets database in Notion.

Shortcut Database

I believe that typing proficiency is important for a software engineer. It is easier to stay in flow if you can type fast and navigate around your IDE and tools with shortcuts. As my set of tools grew, I realized that I have a hard time to keep track of which shortcuts I am using, which of them work in which application, and whether I can change them so that they work across as many tools as possible.

Therefore, I started to keep track of some shortcuts I would like to use everywhere. These are things like creating new tabs, creating new windows, opening the respective tool’s search feature and more.

This database helps me identify overlaps and motivates me to think about which task could fit for a specific key-combination that I use often. For example, I use CtrlShiftT in IDEs to search for type definitions and CtrlShiftR to search for resources in general. Since I have these key combinations memorized for years and can use it very quickly, I want to make use of it wherever possible. Therefore, I try to set up my applications so that some kind of search opens whenever I use one of these combinations. My Notion database makes it easy to see which applications offer search features and which of them I can modify.

For example, my Browser now forwards CtrlShiftT / R to Workona and allows me to switch/search workspaces or use the general search, respectively.

Screenshot of my Notion shortcut database

Screenshot of my Notion shortcut database

Notion’s filtering and search capabilities are great for identifying problems with your setup. For me, a problem is when two applications use different shortcuts for a very similar operation. Unfortunately, Notion is negative example of an application that doesn’t let you customize its shortcuts and therefore reduces the usefulness of my database. If someone from the Notion team reads this at some point, I kindly ask you to lobby on my behalf to prioritize personalized keyboard shortcuts.

I am excited about this use case and will talk about it in much more detail in a future blog post.

I also have a Notion database to keep track of small web tools that I use. This serves little purpose for things that are used frequently as you will remember them anyway. However, for minor things that are only needed once in a while, such as color palette generators, detecting handwriting as LaTeX symbols, and checking SSL certificates this is quite handy. Usually, you can find these tools via google, but sometimes there are many tools for a task and it is nice to keep track of the ones that work best.

Screenshot of my software tools database in Notion.

Screenshot of my software tools database in Notion.

Again, the important thing here is to not overdo it. There are extensive publicly available lists of such tools. Your list should not be a copy of those but rather a small collection of the things you like and need from time to time.

Collecting Ideas for new Projects

Like many software engineers in these golden times, I sometimes think about starting new software projects, maybe even bootstrapping a small business.

You probably guessed it already, I keep ideas for possible projects in a Notion database. The main benefit is, once again, that it allows me to easily link it with other databases, such as my bookmarks.

Similar posts often conclude with warnings that you should be very careful not to spend too much time on organizing and maintaining your knowledge and workflows. In principle, I agree with this sentiment. After all, you want to increase your productivity.

I do believe, however, that it is worth it to spend some time thinking about your knowledge management system. The most important part about conceptualizing a system is to decide exactly which types of information you want to maintain in your knowledge base. If you get this right you will benefit for the rest of your career. Even if the tools might change in the future, the system will stay.

Please don’t hesitate to share your own experiences in the comments below. I am sure that my workflows are not perfect, but they might get closer with your tips.

This post is released together with a new post in my Reading List series, which lists related resources. If you want to dive even deeper into knowledge management concepts, you might want to have a look.


Want to create a portfolio that wows? Or maybe you just want to freshen up your personal website or blog. We’ve gathered 20 stellar (and cutting-edge) personal website designs to inspire you and help push the envelope when you tackle new projects.

These designs cover a range of professions, design aesthetics, and industries.

So whether you’re a web designer, illustrator, medical professional, or product designer, we’ll have a personal website design to inspire you!

1. Constance Burke

personal website

Constance Burke’s website is clean, quirky, visually engaging. Her fashion designs are highlighted by “models” that almost fall into the background with matching color choices and repetition. The navigation is clear and gets you to the right information quickly. The quirky style takes a big chance, but is enough to draw you in from the start.

2. Jillian Hobbs

personal website

Jillian Hobbs takes minimalism to the extreme and it is beautiful. When you have something simple to say, this approach can have so much more impact that layers of elements competing for attention. It’s so simple that you are almost forced to click around to learn more.

3. Marcus Eriksson

personal website

When your personal website showcases photos, like Marcus Eriksson, give them plenty of space to shine. What’s so interesting about this design is the grid seems broken, but it isn’t one bit bothersome. It actually enhances the visual experience.

4. Andrew Couldwell

personal website

Andrew Couldwell takes a chance with interesting typography for his name. (Not something you’d recommend normally.) But the style and flow are spot on. It shows his creativity – this is a creative portfolio after all – and ability to create interactive user experiences.

5. Aditi Pimprikar

personal website

Aditi Pimprikar’s personal website isn’t what you would expect at all. She’s turned the homepage into a virtual whiteboard that you can draw on while you think about her work. It’s a cool experiment to pull users into the design. (I’ll admit playing around and trying to draw for a bit.)

6. Adam Bartlett

mobile cards

Adam Bartlett’s personal website design uses a reverse navigation menu, with oversized buttons at the bottom of the page in addition to a full top menu. What’s nice about this technique is your eyes go right to the elements you might need – types of surgery – before you click other elements. Using this many navigational tools can be tricky, but the design here makes it effective.

7. Irshad Ahamed

personal website

Irshad Ahamed showcases skills in the interactive space with a website packed with tiny movements and animations to delight users. The color palette is bold and strong, which helps pull the eyes toward motion. Each interactive element is skillfully done, notably because there’s a lot of animation but it does not compete or get overwhelming.

8. Paul Kotz

personal website

Paul Kotz has a personal website with a quick focus. There’s a big image in the center and no navigation. But you can toggle the button to see his “hot takes.” (It’s a very nice feature.) If you agree with him … or not … click through to who he is. It’s a one page design that gives you plenty to click through.

9. Anthony Godwin

personal website

Anthony Godwin’s personal website uses a funky scroll action. When you move the mouse on the screen you get a bump or bubble. Hold to scroll. Let go to stay in place. It’s a funky take on moving through a one-page design.

10. Bob Weichie

personal website

At first glance, Bob Weichie’s design is uber minimal. Then his image morphs onto the screen, kind of like something from a sci-fi show. Sold!

11. Chang Liu

personal website

Chang Liu creates a cool interactive experience with plenty of visual cues. Play with the hand animation on the homepage as it shifts into a more traditional portfolio design.

12. Hayden Bleasel

personal website

Hayden Bleasel’s personal site takes a different approach with whitespace, a narrative, and then listing of audio clips and interviews to help you figure out if you want to hire him for a speaking gig, or employment.

13. Katia Smet

personal website

Katia Smet’s personal website is packed with layers of interactivity. Elements bounce, scroll left to right, and click to play. There’s a lot going on, but it’s hard not to look.

14. Den Talala

personal website

If you want the other extreme, Den Talala’s personal website is simple and easy to navigate. The only real thing to look at above the scroll is the cool, slow color-changing gradient for his name and information. (It’s quite nice.)

15. Dino Balliana

personal website

Dino Balliana draws users into a personal website with a crazy package of imagery. There are trending glitchy animations that will surprise you while trying to figure out what is happening with the visuals. It’s risky and interesting.

16. Zhenya Rynzhuk

mobile cards

Zhenya Rynzhuk’s site has a lot happening. But it’s subtle enough to be OK. Then there’s the easter egg. Hover over the image for an animated collage of her work.

17. Mike Basgrow

personal website

Mike Brasgrow’s personal website makes him seem like a huge celebrity. It’s sleek and classy and showcases when and where you can see him live. The parallax scrolling keeps you moving, proving that sometimes simple and sleek is best.

18. Peter Oravec

personal website

Peter Oravec’s portfolio is a game – seriously! The interactive experience takes a little while to play. But it is so much fun.

19. Hyun Io

personal website

Hyun Io uses a simple one-page personal website format where elements from the main menu merge onto the screen. The animation is clear and it’s a nice way to handle a design without a lot of content.

20. Robyn Choi

personal website

Sometimes a design is simply beautiful. That’s what you get with Robyn Choi’s personal website. The illustrations are lovely as the scroll action takes you through her resume in logical clusters of information.


Make sure the visit each of the examples you love above and poke around at the sites. Much of what makes these personal websites so nice is a combination of design and amazing user experience. (And you have to click around to get the full UX.)

Are there other examples of personal website designs that you love? Hit us up on Twitter — @DesignShack and @carriecousins. We love to share amazing work.


This is a declaration of love for personal websites, written from years of thinking on the subject, reviewing thousands of portfolios, building websites for friends and bookmarking those of strangers. It’s a subject I’m so passionate about, I built my business on it. And recently, it’s become a matter of principle.

Not long ago, the web was still the future. It was a big deal for companies to have their own site, much less individuals. Technology evolved. We picked up a few HTML and CSS tricks, discovered the wonders of Flash. We started spinning up our own sites, complete with guest books and visitors counters.

In those days, our website was our home. An extension of ourselves. Every day we visited our little corner, tweaked it a bit here, adjusted something there, stood back and admired it. Our site was a little piece of the internet we could own.

Fast forward to now and a website almost feels old fashioned. Our social profiles are all-consuming. Curating our Instagram page is our second job. We almost feel an obligation to share our work there, in addition to our personal lives. Our little corner of the internet? It now collects cobwebs.

“Our site was a little piece of the internet we could own.”

In contrast to our personal websites, we don’t own our social platforms. They own us. On top of eating our time, our emotions and our focus, they are demanding our privacy. Whether we realized it or not, we signed away our rights when we signed up for these platforms. We not only give giant tech companies our personal data – we allow them to use, sell and share our content in whatever way they wish. Soon, we will see the repercussions of freely giving away our data and our work. When it comes to creativity and self-expression, the loss is already apparent.

On social media, we are at the mercy of the platform. It crops our images the way it wants to. It puts our posts in the same, uniform grids. We are yet another profile contained in a platform with a million others, pushed around by the changing tides of a company’s whims. Algorithms determine where our posts show up in people’s feeds and in what order, how someone swipes through our photos, where we can and can’t post a link. The company decides whether we’re in violation of privacy laws for sharing content we created ourselves. It can ban or shut us down without notice or explanation. On social media, we are not in control.

As designers, we already forfeit a degree of creative control outside of social media. At our day jobs, we usually don’t have a say in the final product. Directors take over. Politics and process force their way in. Clients leave their fingerprints on the work or reject it entirely. If our work does see the light of day, and there’s no guarantee, the execution is not always how we imagined it. Work is not the place for personal expression and full creative freedom. It’s the place to follow the creative brief and solve the problem presented to us. So what’s left for us to call our own?

Our personal website.

We control the layout of our website. We can create a page that reflects our taste, our personality, our style.

We control the narrative, too. It’s here we can finally show our work the way it’s intended to be shown. We get to tell the story exactly as we wrote it, with context the audience or user doesn’t typically have. It’s our chance to own our work and put it in its best light.

We decide the way our website functions. We can influence how people interact with our work. We can guide our visitors through our content in the way that most makes sense. We can lead them straight to our contact info.

We choose whether our work stays alive on the internet. As long as we keep our hosting active, our site remains online. Compare that to social media platforms that go public one day and bankrupt the next, shutting down their app and your content along with it.

“Having my own website says I care about what I do beyond clocking in and out and cashing a paycheck.”

At the risk of sounding religious about this, and maybe I am, our personal websites are our temples. They remain the one space on the internet where we decide how we are introduced to friends, potential employees and strangers. It’s a place where we can express, on our terms, who we are and what we offer.

As a working professional, it feels empowering to have my own website. Just seeing my personal domain name and my email address that ends in it gives me this little boost of confidence. Scrolling through my work and making small adjustments makes me feel like I’m deciding my future. Considering the percentage of opportunities I get through my portfolio, that feeling is accurate.

Having my own website says I care about what I do beyond clocking in and out and cashing a paycheck. It shows I’m proud of what I create. If my taste or my work or the industry evolves, I have the power to reflect that on my portfolio. If I launch a new project, my first thought is to put it on my homepage. With this blog, I can write articles that connect directly back to me and my website. Social media is a nice way to extend the reach, but it all points back to It’s the one link I give to people inquiring about me and my work, rather some URL or social media handle I don’t own. My site is the little place I’ve carved out for myself on the world wide web. It’s mine.

Call me old fashioned, call me nostalgic, call this a self-serving attempt to convince you to use All of those accusations are at least partially accurate. But the real truth is that as long as we’re putting our work in someone else’s hands, we forfeit our ownership over it. When we create our own website, we own it – at least to the extent that the internet, beautiful in its amorphous existence, can be owned.

  1. Why a blog is important for every developer
  2. Advantages of your developer blog
  3. Six beliefs that stop you from writing
  4. How to start blogging
  5. What’s next?

Content creation is one of the most popular and efficient ways of building personal brands, accumulating an audience around a product, showing others your point of view, and sharing knowledge. When you are a developer, you can also use content on your developer blog to level up your skills as well as your career. 

In this article, I’m going to show you why running a developer blog is a good thing and why you should not consider blogging as a way to gain attention but as a way to build your personal brand and position in the IT world. Surprisingly, you don’t have to be an expert in any technology to build your own blog from scratch and it doesn’t have to be a time-consuming process. If you are not yet convinced why you should run a blog as a developer, then let me show you how many benefits you can get from it. In the modern world, you really have to sell yourself, and writing content is one of the most efficient ways to sell anything.

Why a blog is important for every developer

The IT industry is growing each year, and there are more and more developers present these days. If you are not satisfied with mediocrity, you have to show up so that other people—your potential clients or employers in the first place—will be aware of your capabilities and skills. Running a blog is one of the best ways to increase your visibility among the crowded marketplace of other specialists and experts, and sharing your experiences and projects with others will increase your audience’s trust in you.

  • You should be visible to clients / employers / recruiters – If you want to be noticed, then you have to show up. Many times, people are hired not because they had better skills than their opponents but because they showed up and presented well in front of the employer. Only around 1% of developers run their own blog frequently, so you are going to join an exclusive group that puts you above other developers who don’t share their knowledge online.
  • You should constantly verify your knowledge – This idea is not comfortable but it’s so powerful—unless you want to verify your knowledge in the production environment and produce extra costs for your company. Knowledge is one of those resources that has to be up to date every day. Nobody is perfect, but the IT community is very friendly, so you can count on other, more experienced developers to let you know if they have a different point of view or think your approach is not right. You always validate your knowledge by confronting it with other people, and the more you do it, the better you become and the fewer mistakes you will make as you grow.
  • Soft skills are as important as technical skills – You need soft skills if you work with the clients directly, collaborate with a team, or even just write documentation for your software. Blogging is one of the ways you can dramatically improve your soft skills. By writing, you practice how to form your thoughts and share your ideas with other people. Albert Einstein once said that if you are not able to explain something in simple words, you probably don’t know it well enough. In fact, many developers out there have incredible technical knowledge, but because of poor soft skills, they are not able to explain it clearly in front of another person. This makes them seem less great than they really are!
  • CV does not matter anymore – When you show up and share your knowledge, it’s obvious what type of skills you have. Only the HR department might be interested in your Curriculum Vitae— it really won’t affect the way other people look at you.

Get the latest articles on Growing Your Personal Brand delivered straight to your inbox.

Advantages of your developer blog

There are many indirect benefits from blogging, but there are also some specific ways you can use it to speed up your work and build extra income. Below are some advantages of blogging:

  • Generate income from sponsored articles – If your blog becomes popular, you can start writing articles for partners on your blog or partners’ blogs. This is possible when you show up and other people notice your skills. Collaboration like this can leave both sides highly satisfied.
  • Sell your own books, courses, etc .– When you give out your knowledge for free, you build an engaged community that is ready to buy something from you because they know you well and identify you with quality content.
  • Build a strong personal brand – A strong personal brand attracts everything good in any career: proper people, chances, opportunities, money, and so much more. If you know someone well, you wish them the best and are ready to help them whenever there is a chance. If you build your brand by writing a blog for free, then you have many people around who know you and are grateful for the knowledge that you share.
  • Do not solve the same problem twice – When you face problems that you’ve solved in the past, you don’t always remember exactly what the solution was. When you are blogging frequently, you can always search through your blog and find the answer—it’s as simple as that.

Six beliefs that shouldn’t stop you from writing

Even if we feel that we are ready to start our writing journey, there might be some beliefs that will stop us from doing it. Be aware of those mentioned below and keep doing great work.

    • A blog is useful only to teach other people for free – if you are not an altruist and teaching others is not your main objective, you can always treat your blog as a diary where you can track your progress. A blog is a great business card for your future employer because it will expose all the skills that you have gained through the years.
    • You don’t have anything interesting to say – write about your daily challenges unless the code you want to post is company IP. If you still think that it won’t be interesting then try instead to gain some new skills and write about the process you are going through!
    • You don’t want to write about something that has been described many times before – each of us has our own unique voice so even if you are going to write about a well-known topic, you are going to do it differently. Undoubtedly there are some people out there that will like your style of writing, eager to hear your unique point of view.
    • Nobody is going to visit my blog – you don’t have to be great to start but you have to start to be great. Remember about the greatest writers of our times? Their writings were rejected many times before they finally publish their work and now have thousands of readers. All you have to do is to keep creating and showing up every single day. Show your articles to your workmates, publish a link in the related websites and you will see that the visits counter will grow every day.
  • I don’t have time for blogging – then you might have trouble selling yourself without a well-developed portfolio that you’ve put together over time in your blog. With every article created on the blog, your portfolio grows and you are able to show what you are capable of any time when there is a need for this.

How to start blogging

If I have convinced you by now that you should start a blog, don’t worry!  It is not that hard to do. First, decide on your blogging engine. One approach could be to use WordPress.  If you love PHP, great! But if you’d rather build a blog with a modern programming language to further strengthen your skills and also to show them off then I’d recommend using a headless CMS.  You can even do so without building the whole blog system from scratch.  Doesn’t that sound great?

This is where  ButterCMS can help you achieve your goals.. You can use a simple yet powerful API to build a blog with whatever technology you like, focusing on the content creation instead of wondering what database you should pick up for your project. You can even use the awesome Hugo framework for building fast websites and take advantage of the JAMStack to quickly build your blog. Headless CMS is a great alternative for monoliths because it gives you full flexibility, a lot of features, and ButterCMS is free for personal, developer blogs like yours.

What’s next?

You already know that blogging is a perfect way to build a personal brand and promote products, ideas, and businesses. And now you know what technology you can use to start your blog platform without wasting time and money. So, the next step is to jump into the creative process and begin writing some articles!

Start small and use a Headless CMS.  It’s easy to do because you have everything you need, no matter how big your goals are. Now jump into Butter and launch your writing career!

Get the latest articles on Growing Your Personal Brand delivered straight to your inbox.

About the author: Paweł is a self-made writer of the digital era, IT samurai and problem solver who loves Ruby. He writes for human beings and computers at and focuses on soft skills in the software creation process.