Second Sock Syndrome
sheepamongwolves.net
sheepamongwolves.net
In short:
> What is the Second Sock Syndrome?
> SSS usually refers to the inability to produce complete pairs of socks. Knitting the first sock usually goes quickly. But the second one seems to drag on, never gets completed or even cast on in the first place.
It's entirely a knitting blog, but surely this was posted here as it's a problem I know I face in all sorts of domains, including programming. Once the interesting part is figured out, finishing the project is the tough part.
The challenge for your second sock is to accurately repeat your process of the first one. The challenge of the second system--where you reimplement something from scratch maybe--is to keep the scope limited but you are trying to depart from the mistakes of the first one.
https://adamo.wordpress.com/2019/02/03/the-second-system-eff...
Any time I have doubts about how to finish, what that really means is I need more feedback and take a completely fresh look at my priorities.
As such, I was going to skip the article. Fortunately, I saw mumblemumble's comment below
I'd break the suggested strategies into a few general categories. You can be so intrinsically motivated that you never really encounter this problem in the first place (1). You can play psychological games to try and make it harder to lose interest (2, 3, 4, 8, 9). You can alter the workload in a way that makes it more interesting, but may cause quality to suffer (5, some 7, 10, 11, 12). You can rearrange the work in a way that actually creates more work, but also helps it stay interesting for longer (6, some 7, 10, 11, 12).
I find that those last two categories tend to go hand-in-hand in programming, too. So finding ways to help yourself just muscle through the boring part really is preferable in a professional setting.
OTOH, for fun projects, both sock knitting (and mittens) and development, I tend to go for those latter strategies. The corollary here is that I try not to knit socks for others, and you probably shouldn't take a dependency on anything I'm not getting paid to write.
A portfolio of completed projects is actually a thing worth having in game dev. Doesn't necessarily mean a project polished to the nth degree but instead, a project that is a cohesive whole. (I'm not saying polish is a bad thing...)
Notes to the pedantic: this doesn't exclude a portfolio of specific examples. eg a set of graphics assets or level assets. Or a graphics library. But the thing needs to have been "done" and not in perpetual "there's this obvious giant hole where this important functionality is missing". And yes I've had success with incomplete projects but they were fully playable just with "programmer art".
If I have very few customers, it's a portfolio project. If I have a bit more, it'll break even and I can dedicate some time to it. If it grows even more, I'll try to make a business out of it.
But I think it's really important to remember that finishing is itself a skill that is worth learning and if you don't finish things, you gain no practice at that skill. Writing the first 80% of a hundred programs may give you a lot of skill in different domains, but it won't give you the ability to finish a program in any of them and get it to a point that it can benefit other humans.
You may want to check out a guy named Robin Sharma. You can find a bunch of his videos on YouTube. No need to pay for anything. The videos contain pretty much all you need. I'm trying to work on incorporating his ideas into my routines. What he talks about really is all about mentality and what sets apart superachievers from everyone else.
EDIT - just realized your question was specifically aimed at personal projects. The second paragraph still applies, in that case, but you can ignore the first as there won't be any embarrassment from personal projects not being completed. Oh, that just reminded me...for the personal stuff you can use one of those sites that is designed to hold you accountable by bringing in family/friends to monitor your progress and you set a clear goal with a clear penalty if you fail to deliver, and they are there to see if you follow through or not. The website I am familiar with is https://www.stickk.com/ but I'm sure there are others.
If someone else talks about a similar topic (e.g. a related article gets onto Hacker News, or someone asks "when will it be ready?") then I'm much more motivated to actually finish it.
If I need to find a job, I often try to write up the documentation and post Show HN projects. Occasionally I'll do that anyway, but it's easier when I'm in "writing" mode anyway (if I'm writing cover letters and emails).
The best motivator is to have someone else to work on a project together. Seeing the EspUSB WiFi mouse & keyboard through to production is something I wish I could witness, but I just can't get past the paperwork alone.
E.g. plan to put it on your homepage or github. Or if it isn't suitable look to present it at some event, a local hackerspace or even to your friends or relatives.
By having a goal like that you are forcing yourself over the edge while at the same time making visible what you are doing all the time which both benefits you in the end.
While this can be scary, with the right audience it can be extremely gratifying to get recognition for what you're doing.
Edit: of course you really don't need to finish every project you start. Sometimes you learn so much during a project that you would actually so it differently if you were to start again.
The problem we face is that it usually takes an order of magnitude more time to build that machine than to actually knit the second sock...
knit.sock(.left)
However, your next roadblock would be the framework itself: you throw new tasks at it that it can't handle, you start adding more states and conditionals, more lambdas and/or polymorphism until it gets so ugly you start hating the framework (and yourself) and realize you will never finish it. Time for a big rewrite.One of the essential skills in software engineering is the ability to carefully craft beautiful and minimalist abstraction layers that won't let you down.
IMO knitting is closer to CRUD dev: it's a little challenging but it's mostly just reading/following patterns and counting (although this is coming from someone who crochets and doesn't knit.)
The chemicals which activate our sense of happiness more than anything is the feeling when we see our friends and family have breakthroughs and achieving a goal. It’s probably a bigger factor for the one that is trying to reach that goal.
This is perhaps why twitch is so popular, even in an activity such as gaming which has been made to be fun by itself alone, socialization is a force multiplier.
I can have a sense of this at different work places, people are so focused on result and not on the process that people stop caring of craftmanship and disciplin. In the long term it makes the company rot from the inside with high turn over and lost knowledge and increase of technical debt and finally a losing business.
However, from the title I thought it was about the law (if it's not a law, it should be) that says that if a pair of sockets in a drawer are put together you can easily find the pair. Instead if you find one of the socks of the pair, the other sock of the pair, while still in the drawer, is mysteriously teleported into another dimension, never to be found again.