I recommend trying out real gardening, akin to what the author's girlfriend was doing. (Also, she sounds like a cool person! As does the author.) The parallels between virtual gardening and physical gardening became a lot more viscerally true for me once I experienced physical gardening.
Here's my mini-story. SF has a bunch of community gardens but the waitlist for getting your own plot is comically long. 2-3 years. However, the community garden near me has a bunch of apple trees that are volunteer-maintained. I figured that would be a good way to scratch my gardening itch in the meantime. It's been great! The project leader has taught me a lot about maintaining trees. And I've really learned that weeding is a lifelong commitment. They will always come back, and it's a lot easier if you go out there regularly and pull up the small roots. Obvious, and I'm sure you've heard this idea before, but going through this personally with physical gardening really drives home the wisdom of this trite idea. I got lazy this winter due to all the storms and didn't go out there for a couple of months. There are FEET of weeds now. I've taken out 3 wheelbarrows of weeds and am still not done. Ironically I am not that great at keeping on virtual weeding either (fixing bugs regularly). But when I am out there weeding I have literally thought to myself a few times: "I really need to stay on top of my issues..." Also, there is a very interesting lesson to ponder through physical weeding: you do it because those weeds will compete with your tree for resources. Your tree grows less when there's weeds around it. Literal bugs will thrive in the weeds and eventually make their way up to your tree and damage your tree. I know that the makings are there for another visceral lesson but I don't quite feel that one deep in my bones yet... I guess I've been lucky to not have to work on projects with suffocating tech debt...
My foray into gardening turned into an engineering project.
Figuring out the amount of sunlight an area gets, being able to mointor ph/moisture, drip irrigation, foldable greenhouse covers, proper tools to make tilling the soil and laying down a solid weed barrier, etc.
It got to be too time consuming, expensive and doing it any other way seemed demoralizing. During that time, a lot of gadgets have come out that make those things easier. I am pretty happy that I spent my time enjoying other things and can come back to it now if I wanted to with the efficiency I wanted before.
I learned gardening from my dad and he'se the pure opposite of an engineer.
What he does, he goes through the garden, does a bit here and a bit there. If he sees a plant he likes, he makes space for it, if he doesn't like something, he cut's it down. Occasionally he brings new plants (some from other peoples trash).. or tries new things. If it works, he does more of it, if it doesn't work, it's usually just in a small patch. He doesn't really do any planning.
This way.. over the years, he has a massive and healthy garden. Very diverse, lot's of insects, flowers, fruits, berries... He never uses pest control either.
After a few years trying to maintain a 80's like lawn without pest and weed control (2nd hand home, previous owner), I learned the way of your dad : I just remove things I don't like, favor what I like.
My garden is not the 80's picture perfect lawn anymore. It looks like a pretty prairie now, with poppies and all sort of other local wild flowers. It burns in August, it is self regenerated by October. No need for watering. Bees are coming, my kids discover all sort of insects we didn't see when we moved in.
That's a brilliant perspective - I love it!
I hadn't thought of it in quite those terms, but I have one project where I'm constantly trying to keep the code footprint round about the 12k mark, and I've come of think of that as "bonsai programming" - patiently and meticulously trimming and shaping to avoid sprawl and bloat!
Thanks for the phrase "Bonsai Programming". It explains perfectly why after many decades of dev work I still spend time on one particular codebase I started working on in 2005 purely for my own use.
I've done iterations/rewrites of it, in order, with C#, Ruby, Python, Go, Free Pascal, and have been back with C# for the last few variants. Each time the code gets smaller, faster, neater, clearer, more powerful, and better documented.
It will probably never be seen by anyone else (I use it for my own stuff), but I get the same satisfaction after almost two decades of working on it that a gardener might get when pruning and tidying a long-lived and long-loved bush or tree.
I'm 7 years into my own bonsai software project. As I learn more about CS and SWE I get to slowly introduce new concepts into the code to improve it. "Each time the code gets smaller, faster, neater, clearer, more powerful, and better documented" is such a wonderful feeling.
I really like the idea of bonsai languages, too. Rather than growing across various dimensions as new features are demanded, they stay small, concise, and focused just getting tighter, neater, and more performant. Of course, this isn't always practical nor desirable. I'm not sure if there are many bonsai languages, though. Perhaps something like awk?
I run FPGAjobs.com as a fun side project, and this describes my relationship with my product to a T.
I love the "Fuck around and find out" aspect of it. I can goof off and do fun things that occasionally add value to the business. Case and point: my all time most viewed page is a page that shows you a random FPGA meme. I threw it together with a bunch of FPGA memes that had made me laugh that I saved locally in a folder on my desktop. Net result: tons of backlinks, high engagement, and regular conversions of email list sign-ups. (https://www.fpgajobs.com/dank)
Funnily enough, ChatGPT has helped immensely with my ability to both putter about. ChatGPT can bang out Django features that'd take me a week in 10 mins. Most of that time is me copy/pasting and fixing the odd variable name that didn't translate. It's all the fun of creating with none of the docs spelunking or fundamental mistakes I make in Python or HTML.
I usually get them just far enough to work well, but the time commitment ends up becoming a grind for the more advanced features that are just out of my memory wheelhouse.
I recently figured I was stuck with an Elasticsearch feature since I didn’t know what to google. ChatGPT got it working in 3-4 prompts with me feeding error messages to it.
So I’m finding that I’m not only faster, but have new skills and can make features that were impossible before due to time commitment/ grind limitations.
I enjoyed the hunt and peck of figuring out features one step at a time when I started, but my wife and I had a baby in Jan, so my long stretches of dev and debug time have gotten muuuuuch shorter.
It kind of feels like when I first started goofing around editing html or css colors and how much fun that was and how much power that felt like it gave.
Are there any resources you'd recommend for learning how to build Django features with ChatGPT? Reading your message and some of the replies is the first time I've felt interested in using ChatGPT.
Nope! Just trial and error. Django is widespread enough and ChatGPT is good enough that it's very good at inferring what you need.
Try something like "Write a Django management command that does X with a model named Product" or "Write a Django view that shows all models named Card." It's generally smart enough to infer some of your model class names.
This is exactly how I feel about my side projects. Sometimes our day jobs are not exactly what we’d like to be working on so it’s nice to “putter” on a side project to scratch that itch. If someone else finds it useful one day that is a nice bonus but is ultimately not what drives me to work on it.
On a recent thread about a shortage of electricians, several commenters talked about taking on electrical work themselves, in a way that passed every inspection, by working on the scale of months instead of, as the pros do, days. This tracks exactly the distinction between my garden vs. the garden, and the analogy is great for software.
I'm currently working on something, "using AI" (read: the ChatGPT API), and it's coming out perfect in a way I couldn't have done without this API, but I also couldn't have done at work; there are too many efficiencies involved when you're making software for yourself.
For one thing, the feedback loop between implementation, UI and UX is a dot instead of a loop. For another, I'm infinitely willing to sympathize with my user, and will take all of their suggestions as if they were gospel. And my budget, while not infinite or even large, is extremely generous.
I guess it's also worth mentioning people whose recent pet projects became their main project, the most salient of whom, for me, is AngeTheGreat on YouTube (https://m.youtube.com/@angethegreat).
There's something to be said for dogfooding first, then releasing something.
I love this perspective. And I love these moments when I demo my project (people can request a demo on the home page) and people realize that it actually solves the problem they are struggling with for a long time.
I also deliberately choose not to do things that I don't like (like content marketing) even though they'd for sure bring me more revenue. It has to be enjoyable because otherwise it'd be just another job.
That’s what kept me going for years in my own. Now that I finally quit my tech career to focus on my own apps, I wish I had been more ambitious earlier on. I learned a lot in industry but controlling my own time and reaping the full reward of my own labor is glorious. Not to mention the ability to seek "promotion" is far more understandably under my control and ability to achieve.
My garden is my garden, specifically because if I had to "own" a product that other people worked on, I think I'd go insane. It's impossible to find people who think like me and would do things in a way that wouldn't bug me. With a product that real customers will use, I either care too much, or I have to stop caring at all. So my garden is my little universe where whatever happens (good or bad) is on me. The stakes aren't high. It's just for fun. And it's mostly manageable by myself. Oops, the squash got destroyed by squash bugs. Forgot to water the basil, it died. The slugs took out more tomatoes. Oh well! I can just go to the store, nobody's getting screwed except myself.
In my experience, software built around this mindset is oftentimes better than software built by large corporations anyway. Software usually just gets worse with size.
The platonic ideal is a piece of open-source software that a user-developer can understand completely in an afternoon or less.
I recently built an iOS app that is fully stand-alone. No internet connection needed. It helps you build choose your own adventure books, and when you're done it exports a text file with your book formatted as JSON, so others can import it into the app to play it. This app is infinitely scalable, literally every person on earth could be using it at the same time with no infrastructure problems.
So, I just find this sort of statement confusing ("I want to make things that don't scale."). Maybe I am defining "scale" wrong, my interpretation is that a product that can scale can be used concurrently by many users without structurally collapsing in some way. In that way, for much of software history, "scale" has not been a concern. Also, in this context, "I want to make things that don't scale"... doesn't that just mean "I want to make internet services that break if they get too many users?"
This tracks. As a gardener, you also have to be comfortable with things dying and general risks caused by events that are beyond your control. The weather, municipalities trying to kill mosquitoes and inadvertently killing pollinators, fauna that are hungrier than you are... the list is pretty long. It feels roughly the same to write 10K lines of code and then walk away from it when things don't work out.
Thanks for saying this. I'm trying cold frame gardening for the first time this year. My plants were doing really well, but this week I didn't keep as close a watch on it. My spinach and lettuce completely dried up. The peas and radishes are still really happy, so at least it's not a total loss.
Losing plants is still a bummer. I think I average over my lifetime ~60/40 for survive/die over here. The soil here is hard clay, which is not helped by decades of previous owners mowing the grass and setting the clippings out for collection. I've seen plants slowly push up and die because the roots couldn't work into the soil. Even with nearly 2 decades of amendment, it's nowhere near ideal. Weeds don't seem to mind, though. Funny how that works.
If you enjoyed reading this, I recommend checking out The Creative Act by Rick Rubin. Reading that book has changed my approach towards work and it has become more relaxed and I have learned to tap deeper into my intuition when engineering.
I agree with the ethos of the article entirely, I think. I personally love taking an organic and experimental and highly incremental approach to pretty much everything.
I feel like the word “putter” has some connotations associated with it that make it misplaced in the article, though. I looked it up in the M-W dictionary and I think that the appropriate definition was the verb:
1: to move or act aimlessly or idly
2: to work at random: tinker
And the “especially” part of the definition of tinker has “unskilled or experimental manner” in it.
Experimental I can get behind. Organic, not necessarily pre-meditated, even. But unskilled? I think that is not what is being aimed at here. This is careful, painstaking work, with attention to details.
A minor quibble to be sure. I still don’t actually know what bearblog.dev is but it must be some kind of place for devs at small software shops to write about their work is my guess, based on the two or three posts I’ve read on the ___domain name. I’ve enjoyed them all so far.
Re: putter. I don't know where the Bear Blog dev hails from but it's a word used a lot here in the UK.
We putter around. Sometimes (more commonly) we also potter around.
Commonly used to explain how we somehow combine aimlessness and mindfulness in one action to casually, and almost as an accidental by-product, spend time achieving some wistful off-hand goal to varying degrees of satisfaction.
This is an interesting read. It seems to be relatively old but still relevant. Because it's old I did a search here first. It has been posted here before but it's been a couple years and I thought it was worth surfacing again.
I really like this analogy because I too would like to one day have a nice small garden of small products. I see this pursuit more as a fun hobby than a career path.
Here's my mini-story. SF has a bunch of community gardens but the waitlist for getting your own plot is comically long. 2-3 years. However, the community garden near me has a bunch of apple trees that are volunteer-maintained. I figured that would be a good way to scratch my gardening itch in the meantime. It's been great! The project leader has taught me a lot about maintaining trees. And I've really learned that weeding is a lifelong commitment. They will always come back, and it's a lot easier if you go out there regularly and pull up the small roots. Obvious, and I'm sure you've heard this idea before, but going through this personally with physical gardening really drives home the wisdom of this trite idea. I got lazy this winter due to all the storms and didn't go out there for a couple of months. There are FEET of weeds now. I've taken out 3 wheelbarrows of weeds and am still not done. Ironically I am not that great at keeping on virtual weeding either (fixing bugs regularly). But when I am out there weeding I have literally thought to myself a few times: "I really need to stay on top of my issues..." Also, there is a very interesting lesson to ponder through physical weeding: you do it because those weeds will compete with your tree for resources. Your tree grows less when there's weeds around it. Literal bugs will thrive in the weeds and eventually make their way up to your tree and damage your tree. I know that the makings are there for another visceral lesson but I don't quite feel that one deep in my bones yet... I guess I've been lucky to not have to work on projects with suffocating tech debt...