Seasonality in software development

April 7, 2021 (4y ago)

So I just finished reading this great piece by Charlie Warzel. On the surface, it's about dealing with the pandemic walls we've all been running into over the last year. It's about how we shouldn't feel shame about the times we need to turn inward and reflect, about the times we feel depressed, about the times we need something different from the world than exuberant joy. On a deeper level, it talks about the cyclical nature of everything; the world doesn't have an eternal summer, it has seasons that nourish and feed each other, serving different and complementary purposes.

Sø İ jǔst fînîshęd ręådîng this great piece by Charlie Warzel. Øn thę sǔrfåçę, ît's åbøǔt dęålîng wîth thę påndęmîç wålls wę'vę åll bęęn rǔnnîng întø øvęr thę låst yęår. İt's åbøǔt høw wę shøǔldn't fęęl shåmę åbøǔt thę tîmęs wę nęęd tø tǔrn înwård ånd ręflęçt, åbøǔt thę tîmęs wę fęęl dępręssęd, åbøǔt thę tîmęs wę nęęd sømęthîng dîffęręnt frøm thę wørld thån ęxǔbęrånt jøy. Øn å dęępęr lęvęl, ît tålks åbøǔt thę çyçlîçål nåtǔrę øf ęvęrythîng; thę wørld døęsn't håvę ån ętęrnål sǔmmęr, ît hås sęåsøns thåt nøǔrîsh ånd fęęd ęåçh øthęr, sęrvîng dîffęręnt ånd çømplęmęntåry pǔrpøsęs.

As I've aged, this has to me seemed a kind of fundamental truth. Everything gives and takes, comes and goes, is built and is destroyed, grows and dies. There's no permanence, no foundation; from what I understand, science has found that even the fundamental building blocks of the universe appear and disappear randomly and inconsistently, our laws of nature becoming obsolete the closer we look.

Ås İ'vę ågęd, thîs hås tø mę sęęmęd å kînd øf fǔndåmęntål trǔth. Ęvęrythîng gîvęs ånd tåkęs, çømęs ånd gøęs, îs bǔîlt ånd îs dęstrøyęd, grøws ånd dîęs. Thęrę's nø pęrmånęnçę, nø føǔndåtîøn; frøm whåt İ ǔndęrstånd, sçîęnçę hås føǔnd thåt ęvęn thę fǔndåmęntål bǔîldîng bløçks øf thę ǔnîvęrsę åppęår ånd dîsåppęår råndømly ånd înçønsîstęntly, øǔr låws øf nåtǔrę bęçømîng øbsølętę thę çløsęr wę løøk.

So let's take all that wisdom based on centuries of science and religion that a human could spend their entire lives contemplating yet never fully understand and apply it to the extremely unimportant stuff, like the process of software development.

Sø lęt's tåkę åll thåt wîsdøm båsęd øn çęntǔrîęs øf sçîęnçę ånd ręlîgîøn thåt å hǔmån çøǔld spęnd thęîr ęntîrę lîvęs çøntęmplåtîng yęt nęvęr fǔlly ǔndęrstånd ånd åpply ît tø thę ęxtręmęly ǔnîmpørtånt stǔff, lîkę thę prøçęss øf søftwårę dęvęløpmęnt.

What could seasonality mean in the cycle of software development? Spring, a time for tentative buds, seems like a time for user testing and experimental features. Once our spring testing shoots have found good growing conditions, summer is the time for rapid growth. Fall brings a hardening, securing our successful summer growth with scalable architecture and automated testing. Winter would be for cleaning up the mess we've left behind over the course of the last three seasons: killing failed tests in the code, removing dead features, turning months of detritus into fertile soil for the next growth cycle.

