Microtest Test-Driven Development is a strategy for *change*. To understand the case, we need to answer two questions: 1) Why have a strategy for change? 2) How does TDD provide one? Let's take up the first question today.

(Before we begin, I remind you of the relative unimportance of geekery to me just now. This is just respite.

Please work for change and support the others who are doing so.

Black lives matter.

Stay safe, stay strong, stay angry, stay kind.)
Why is having a change strategy so urgent?

The TL;DR is dead simple:

Because continuous ongoing change is at the base of all software development, both before and after our software is in the field.
When I read old-school software ideas, or for that matter what is being taught in our colleges for the most part today, I'm struck over and over again by the "timeless" aspect of the material. It is concerned almost entirely with the static and atemporal aspects of software.
In these approaches, applications spring Athena-like from the heads of our pantheon-worthy programmers. The designs emerge in an instant and once emerged they are final. The process looks like 1) Nothing. 2) Everything. 3) Move on.
I don't mean to say this has no value. On the contrary, it has produced a very great deal of both pure and applied science, and has certainly been a worthwhile endeavor. It's an impressive body of work, and I've had many years of delight from it.

But it's not enough.
Nothing, Everything, Move On, this frames software development as entirely centered around a finish-line. Implicitly (and sometimes explicitly) this diminishes the significance of everything that happens *before* the finish line, and everything that happens *after* it.
Let's talk about after first. In old-school theory, "after" means "Move On". We have finished our app, it is being used in the video rental store -- sorry, couldn't help myself, you had to live through the '90s -- and there is nothing more to say or do.
Does this resemble the life of a professional programmer? Well. I have certainly had that experience. In the stretch of my career from 1980 to 2000 it was pretty commonplace. But somewhere around there, it became far less common, and today it's quite unusual.
Finish-lines in software are much less common than they once were. This is because of the extraordinary market-expansion we've experienced over the last forty years.
In the early days, this expansion came from the staggering decrease in the cost of physical computing. This made it possible to put computers *everywhere*. In the last two decades, the expansion has came from the staggering decrease in the cost of distribution, i.e. the internet.
You could satisfy that video rental owner in a month, giving him everything he wants. With market expansion, though, we realize we could have one app that satisfies a *million* video rental owners. All we have to do to keep expanding our market is expand our features & variants.
So our software hits the field with one customer, then ten, then ten thousand, and so on. Continually expanding our reach means we have to *start* with a reach. We ship once. Then we ship for another tier of customers, and again, and again.
So, in fact, "after" almost never means "Move On" for a modern developer. It means "next closeable customer tranche", and that translates directly into changing what we have already shipped.
Let's do the before. In oldschool theory, we start with nothing and a specification, and our job is to implement that spec. A running version of that spec is the finish-line. We take a deep breath, ask questions about the spec, and then run run run. A month or two later, voila!
Again, does that resemble the life of a working programmer? And again, I've done that many times. But most of those times were back in the day, and nowadays it hardly ever works that way. Why not? Because today's specs are vastly more complicated to implement than those old ones.
Modern apps are huge, w/orders of magnitude more moving parts than anything before 2000, h/w & s/w. The *screen* that you're reading this on has more RAM than any computer any of these old-school theorists worked with. There are *thousands* of apps & libraries letting you do it.
And how does that size and complication impact us? It makes development -- even against baseline specs, what we call MVPs -- take more time. The idea that a month or two of development is commonplace goes right out the door.
That means that the space between Nothing and Everything is very much larger. The development is going to take a lot longer, and hence become far more significant than in the old-school approach.

And what, dear reader, is another word for development?

Oh yeah. "Change".
There are just two strategies for all that change: horizontal -- in which we divide our app into layers and implement each one to its finish-line extent -- and vertical -- in which we divide our app into features & variants and implement each one to its finish-line extent.
Horizontal doesn't work very well. The reason is that the size and complication of the spec makes it difficult or impossible to determine in advance exactly what each layer does. We wind up adding things we don't need and needing things we didn't add. I'll dismiss that option.
Vertical works better. But though horizontal development depends on the accuracy about finish-line requirements for layers, vertical development depends on our ability to rapidly and safely change the code that is implementing the current version of a feature.
So before is change, and after is change, and both imply the passing of time. And thta very passing of time *itself* means change. Why? Because finish-lines only stand still for a very short time, less time than it will take us to reach them.
Does this mean there are no finish lines?

No. It's more like, there are a host of finish lines, one after the other, stretching from the second day of the project to the day no one new wants our software anymore.

We don't call these finish-lines, usually. We call them steps.
In coming muses, I will argue that TDD is an excellent change strategy. And, with certainty, some folks will argue against that idea. That's fine.

But one argument I won't take seriously: that having a change strategy doesn't matter.
Software development is continuous ongoing change. If follows, as night follows day, that to do it effectively for money, our strategy must be centered around the fundamental act of changing code.
Thanks for reading. Do me two solids, if you liked it.

1) Subscribe. Free, spam-free, full-text or audio, and it helps me make more.

https://t.co/0iffwG5jrd

2) Keep working for and supporting change, inside the trade and out.

Black lives matter.

More from Tech

"I really want to break into Product Management"

