
What eight years of side projects have taught me (2019) - yumaikas
https://www.junglecoder.com/blog/idea-chain-themes
======
freshfey
For those who feel like a side project needs to be successful or reach a
certain amount of revenue/lines of code/users to be successful in your eyes:
Don't feel pressured.

In my career (granted not a long one, but made it to C-Level in a startup
after about 5-7 years) I've always used them to show my interest and learning
skill to do something. It didn't matter whether it had 1 user or 1 million,
employers were always very impressed and it always gives you an advantage
during interviewing. Most of those have also been with very little or no code
at all.

I'm normally prioritising people with side projects in the recruiting process
vs. people who only did school -> work

~~~
hackerbabz
Are unfinished projects worth anything to an prospective employer? I have
plenty of projects I attempted before getting busy with real life. Should I
show those when asked for a Github?

~~~
PaulRobinson
YMMV, but when I interview as an employer is ask a candidate to talk me
through a project they really enjoyed. It can be work-based or a side-project,
doesn't matter as long as it's something they really enjoyed. We then use that
to explore what it was that excited them, the technology decisions they made,
etc.[1]

If your answer was an unfinished project, I'd want to know why they were
unfinished. Did you give up on them because of external pressures, you had a
better idea, or because you often struggle to finish things you've started?

That last one is not alway a pejorative statement, BTW. Some people are great
at figuring out the big stuff and then need others to help them execute on the
detail (think about architects or producers). Others however, just give up at
the first obstacle they meet, and if I get that impression from a candidate
I'd want to dig into it a bit as it's possibly a yellow flag.

My advice then: think carefully about what they are likely to ask you about
those unfinished projects, and what your answers are likely to be, before you
offer them up.

[1] The most interesting answer to this question I've had was "an OpenGL
renderer for the X Window System written in Lisp". My follow-up questions were
many...

~~~
hackerbabz
Follow-up: Where do you think my time would be better spent preparing for a
new job? Making a sideproject I can show off or doing interview puzzles?

~~~
throwaway92384
High-pay or high-reputation jobs where the employer can be selective (FAANG,
quant finance) seem to test for high IQ with interview "puzzles" (computer
science puzzles of course).

Good employers, but who do not have more qualified candidates than they know
what to do with, are already very happy with someone who simply has an
interest in his job, as this is already rare enough. They pay attention to
personal projects as signs that you actually belong in IT.

Government and, by extension, the consultancies that cater to them, pay
attention to diplomas. Bureaucracies recognizing the stamp of approval of
another bureaucracy, is one way of looking at it.