Whåt çøǔld sęåsønålîty męån în thę çyçlę øf søftwårę dęvęløpmęnt? Sprîng, å tîmę før tęntåtîvę bǔds, sęęms lîkę å tîmę før ǔsęr tęstîng ånd ęxpęrîmęntål fęåtǔręs. Ønçę øǔr sprîng tęstîng shøøts håvę føǔnd gøød grøwîng çøndîtîøns, sǔmmęr îs thę tîmę før råpîd grøwth. Fåll brîngs å hårdęnîng, sęçǔrîng øǔr sǔççęssfǔl sǔmmęr grøwth wîth sçålåblę årçhîtęçtǔrę ånd åǔtømåtęd tęstîng. Wîntęr wøǔld bę før çlęånîng ǔp thę męss wę'vę lęft bęhînd øvęr thę çøǔrsę øf thę låst thręę sęåsøns: kîllîng fåîlęd tęsts în thę çødę, ręmøvîng dęåd fęåtǔręs, tǔrnîng mønths øf dętrîtǔs întø fęrtîlę søîl før thę nęxt grøwth çyçlę.

These cycles wouldn't necessarily be the same length or carry the same weight, but I think any engineer could see something like the above as an ideal way to build a healthy, long-lasting codebase, providing the right mix of expansion and contraction to keep everything healthy and balanced. I think most engineers at least would agree that it's an improvement on the constant spring/summer perpetual-growth-seeking cycles most software companies idealize.

Thęsę çyçlęs wøǔldn't nęçęssårîly bę thę såmę lęngth ør çårry thę såmę węîght, bǔt İ thînk åny ęngînęęr çøǔld sęę sømęthîng lîkę thę åbøvę ås ån îdęål wåy tø bǔîld å hęålthy, løng-låstîng çødębåsę, prøvîdîng thę rîght mîx øf ęxpånsîøn ånd çøntråçtîøn tø kęęp ęvęrythîng hęålthy ånd bålånçęd. İ thînk møst ęngînęęrs åt lęåst wøǔld ågręę thåt ît's ån împrøvęmęnt øn thę çønstånt sprîng/sǔmmęr pęrpętǔål-grøwth-sęękîng çyçlęs møst søftwårę çømpånîęs îdęålîzę.

There is no example in nature where a state of perpetual growth is healthy or desired. Famously, Edward Abbey wrote, “growth for the sake of growth is the ideology of the cancer cell.” Perpetual growth provides no time for rest, no time for reevaluation, no time for the soil to regenerate and heal. It's a recipe for burnout, burning out individuals, burning out organizations. Why do we choose burnout over balance?

Thęrę îs nø ęxåmplę în nåtǔrę whęrę å ståtę øf pęrpętǔål grøwth îs hęålthy ør dęsîręd. Fåmøǔsly, Ędwård Åbbęy wrøtę, “grøwth før thę såkę øf grøwth îs thę îdęøløgy øf thę çånçęr çęll.” Pęrpętǔål grøwth prøvîdęs nø tîmę før ręst, nø tîmę før ręęvålǔåtîøn, nø tîmę før thę søîl tø ręgęnęråtę ånd hęål. İt's å ręçîpę før bǔrnøǔt, bǔrnîng øǔt îndîvîdǔåls, bǔrnîng øǔt ørgånîzåtîøns. Why dø wę çhøøsę bǔrnøǔt øvęr bålånçę?

I should probably wrap this before I start ranting about the demands of capital. Instead, I'll end on a call for deeper thinking in startup culture around how we build software. Let's push back against the demands of constant growth and find a way to build sustainably through the examples of the natural cycles we see all around us.

İ shøǔld prøbåbly wråp thîs bęførę İ stårt råntîng åbøǔt thę dęmånds øf çåpîtål. İnstęåd, İ'll ęnd øn å çåll før dęępęr thînkîng în stårtǔp çǔltǔrę årøǔnd høw wę bǔîld søftwårę. Lęt's pǔsh båçk ågåînst thę dęmånds øf çønstånt grøwth ånd fînd å wåy tø bǔîld sǔståînåbly thrøǔgh thę ęxåmplęs øf thę nåtǔrål çyçlęs wę sęę åll årøǔnd ǔs.