Six Months
Tags: programming, planning, goals
Published: 2020-10-20 03:31:39

<small>([*Originally Posted to my Blog*][blog])</small>

Technology moves fast, and programming is no exception. This often leads to
*programmer fatigue*, where we feel like we can't keep up with the latest
and greatest, stuck having somewhere between a beginner and intermediate level
of compentency in a given technology, only to have it be superseded by The Next
Big Thing™ before anything more can be gleaned.

This problem affects me specifically by pitting two of my strongest impulses
against each other: my love of building things and my drive towards
"perfection."

Of course, with computers, and especially within the well-traveled field I work
in (web development / [SaaS][saas] / what have you), everything is far from
perfect. This is not an indictment on the current state of things, but instead a
truth I need to embrace. I'll ellaborate by outlining my current process below:

1. Have a certain technology pop into my head. This can be from reading an
article or blog post, a discussion with a co-worker, or just a though that pops
into my head. At the outset I generally have a rosy feeling about any
technology - that's the part of me that loves to build things seeing all of the
possibilities. This used to be by far my favorite part of the process - a), I
haven't had to do anything yet, and b) I can confuse all the possibilities of
what I *can* build with a given tech stack with what I *will* build in reality,
given my limited time and resources.

2. Start the development environment setup for my tech stack *du jour*. I'm
actually pretty good at this, for two reasons: instead of actually build
anything of lasting value, I come back to steps 1 and 2 a lot, usually deleting
whole cloth whatever progress I've made when something doesn't go my way down
the line, and my perfectionist tendencies put me on many sidequests to build the
perfect automated development environment - but again, if I can't order a new
Macbook, create a user account, and run a single command to setup *everything*,
I'm out. No matter how many [`.macos` scripts][macos-script] I tweak, once the
environment is tarnished (curse you `~/Library` folder), all of my motivations
fade away. I guess I'll just have to wait for Apple to allow me to boot from a
Docker Image at login. Also - even though I pride myself at being competent at
this step, *the tools I work with being far from perfect* can introduce some
early friction, and if it gets bad enough, the escape hatch might being here in
step #2.

3. I've made it past the development setup, meaning I've also made it to the
last step in my process. This step always ends with me giving up, deleting the
local repo, deleting the GitHub repo (I've gotten really good at typing full
repository names), and feeling a mix of annoyance and sheepishness. Something
along the line somewhere didn't go right when "I thought technology `X` coupled
with technology `Y` stored in `Z`DB was going to alleviate all my problems."

Well, it didn't, and it never will. So here's what I've decided to do.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/z8scuoippdbrtri9vg0s.jpg)

I scribbled out 6 rough project "stacks" on my whiteboard, generated in my head
from some of the technologies I am familiar with, as well as some that have
fallen at the hands of my 3-step program above. I then added a list of 6 project
ideas that will map to those stacks, and some other basic notes about how to run
my social media and this blog.

That's it. It may seem odd to take this stack-first, problem-second development
approach, but the fact is I do want to *build* things and I do want to try out
new technologies I'm interested in. And I figure my best chance at success
given my described weaknesses is to give myself constraints:

> One part of my brain says I’m tired of trying to come up with things in this box, but I force myself to do it, because I know something good can come out of it, if I really work inside it….  Telling yourself you have all the time in the world, all the money in the world, all the colors in the palette, anything you want — that just kills creativity.  --[Jack White][jack-white]

At work (since I've never [greenfielded][greenfield] a project), I have plenty
of constraints in place, and while I find that working within those constraints
can be as difficult as a setting up a new technology stack, I do have less
open-ended questions to traverse on the way to my solution, which is a great
simplifier, and what I feel I'm generally lacking in my personal projects. Also,
any job you take as a developer (outside of an early stage startup, maybe) is
going to have some constraints already set for you anyway, meaning this approach
is also at least...realistic?

So here's my outline: 6 months, 6 projects. [Google][google] said that gives me
a hard deadline of **April 19, 2021**. I'll also be posting two full blog posts
here a week, as well as shorter musings and tips I pick up along the way
(they'll be categorized under `snippets`).

I think that's enough for now. I hope to learn a ton, shirk off my analysis
paralyis, and hopefully get a nice online portfolio by the end of it all.

Here's to hoping 🤞.

[End of Tweet][james-caan].

[blog]: https://luskjh.github.io/
[saas]: https://en.wikipedia.org/wiki/Software_as_a_service
[macos-script]: https://github.com/mathiasbynens/dotfiles/blob/main/.macos
[jack-white]: https://austinkleon.com/2019/12/18/the-best-song-about-success/
[greenfield]: https://en.wikipedia.org/wiki/Greenfield_project
[google]: https://www.google.com/search?q=6%20months%20from%20today
[james-caan]: https://twitter.com/James_Caan