------
eric_khun
I completely can relate to your experiences (wrote a post about side projects
[1]). Strongly agree with "Programming in a void is worthless". Learning a new
language shouldn't be the purpose to start a new project, it should just be a
tool to get a side project going. And the goal of the side project will make
you force you to use it, so it's a great way to learn. It can sometimes be a
struggle to learn how to achieve X or Y with that tool, I now tend to use the
language I know (that I've learned with previous side project) to ship a new
side projects faster.

[1] [https://erickhun.com/posts/why-you-should-have-a-side-
projec...](https://erickhun.com/posts/why-you-should-have-a-side-project/)

~~~
alithejumbo
In my experience "Programming in a void is worthless" was the main factor to
put the language aside and lose interest. Only learning for projects drove me
all along through Node, Golang, C# and counting.

~~~
bcrosby95
I went pretty wide on languages too. I kinda wish I spent that time learning
more useful things though. It's certainly nice to be exposed to different
language concepts, but I think there's too much conceptual overlap between
e.g. C# and Golang for there to be that much benefit from it.

If I had to pick languages that changed my thinking the most, they would
probably be: Haskell, Erlang, Clojure, Prolog, and R. Unique languages like
Erlang/Elixir and Prolog can be "10x" languages - they were written for
specific purposes and if your problem fits that purpose it will be much easier
to solve than in most other languages.

------
codr7
Same here, though I've been chugging along for 34 years. Used to write all
kinds of software to try out new languages/ideas, but that all changed once I
went down the rabbit hole of designing my own language. Since then, I've
mostly been trying out different host languages, features and implementation
techniques. I figure once I get to a point where the language is good enough,
I'll go back to writing all kinds of software but in my own language. It
really doesn't matter that much, the journey is the goal, you do whatever it
takes to stay motivated and keep learning.

[https://github.com/codr7/gfoo](https://github.com/codr7/gfoo)

------
inapis
As someone, whose side project[1] graduated into a full-time company, I agree
with a lot of stuff in this post -

> Lesson 0: Programming in a void is worthless

100% true. If you are trying to learn a language without a goal, you'll
probably never graduate from tutorials. Imposing your own
requirements/boundaries, just makes the learning part more engrossing and
you'll make connections which you won't otherwise. Iterating as fast as
possible is worthwile itself.

If you want to grow as a programmer even more, try to convert that side
project into a paid one. It definitely changes your view of the world. As
programmers, we want to see elegance in code but real life is messy. We want
to separate the world of programming from the human life and sometimes for
good reason. You might find satisfaction in writing pure code (and that's
great) but there's an opposite world too which will humble the strong opinions
within you. Haggling about microservices vs monoliths seems trivial in the
grand scheme of things (the customer doesn't care!). I still debate about this
with fellow devs but at the end of the day, I really don't get stressed about
it. For me, programming is pretty much only about building solutions to
existing problems which improves my or others lives. Everything else is just
an opinion which will not be considered until its time is due.

> Lesson 2: Organizing my thoughts is important, but tricky to figure out

Agree. Especially difficult if the software doesn't structure the knowledge in
the same way as we think. As a dev, I have never been satisfied with any
specific solution. But don't fret honestly. It's unlikely that any given piece
of software will work for all your cases. Always take the context into
consideration. Plenty of times I work on paper if what I'm thinking doesn't go
into a specific tool. Don't try to fit yourself into a box when your mind
itself can't. That said, a mindmap (big picture) + a task manager (big picture
broken down into specific tasks) + a note taking app (learnings + thoughts
derived from completing specific tasks) covers most of my bases. For publicly
available information, I store it in a tool of my own making[1]

[1] [https://getliste.com](https://getliste.com)

~~~
eandre
Liste looks great! I've been looking around for a better tool to aid in note-
taking after all the posts around this space over the last few weeks. Will
keep an eye on it and good luck with the launch.

How did you decide to start a company around the idea before launch?

~~~
inapis
Thanks.

It was mostly a personal itch. I had been using Pocket for sometime but it
honestly wasn't cutting it anymore. I built a smaller app over the Pocket api
but as time progressed, the app diverged more and more. Once the Pocket api
just became a glorified database, I decided to go all in. I waited for other
solutions to come around but none were satisfying enough. After 5 years I had
enough, talked to some people who expressed similar desire and that's when I
jumped in full time.

------
bluedino
>> Most times, when I’ve tried to learn a programming technology without a
concrete goal to get something built, it is hard for me to maintain interest

I feel the same way.

However, I take it one step further. I lose interest after I create the one
core feature that drew me to the project. I've made shoot em ups before, but I
wanted to do one with enemies that flew in like Galaga. After I replicated the
first few patterns, I lost interest. You couldn't even shoot the enemies, but
I already knew how to do that.

------
city41
I've never had a side project lead to anything profitable in the monetary
sense, but they've been very helpful in me getting great jobs.

I'm currently taking a side project and going to attempt to make a business
out of it. As far as building it goes, it's basically the culmination of about
5 other side projects I did over the past couple years. So I've been able to
build the MVP extremely quickly.

I totally get and appreciate the "don't code outside of work, have a life",
but at least for me, side projects have been very valuable.

------
Insanity
Side projects are great. Not just for learning technology, but also for
playing around with technology you already know.

It can be fun to built something without the 'overhead' of Sprints, standups,
team meetings, design documents,.. :)

~~~
ThalesX
I love it how when a new situation comes up at work that I have encountered in
my side projects, I can come up with some approaches, strengths and weaknesses
pretty fast. It makes me look like I'm a lot more knowledgeable than I am.

~~~
Insanity
Well but actually you are that knowledgeable - you just gained the knowledge
through experience outside of work.

But you're right, it happened to me a few times as well and people assume you
"just know". :P

------
Blaiz0r
I'm one of these people that doesn't have much time less the energy to focus
on side projects when I'm home from work, that said my career has been
changing over the last few years and at times I rarely have any code to write
at work.

These are the times when I really find a yearning to write something and I
want to put a bit of time into a side project like learning Godot, or writing
a desktop GUI based program with Rust.

I just need to be doing something different with my day job to have the
inspiration and energy to code when I get home, unfortunately at the moment
I'm coding at work again, and when I get home I will stare blankly at the
screen infront of me if I try and write more code, even in a different
language.

~~~
yumaikas
(author here)

I definitely recognize that not everyone has the energy to code at home after
a day of coding at work. Often, I don't either. Side projects are a varying
thing for me. I do try to make sure what I do code gets documented in some
fashion, however.

------
codingbbq
I can relate to the post, having just started for couple of months now,
learning to write code for your self is satisfying. I have followed several
youtube videos to learn programming language, but the fruitful results only
come from working on side projects/challenges etc.

The only way to account my progress is through github commits. I love the
color green. ;)

Would love to get feedback on my blog
[http://codingbbq.github.io](http://codingbbq.github.io). Cheers.

------
mmahemoff
I agree you should have a real problem to solve when learning a new language.
However, I'd temper expectations about the outcome.

Generally I find side projects are either about learning a new
technology/language or making something that should exist, but not both. It's
important to be clear which is the primary objective.

If the objective is to make something, pick the most familiar language and
libraries, bang it out, and ship it. If the objective is to learn something,
for sure pick a real project to focus your efforts, but understand it will
take longer and the end result probably won't be amazing, though hopefully
you'll learn a lot in the process.

------
platz
I put all my notes and bookmarks in my self-hosted bookmarking site
[https://github.com/jonschoning/espial](https://github.com/jonschoning/espial)
. I definitely agree with the author that the combo of tags, search, the feed,
and notes is very effective technique that I sure every day.

~~~
cies
In Haskell and Elm! Nice project. I did not see any code "shared" (or Elm
generated from the Haskell code) to enforce type-safety across the network
barrier. Afaik there are a few projects that could help with this. Not saying
you need this (small project, easy to manage) but it's very sweet to have type
safety from db, through BE app layer, though the wire format, all the way to
the FE model code.

~~~
platz
Close - Haskell & purescript!

~~~
cies
My bad. I saw that but somehow my fingers typed Elm. Bad fingers.

~~~
platz
Hehe, no problem!

------
shrimp_emoji
>The nice thing about the Go/Lua journal is that it’s far more flexible than
the C# version, due to being able to write pages in Lua. Which means I’ll be
able to

To what?!?! D:

~~~
yumaikas
I don't know exactly what I was thinking when I wrote the article, but, here's
the best fix I think I can add (article edited to include it):

> Which means I’ll be able to use it for more things, and hopefully get that
> tight feedback loop back in place.

------
agumonkey
> Lesson 0: Programming in a void is worthless

I wouldn't say worthless, but there's a world of difference whenever you have
a practical use (or someone else's use). It forces your brain to focus and go
broader at the same time.

------
austincheney
What my years of side projects have taught me:

* At work its better to hurry than get anything done.

Regardless of language if you work for a company of greater than 1000 people
there is a certain nearly identical way of doing things. This way of doing
things is based upon a combination user platform, quantity of developers on
the market with a particular skill, and a need to pretend to be busy even when
you don't actually accomplish anything. In most of my experience the platform
was the web and the language of choice was Java (even though Java is not a web
technology).

When you are working on side projects there are only two goals: don't waste
your own time and produce something of value. Nothing else matters. And so you
learn to become very productive and extremely focused on what you ship to
production, because you would rather be playing games or drinking a beer than
pretending to be busy.

The corporate world doesn't work like this. Everybody is paid a salary
exchange for 45 hours of your life each week and your assignments are
generally governed by an agile sprint cycle, so there is absolutely no
motivation to be productive. Maybe if you work twice as hard your bonus will
be 5-10% bigger. Maybe if you deliver code that is perfect in that it never
requires maintenance and never churns defects you can spend more time reading
about foreign places on Wikipedia.

Frustration sets in after watching the corporate approach continuously
releasing defective code into production because its important to hurry
instead of write things down or write the code correctly the first time. You
could always suggest a better way of doing things, but since there is no
motivation to do things better all you are really accomplishing is frustrating
other people.

* At work don't reinvent the wheel (if somebody/something is capable of doing your job then let them do your job)

When you are working on side projects there is nobody there to do the heavy
lifting for you. You can figure it out or it simply isn't important enough to
get done. It's the same way with risks and product performance. People who
haven't spent time on personal projects or with equity at a start up have no
motivation to try harder. That is why there are giant frameworks and a couple
1000 open source packages in your corporate application to solve simple common
problems developers are unwilling to solve themselves. Nobody working on a
public personal project will build around something like the 1000 ton hammer
of the gods that is Angular or Sprint MVC, but you will certainly find these
in public facing enterprise applications where developers have no care about
punishing their users in exchange for easy.

* You are more productive not doing work

A tremendous part of writing software is the cognitive thinking that occurs
away from the keyboard. This could be planning, brainstorming a new feature,
reflecting on a past feature, or putting things together in a new way to
envision defects or refactoring opportunities. That said, its more valuable to
work really hard to accomplish a feature or solve for a defect and then back
off from the computer. You haven't stopped thinking about the application, but
now you are thinking about the experience or new ways of doing things that you
would never think about purely looking at the code. In the corporate world you
are extremely lucky to find documentation much less anything like planning or
feature engagement from the developers.

~~~
AmericanChopper
> The corporate world doesn't work like this. Everybody is paid a salary
> exchange for 45 hours of your life each week and your assignments are
> generally governed by an agile sprint cycle, so there is absolutely no
> motivation to be productive.

I’ve consulted in a lot of large enterprises, and this is really untrue. If
you’re happy just stagnating and some level that you’ve decided is good
enough, you can get away with it for a while. But such people absolutely don’t
develop their careers. They’ll probably get small raises every year, and
perhaps the occasional promotion based on years served. But that’s really as
good as it gets for them. You also can’t do it forever. Most of the time when
I go into a new organisation, I find groups of these people. They’re usually
very friendly to work with, but they’ll have skills that are 10-20 years out
of date, and mediocre at that. Eventually even the slow moving large
organisations start to outpace their own personal development, and they get
left looking for jobs that don’t really exist anymore. I worked with a guy a
few years ago, and all he’d ever really done was Swing projects. He added me
on LinkedIn a few months ago, he’s been working at a cinema for the past two
years, trying to find a new Swing project to work on.

~~~
austincheney
> But such people absolutely don’t develop their careers.

Given the choice what is better: developing your career or your
skills/competencies?

Many developers learn some tool or giant framework instead of actually
learning to write code or how to do their jobs because they are in a hurry to
develop their careers. I would rather work with competent people who are less
in a hurry to artificially justify their existence.

As an example in the real world nobody advertises their experience with a
screwdriver, but the opposite is true in software. People will frequently
advertise their limited value as a React or Angular developer. It’s clear they
know how to use a tool, but can’t write an application to save their lives (or
careers). Why should I not find that frustrating, particularly when these
giant framework applications suck and these developers are immediately hostile
to original code?

In that kind of work culture I could be 10x more productive, but if it’s met
with hostility and not rewarded what’s my motivation to do anything more than
be barely awake?

~~~
triceratops
> developing your career or your skills/competencies?

GP was saying that you only develop your career by developing skills. React is
a skill, so is Angular, so is the wide world of front-end web programming.

~~~
austincheney
I disagree those are tools, like an grossly enormous hammer. If you had
learned data structures, the DOM, storage, and all the other things that
comprise the platform your opinions of the available tools would change.
Nobody else in the world immediately jumps to nuclear weapons as their first
stage tool. Only in software do we immediately jump to the nuclear option for
all tasks, and there is something wrong with that.

~~~
triceratops
> data structures, the DOM, storage, and all the other things that comprise
> the platform your opinions of the available tools would change

I do know all of those things. I still think React, Angular and other frontend
frameworks have a time and place.

------
chapliboy
I am stuck in the same loop of trying to find the best way to organise my
thoughts. My best attempt was using Dropbox Paper. They have a great
editing/writing experience, but eventually it got to a stage where the page
load times took too long.

I'm currently trying out vimwiki. Let's see how that goes.

~~~
mercer
I've let go of my addiction to finding the best tool and settled on Emacs+Org-
Mode (specifically with Spacemacs so I can use Vim keybindings).

Over the years I've tried so many tools, languages, workflows, and the only
ones that stuck were the ones that were boring but timeless. I've not just
been gravitating toward OrgMode for all my note keeping, but I've also gotten
more and more into bash for much of my stuff.

There are downsides to that, of course. It's frustrating that I'm mostly
limited to text-only things, for example. But it feels like any investment
into bash/emacs+orgmode/emacs+tramp/emacs+? offers so much more than becoming
reliant on app number <x> that quite possibly disappears or stagnates.

~~~
temo4ka
> bash/emacs+orgmode/emacs+tramp/emacs+? You wanted to say "Magit" in the last
> one :-)

Why do you say you're limited to text-only things? Org supports links, images,
code blocks, spreadsheet-like tables and such. For me the experience of
migrating to Emacs+Org was more of a liberating type.

~~~
mercer
Ah yes, Magit is still on my list of Emacs things to learn :).

------
allochthon
Slightly related. Here is a side project I wrote to keep track of the tons of
information I've read about or _might want_ to read about one day, which kind
of overlaps with the journal app that was described:
[https://digraph.app/](https://digraph.app/).

Information is different than knowledge, and part of the challenge of
acquiring knowledge is being able to get back to information you know you've
seen in the past if it seems relevant to something in front of you right now.

------
eandre
This is good advice. I've been working on a side project for almost a year now
[1]. It's a constant struggle with the pressure to reach a certain amount of
users or impact, when at the end of the day I've just been building it to
scratch my own itch. This article is a helpful reminder of that.

[1] [https://encore.dev](https://encore.dev)

~~~
srat17
Offtopic: what kind of UI library/framework/whatever did you use for that
landing page? (For example: bootstrap?)

~~~
eandre
I used TailwindCSS which I can highly recommend, but the design and components
were all custom made by myself :)

------
harel
Very true. I followed the same path, and a side project was always the way to
learn something new. Sometimes those side projects become full on ventures as
well. Added bonus.

I also very well remember my joy after I "invented" the AMQ, only to later
find out about ActiveMQ, RabbitMQ etc. (which didn't diminish that "proud"
feeling)

~~~
dillonmckay
I think that is some of the best validation, to know that your solution is not
to different than the ‘standard’, without having any prior knowledge of its
existence.

Good work!

------
GuB-42
> Lesson 3: Search is a great tool for debugging and flexible organization

"Give me modularity or give me grep!"

That saying was intended to showcase the importance of modularity, with the
idea that you shouldn't need to grep good code. But my personal experience is
that if you have to choose, grep wins, no contest.

------
jasoneckert
Excellent advice.

And starting with #0 adds street cred.

------
markus_zhang
I like your blog's style and color. Do you have a blog dedicated to building
it? Thanks

~~~
yumaikas
I don't at the moment, though I could write one up at some point.

The short answer, though, is that I knew I wanted green in the color scheme
(due to having grown up in the tropics), and I liked how James Hague did his
blog [https://prog21.dadgum.com/](https://prog21.dadgum.com/)

The rest was just iterating on that.

~~~
markus_zhang
Thanks, I really enjoyed the theme.

