Iceberg of success

Recently, I set up build pipeline for a desktop application. Since I work on a Mac, Mac (and to some degree, Linux) builds are sort of “a given” and Windows builds are harder to come by naturally. Therefore, my 1st focus was to secure a CI/CD flow for Windows builds.

I’ve used GitHub Actions, GitLab Pipelines, TravisCI jobs, and CircleCI workflows before to build & deploy web apps & libraries, but I’d never done it for a desktop app, let alone a Windows one, so this time was several of my firsts. Exciting 😅.

The process took place over a course of 3 days, out of which I pulled 2 almost all-nighters (quite happy I’ve still got it in me, btw). In retrospect, I noticed a similar pattern to most times I did something for the 1st time: the “Iceberg effect” which I anecdotally coin as the “Iceberg of success” without even googling or chat-gee-pee-teeing whether it’s a thing.

Calling it a pattern, I deliberately referred to the last time I set up publishing pipeline for an npm module I maintain. It went like this:

(events are in reversed chronological order)1

The prideful work was only the tip of the iceberg while the painful failures were all submerged.

And guess what, this time things aren’t that much different. Below is the literal notes I took as I worked my way through project completion:

screenshot of my notes during my work progress
my unpolished draft notes; not even guaranteed to be grammatically correct

Without going into every boring technical detail, let’s just say each line of the note is something I learned the hard way. Each learning process typically went like so:

  1. read the most relevant part in the whole documentation pool
  2. write the code as per what was understood from the documentation
  3. push the commit & wait for builds (sometimes I have to configure separate debugging builds just to field-test something)
  4. verify if the behavior is as desired (as what the doc says)
  5. for every detail where the job fails or generally the behavior differs from the doc, I try again from step 1)

And lo and behold, this was the literal iceberg that happened to me this time:

(events are in reversed chronological order)

Allow me to read the “chart” above for you: we see a lot more red than green on the “iceberg” 😉. Where there’s no color but rather a warning icon ⚠️, it means the config is wrong so nothing even runs. And then where it shows green, it doesn’t always mean every little detail is desirable. In fact, only the last green (the row at the top of the screenshot – the workflow that took “8m 21s“) was a true green where I understood & was pleased with everything that happened (without false positives nor false negatives).

Zooming out, I’d say this is life itself. For everyone who lives, they are living their whole life for the 1st time. As we climb the “iceberg of life” from the deepest point underwater, expect things to go wrong more often than they go right. When we get to the “water level”, it’s the 1st sight of success, then where we go (or not) after that point depends on how comfortable we are at that stage.

As with most things, exceptions apply. For example, here I could have used a different software stack (something other than CircleCI), or a different library (a different CircleCI Orb than circleci/github-cli), then my mileage could have been “greener”. As in life: different people are born at different points along their “iceberg”, so some have to climb a lot, some less, while the most fortunate are born at the summit (the point where I assume the “next” challenge is to not get bored 😉).

There, I managed to start a (another?) blog post with a strong technical tone just to end it like a pseudo-philosopher. But I hope different readers get different things out of this post. For those who didn’t get anything, my apologies for wasting ~10 minutes of your life but nevertheless I wish you all a pleasant time wherever you’re on your way along your own iceberg of success.

  1. Iceberg image courtesy of Simon Lee on Unsplash ↩︎

Leave a comment