Learn Creative Coding (#167) - Sustainable Creative Practice

in StemSocial6 hours ago

Learn Creative Coding (#167) - Sustainable Creative Practice

cc-banner

Last time we spent a whole episode on voice -- the fingerprint that runs through everything you make, the thing that's recognisably yours once you make a pile of work and turn around to read it. And right at the end I dropped the worry that quietly ends more creative-coding journeys than any technical wall ever does: how do you keep doing this for years without burning out, drying up, or coming to resent the thing you loved? That's today. This is the last episode of the series, and I couldn't think of a better note to finish on, because everything we've built together across 166 episodes is worth exactly nothing if you quit in eighteen months. So let's talk about the long game.

I want to be honest with you up front: I've hit the wall. More than once. There were stretches where I opened my editor, stared at a blank sketch, felt absolutely nothing, and closed the laptop with a knot in my stomach. The thing I loved had turned into a chore, and I couldn't figure out why. It took me years to understand that staying creative for the long haul isn't about discipline or talent or grinding harder. It's about building a practice that doesn't eat itself. So this isn't a victory-lap episode. It's the most practical one I know how to write, because it's the difference between you still making things in ten years and you being another person who "used to do generative art". Allez, let me show you what I've figured out about keeping the fire lit.

Burnout is a systems problem, not a willpower problem

Here's the first thing nobody told me, and it would have saved me a lot of guilt: burnout is not a character flaw. It's not you being lazy or weak. It's what happens when output outruns input for too long -- when you keep spending creative energy without ever refilling the tank. Treating it as a willpower problem ("just push through") is exactly how you make it worse. Look at it as a system with a balance, not a moral test:

// burnout isn't weakness -- it's a balance problem. output outran input for too long.
function burnoutRisk(week) {
  const spent = week.hoursCreating + week.hoursStressing;
  const refilled = week.hoursResting + week.hoursPlaying + week.hoursLearning;
  const balance = refilled - spent;

  if (balance < -20) return "danger -- you're running on fumes, stop and refill";
  if (balance < 0) return "warning -- spending more than you're putting back";
  return "sustainable -- this pace can run for years";
}

console.log(burnoutRisk({ hoursCreating: 30, hoursStressing: 15, hoursResting: 5, hoursPlaying: 2, hoursLearning: 3 }));
// -> "danger -- you're running on fumes, stop and refill"

See that the fix in the danger case is stop and refill, not try harder? That's the whole reframe. When I was burning out I kept adding hours, which is like bailing water into a sinking boat. The number that matters isn't how much you produce, it's the balance between what you spend and what you put back. Get that balance wrong for a month and you're tired. Get it wrong for a year and you quit. The good news is that a system problem has a system fix, and you have way more control over it than a "willpower" story ever admits.

Energy is the real budget, not time

Everyone tells you to manage your time. Almost nobody tells you to manage your energy, and energy is the thing that actually runs out. An hour when you're fresh and curious is worth five hours when you're fried and forcing it. I learned to stop asking "do I have time for this?" and start asking "do I have the energy this needs?" -- because they are completely different questions:

// time is not the scarce resource. ENERGY is. an hour fresh beats five hours fried.
function whatCanIDoRightNow(energy) {
  if (energy > 80) return "hard creative work -- the new thing, the scary sketch";
  if (energy > 50) return "medium work -- refining, tuning, finishing (ep163)";
  if (energy > 20) return "light work -- tidying code, reading, collecting references";
  return "rest -- and NO guilt about it. resting is refilling.";
}

console.log(whatCanIDoRightNow(35));   // -> "light work -- tidying code, reading, collecting references"

Matching the task to your energy is one of the most freeing habits I ever built. On a low-energy evening I don't force the big ambitious piece and then feel like a failure when it comes out flat. I do the light stuff -- organise my palette collection, read someone's shader breakdown, sketch three throwaway ideas -- and the work still moves forward. There's always a task that fits the energy you actually have. The trick is to stop measuring yourself against your best day and start meeting yourself where you are.

Consistency beats intensity, every single time

You already know this one in your bones from episode 163, but it's worth saying loud because it's the load-bearing wall of a long practice: small and steady crushes big and sporadic. The person who sketches for twenty minutes a day for a year will lap the person who does one heroic twelve-hour weekend and then vanishes for a month. Intensity feels productive and impressive. Consistency is what actually compounds:

// the tortoise wins. small-and-steady compounds; big-and-sporadic burns out and stops.
function oneYearOfWork(style) {
  if (style === "sprinter") {
    // huge bursts, then crashes and gaps
    return { sessions: 12, hoursEach: 10, gaps: "long, guilt-ridden", total: 120, stillGoing: false };
  }
  // 20 quiet minutes most days
  return { sessions: 300, hoursEach: 0.33, gaps: "tiny", total: 100, stillGoing: true };
}

const a = oneYearOfWork("sprinter");
const b = oneYearOfWork("steady");
console.log(a.total, b.total);           // -> 120 100  (sprinter did MORE hours...)
console.log(a.stillGoing, b.stillGoing); // -> false true  (...but quit. steady is still here.)

Look carefully at that last line, because it's the whole point. The sprinter technically logged more hours -- and still lost, because they're not here anymore. Total output over a lifetime isn't hours-per-session times sessions, it's hours-per-session times sessions times the years you keep showing up. Sustainability is a multiplier on everything else you know. A modest daily habit you can maintain for a decade beats a brilliant intense one that flames out by spring. Protect the habit before you protect the ambition.

Keep a sandbox that has no purpose at all

This one saved my relationship with the work more than anything else. You need a place to play where nothing is at stake -- no audience, no deadline, no "will this be good enough to post", no client, no votes, nothing. Just you and the canvas, messing about like it's episode 1 again. When everything you make has to justify itself, the joy quietly drains out. A purposeless sandbox is where it comes back:

// you need ONE place with zero stakes. no audience, no deadline, no "is this good enough".
function creativeSandbox() {
  return {
    audience: null,          // nobody's watching. that's the point.
    deadline: null,          // it's done when you're bored.
    mustBeGood: false,       // ugly is 100% allowed. encouraged, even.
    canShare: "only if YOU want to, never because you have to",
    rule: "follow the fun, delete nothing, judge nothing",
  };
}

const play = creativeSandbox();
console.log(play.mustBeGood);   // -> false  (this is where the joy lives)

Half of my favourite pieces were born in that no-stakes sandbox, precisely because I wasn't trying to make anything good. The pressure to perform is a creativity killer -- it makes you play it safe, reach for what you already know works, avoid the weird experiment that might fail. Kill the pressure in at least one corner of your practice and you give yourself permission to be bad, and being allowed to be bad is exactly where the surprising good stuff sneaks in. Everybody needs a room where the work doesn't have to earn its keep.

Balancing the work that pays and the work that feeds you

Here's a tension you'll hit the moment any of this starts earning -- commissions, client work, a collection that sells (the stuff from episode 159). Paid work is wonderful and it's also a trap, because it slowly bends your practice toward what other people want and away from what you want to explore. If you're not careful, you wake up one day having made nothing for yourself in a year. You have to protect the personal work on purpose:

// paid work pays. personal work is why you started. protect the second on purpose.
function healthyMix(month) {
  const commercial = month.clientHours;
  const personal = month.selfHours;
  const ratio = personal / (commercial + personal);

  if (ratio < 0.15) return "warning -- you've become a service. carve out personal time NOW";
  if (ratio > 0.7 && month.needsIncome) return "lovely, but keep an eye on the rent";
  return "balanced -- paying the bills AND still feeding your own curiosity";
}

console.log(healthyMix({ clientHours: 90, selfHours: 8, needsIncome: true }));
// -> "warning -- you've become a service. carve out personal time NOW"

I'm not anti-money, to be clear -- getting paid to do this is a genuine privilege and I want that for you. But the personal, pointless, purely-curious work isn't a luxury you do after the "real" work. It's the well that the paid work drinks from. The clients hired you because of the voice you built making stuff for yourself; let that dry up and eventually you have nothing distinctive left to sell. Ring-fence a slice of every month for work that answers to nobody. Treat it as non-negotiable, the same way you'd treat an invoice deadline.

Rest is part of the work, not a betrayal of it

Farmers leave fields fallow -- they let a field grow nothing for a season so it can grow well again next year. Creative practice runs on the exact same logic, and it took me an embarrassingly long time to believe it. Lying fallow isn't laziness. It's how the ground recovers. The trouble is that rest feels like falling behind, so we skip it, and then wonder why the well is dry:

// fields need fallow seasons to grow well again. so does your head. rest is not falling behind.
function fieldState(field) {
  if (field.seasonsWorked > 4 && field.seasonsRested === 0) {
    return "depleted -- nothing good will grow here until it rests";
  }
  if (field.seasonsRested > 0) {
    return "fertile -- rested ground grows the best crop";
  }
  return "fine for now, but schedule a fallow season before you need one";
}

console.log(fieldState({ seasonsWorked: 6, seasonsRested: 0 }));
// -> "depleted -- nothing good will grow here until it rests"

The insight I want you to take from this is the schedule a fallow season before you need one line. If you wait until you're completely fried to rest, the rest becomes recovery from damage instead of routine maintenance, and recovery takes far longer. Plan the gaps. Take the week off between big projects. Let a sketch idea sit for a month. Go do something that has nothing to do with code -- walk, cook, look at actual paintings in an actual room. The ideas don't stop forming while you rest; they form better, quietly, in the background, and they're waiting for you when you come back.

Stay a beginner on purpose

Do you know what the deadest feeling in a long practice is? Competence. The day everything gets easy is the day it starts getting boring, and boredom is burnout's quiet cousin. The antidote that's never failed me is to deliberately make myself a beginner again -- pick up something adjacent I'm genuinly bad at, and enjoy being clumsy. Discomfort is a feature, not a bug:

// competence is comfortable and quietly deadly. staying a beginner keeps the spark alive.
function stayCurious(you) {
  const comfortZone = you.thingsIveMastered;
  const growthEdge = you.thingsImBadAtButCuriousAbout;

  if (growthEdge.length === 0) {
    return "warning -- all comfort, no edge. pick something you'll be TERRIBLE at";
  }
  // learning an adjacent skill feeds the main one in ways you can't predict
  return `learning: ${growthEdge[0]} -- awkward, humbling, and exactly what you need`;
}

console.log(stayCurious({
  thingsIveMastered: ["p5.js", "shaders", "flow fields"],
  thingsImBadAtButCuriousAbout: ["sound design", "risograph printing", "Rust"],
}));
// -> "learning: sound design -- awkward, humbling, and exactly what you need"

Every single time I've felt stale, the cure was learning something I was hilariously bad at. Sound design bled back into how I think about rhythm in visuals. A printmaking class changed how I use colour. Being a beginner reconnects you to the feeling that got you into this in the first place -- that wide-eyed "wait, how does that work?" -- and it stops your main craft from calcifying into a set of tricks you repeat on autopilot. Stay curious on purpose. Go be bad at something adjacent. It'll feed the thing you're good at in ways you can't see coming.

Community is infrastructure, not a nicety

We did a whole episode on the creative coding community (162), and I want to bring it back here for a very specific reason: other people are not a luxury for the good times, they're load-bearing for the hard ones. The isolated artist grinding alone in a room is a romantic myth and a burnout factory. The people who last are almost always plugged into something bigger than themselves -- a Discord, a local meetup, a #genuary crowd, even just two friends who get it:

// lasting artists aren't lone geniuses -- they're plugged in. community carries you through flat spells.
function supportSystem(person) {
  const connections = person.peopleWhoGetIt;
  const isolated = connections.length === 0;

  if (isolated) {
    return "fragile -- one bad month alone can end this. find your people (ep162)";
  }
  // on the days YOUR well is dry, their energy carries you -- and vice versa
  return `resilient -- ${connections.length} people to lean on when it gets hard`;
}

console.log(supportSystem({ peopleWhoGetIt: ["genuary crew", "local meetup", "two coding friends"] }));
// -> "resilient -- 3 people to lean on when it gets hard"

The thing about a community is that everyone's well runs dry at different times. On the day you've got nothing, someone else is buzzing with a new idea and their energy pulls you along; a month later you return the favour. That rotation is what carries a practice through the flat spells that would sink you solo. Ask for help when you're stuck, celebrate other people's work loudly, show up even when you've got nothing to show. The connections you build in the good seasons are exactly what hold you up in the bad ones.

Measure the right thing (or don't measure at all)

Here's a quiet killer I want to warn you about, because it got me hard: measuring your practice by numbers you don't control. Likes, votes, follower counts, whether a post "did well". Chase those and you hand your motivation to an algorithm and a crowd, and both are fickle. A sustainable practice measures process, not applause -- the things you actually control:

// vanity metrics hand your motivation to strangers. measure what YOU control instead.
function whatToMeasure(metric) {
  const vanity = ["likes", "votes", "followers", "went viral"];      // outside your control
  const process = ["showed up", "finished it", "learned something", "had fun", "grew"]; // yours

  if (vanity.includes(metric)) return "careful -- this one's a trap. you don't control it";
  if (process.includes(metric)) return "good -- this is a real, sustainable signal";
  return "unknown metric -- ask: can I control it? if not, don't score yourself on it";
}

console.log(whatToMeasure("votes"));       // -> "careful -- this one's a trap. you don't control it"
console.log(whatToMeasure("showed up"));   // -> "good -- this is a real, sustainable signal"

I'm not saying an audience doesn't matter or that you should ignore the world -- of course it's nice when work lands. But if the scoreboard you check every morning is made of numbers other people control, your mood becomes a hostage. Some of the best work you'll ever make will be quietly ignored, and some throwaway thing will blow up for reasons you'll never understand. If you let those numbers define whether it was "worth it", you'll quit the first time the algorithm looks away. Score yourself on showing up, finishing, learning, and enjoying it. Those you own outright, and they never abandon you.

Keep the archive -- your future self will thank you

One last practical habit, and it ties all the way back to the version-control episode (136): keep everything. Every sketch, every failed experiment, every ugly draft, dated and saved. Not because it's all precious, but because your body of work is a resource you'll mine for decades -- for patterns (that's how you found your voice last episode), for old ideas that suddenly make sense, for proof on the dark days that you have actually done a lot:

// keep everything, dated. your archive is fuel: for voice, for old ideas, for hard days.
function archive(sketch) {
  return {
    saved: true,
    dated: sketch.date,          // future-you needs the timeline
    tagged: sketch.ideas,        // so you can find it again in 3 years
    // never delete "failures" -- half of them are just early. -- ep24 seeds, ep163 finishing
    keptEvenIfUgly: true,
  };
}

const kept = archive({ date: "2026-08-28", ideas: ["flow field", "warm palette", "slow motion"] });
console.log(kept.keptEvenIfUgly);   // -> true  (today's dead end is next year's starting point)

I go back through my old work constantly, and it's astonishing how often a sketch I abandoned as a failure turns out to have been just early -- the idea was fine, I didn't have the skill yet, and two years later I do. An archive is also the single best cure for the "I never get anything done" spiral: on a flat, worthless-feeling day, scroll back through three years of dated sketches and try to still believe you've done nothing. You can't. The archive doesn't lie. Keep it, tend it, and let it remind you who you are when you forget.

't Komt erop neer...

  • Burnout is a systems problem, not a willpower problem. It's what happens when output outruns input for too long. The fix in the danger zone is stop and refill, never try harder -- adding hours to a burnout is bailing water into a sinking boat
  • Energy is the real budget, not time. An hour fresh beats five hours fried. Match the task to the energy you actually have -- big scary work when you're at 80%, tidying and reading at 30%, guilt-free rest at the bottom. There's always a task that fits
  • Consistency beats intensity, every time. The steady twenty-minutes-a-day artist laps the heroic-weekend sprinter, because the sprinter quits. Sustainability is a multiplier on everything else you know -- protect the habit before the ambition
  • Keep a sandbox with zero stakes. No audience, no deadline, no "is this good enough". When every piece has to justify itself the joy drains out. Give yourself one room where you're allowed to be bad, and the surprising good stuff sneaks in there
  • Protect personal work from paid work on purpose. Commissions slowly bend you toward what others want. The pointless curious work is the well the paid work drinks from -- ring-fence a non-negotiable slice of every month for work that answers to nobody
  • Rest is part of the work. Fields need fallow seasons; so does your head. Schedule the gap before you need it, so rest is routine maintenance instead of damage recovery. Ideas form better in the background while you're away
  • Stay a beginner on purpose. Competence is comfortable and quietly deadly. Pick up something adjacent you're terrible at -- it humbles you, reconnects you to why you started, and feeds your main craft in ways you can't predict
  • Community is infrastructure, not a nicety. Everyone's well runs dry at different times; being plugged in means someone's energy carries you through your flat spell, and you carry them through theirs. The lone-genius grind is a burnout factory
  • Measure process, not applause. Likes and votes are outside your control -- score yourself on them and your mood becomes a hostage. Measure showing up, finishing, learning, and having fun. Those you own outright
  • Keep the archive. Every sketch dated and saved. Half your "failures" were just early. On the days you feel worthless, three years of dated work is the one thing that can't lie to you about what you've done

And that's the series. A hundred and sixty-seven episodes, from drawing a single circle on a canvas all the way to shaders, simulations, 3D worlds, machine learning, physical installations, and finally to the quiet stuff that actually keeps a creative life going. If there's one thing I hope stuck, it's this: the code was never really the point. The code is a paintbrush. What matters is that you keep picking it up -- next week, next year, when it's hard, when the well's dry, when nobody's watching -- and that you build a practice gentle enough to carry you that far. Take care of the person holding the brush, and the work takes care of itself.

I said at the top that this is the last episode, and it is, but I promised you it wouldn't be a conclusion -- it's a continuation. Because the series ends here and your practice doesn't. Everything we covered was just the on-ramp; the real work is the decades of quiet sketches you'll make long after you've forgotten which episode taught you flow fields. So go make something today. Something small, something ugly, something only you would make. And then do it again tomorrow. That's the whole thing. That's creative coding. Thank you -- genuinly, from the bottom of my heart -- for spending this journey with me. It's been the absolute plezantste thing I've done here. Now go and keep going :-).

Sallukes! Thanks for reading.

X

@femdev