This one time I had a very high-profile deployment.

On our side: a bunch of developers in jeans and t-shirts.
On their side: suits. Lots of suits. Some even dialed in over video, back when that was still novel.

I was the team lead on the development side. The devops team had run through all the usual pre-deployment. Then it was time to press the big Deploy button.

Nothing happened.

They ran the deploy command and all they got back was a blinking cursor on the next line. In testing, there was never a pause at this step. You’d get a ton of output immediately, reassuring you that things were happening.

“How long will this take?” someone asked.

As seems to happen too often, I immediately knew the problem. And like most problems, it was obvious in retrospect. Our local network is fast. This was not our local network. This was a slow WAN link.

I asked how fast the link was, did a little math, and said: “Fifteen minutes.”

The engineering staff was getting antsy. The suits were getting really antsy. And I had nothing to add. I was as confident as you can be with all eyes on you. This wasn’t a tricky algorithm. It was just file transfer. If anything should work, this should -- as long as nothing timed out.

So we waited.

A few times someone asked whether we should kill it and try again. That path was tested even less. The calculator said fifteen minutes, so I was going to wait fifteen minutes.

Eventually the first line of output appeared. Everything was fine.

But that blank time was traumatic. Anything would have made it better: a dot every ten seconds, a spinner, just the word "processing...".

Retrospect is easy. Any of us could have flagged it: the WAN link isn’t Ethernet, this might take a while.

Since then, the first and last line of any program I write is a print statement.

Tell the world you’ve started. Tell the world you’re going away.

Fin.