make products.

"If only someone would tell me how I can get a startup to notice me."

Make Products.

"I guess it's impossible and I'll never break into the industry."

MAKE PRODUCTS.

Courtesy of @edbrisson's wonderful thread on breaking into comics –
https://t.co/TgNblNSCBj – here is why the same applies to Product Management, too.


There is no better way of learning the craft of product, or proving your potential to employers, than just doing it.

You do not need anybody's permission. We don't have diplomas, nor doctorates. We can barely agree on a single standard of what a Product Manager is supposed to do.

But – there is at least one blindingly obvious industry consensus – a Product Manager makes Products.

And they don't need to be kept at the exact right temperature, given endless resource, or carefully protected in order to do this.

They find their own way.
Ok, I’ve told this story a few times, but maybe never here. Here we go. 🧵👇


I was about 6. I was in the car with my mother. We were driving a few hours from home to go to Orlando. My parents were letting me audition for a tv show. It would end up being my first job. I was very excited. But, in the meantime we drove and listened to Rush’s show.

There was some sort of trivia question they posed to the audience. I don’t remember what the riddle was, but I remember I knew the answer right away. It was phrased in this way that was somehow just simpler to see from a kid’s perspective. The answer was CAROUSEL. I was elated.

My mother was THRILLED. She insisted that we call Into the show using her “for emergencies only” giant cell phone. It was this phone:


I called in. The phone rang for a while, but someone answered. It was an impatient-sounding dude. The screener. I said I had the trivia answer. He wasn’t charmed, I could hear him rolling his eyes. He asked me what it was. I told him. “Please hold.”

You May Also Like

**Thread on Bravery of Sikhs**
(I am forced to do this due to continuous hounding of Sikh Extremists since yesterday)

Rani Jindan Kaur, wife of Maharaja Ranjit Singh had illegitimate relations with Lal Singh (PM of Ranjit Singh). Along with Lal Singh, she attacked Jammu, burnt - https://t.co/EfjAq59AyI


Hindu villages of Jasrota, caused rebellion in Jammu, attacked Kishtwar.

Ancestors of Raja Ranjit Singh, The Sansi Tribe used to give daughters as concubines to Jahangir.


The Ludhiana Political Agency (Later NW Fronties Prov) was formed by less than 4000 British soldiers who advanced from Delhi and reached Ludhiana, receiving submissions of all sikh chiefs along the way. The submission of the troops of Raja of Lahore (Ranjit Singh) at Ambala.

Dabistan a contemporary book on Sikh History tells us that Guru Hargobind broke Naina devi Idol Same source describes Guru Hargobind serving a eunuch
YarKhan. (ref was proudly shared by a sikh on twitter)
Gobind Singh followed Bahadur Shah to Deccan to fight for him.


In Zafarnama, Guru Gobind Singh states that the reason he was in conflict with the Hill Rajas was that while they were worshiping idols, while he was an idol-breaker.

And idiot Hindus place him along Maharana, Prithviraj and Shivaji as saviours of Dharma.
Tip from the Monkey
Pangolins, September 2019 and PLA are the key to this mystery
Stay Tuned!


1. Yang


2. A jacobin capuchin dangling a flagellin pangolin on a javelin while playing a mandolin and strangling a mannequin on a paladin's palanquin, said Saladin
More to come tomorrow!


3. Yigang Tong
https://t.co/CYtqYorhzH
Archived: https://t.co/ncz5ruwE2W


4. YT Interview
Some bats & pangolins carry viruses related with SARS-CoV-2, found in SE Asia and in Yunnan, & the pangolins carrying SARS-CoV-2 related viruses were smuggled from SE Asia, so there is a possibility that SARS-CoV-2 were coming from
Rig Ved 1.36.7

To do a Namaskaar or bow before someone means that you are humble or without pride and ego. This means that we politely bow before you since you are better than me. Pranipaat(प्राणीपात) also means the same that we respect you without any vanity.

1/9


Surrendering False pride is Namaskaar. Even in devotion or bhakti we say the same thing. We want to convey to Ishwar that we have nothing to offer but we leave all our pride and offer you ourselves without any pride in our body. You destroy all our evil karma.

2/9

We bow before you so that you assimilate us and make us that capable. Destruction of our evils and surrender is Namaskaar. Therefore we pray same thing before and after any big rituals.

3/9

तं घे॑मि॒त्था न॑म॒स्विन॒ उप॑ स्व॒राज॑मासते ।
होत्रा॑भिर॒ग्निं मनु॑षः॒ समिं॑धते तिति॒र्वांसो॒ अति॒ स्रिधः॑॥

Translation :

नमस्विनः - To bow.

स्वराजम् - Self illuminating.

तम् - His.

घ ईम् - Yours.

इत्था - This way.

उप - Upaasana.

आसते - To do.

स्त्रिधः - For enemies.

4/9

अति तितिर्वांसः - To defeat fast.

मनुषः - Yajman.

होत्राभिः - In seven numbers.

अग्निम् - Agnidev.

समिन्धते - Illuminated on all sides.

Explanation : Yajmans bow(do Namaskaar) before self illuminating Agnidev by making the offerings of Havi.

5/9