This Week I Learned: bulk upload [2021]

Peter Brownlow
10 min readSep 27, 2021

As I’ve ported this from an internal blog there’s virtually no publicly visible content yet. To make it less bare, here’s a good chunk of 2020 before I started the public blog. I’ve removed the TWILs that are private to my company or just wouldn’t make sense in the outside world.

The most recent TWILs are at the top and they get older towards the bottom.

🦆 In Go, within a given compilation scope, for a given type, if there are functions with receivers of that type and they have signatures that match those of an interface then the type “is” that interface. The functions and interface may come from completely different libs and codebase(s), and the various authors may not have known about each other, but that doesn’t matter. If it looks like a duck, walks like a duck and quacks like a duck then it is a duck, even if you have never seen a duck and called it swan.

🤔 Sometimes it really helps to just have a name for something and to know that it’s a real thing. During the 18 months of the pandemic so far, many people have experienced “languishing”.

© I’m learning Go in Udemy and the language clearly appears to have been designed by old-school C programmers who encountered managed runtimes like Node, and package managers (also like Node), and decided to remake C “but this time, better!”. It’s hilarious and really takes me back to my Animal Logic days. So many of the concepts and syntax are familiar, like how a receiver declaration is an awkward kludge to give sort-of-OO syntax to a non-OO language, just as in C/C++. 🤦‍♂️🤣

🆚 In VS Code you can get the error message about a private package not being found because VS Code and some Go tools need to update. Save yourself the debugging time and just update before investigating too deeply!

🤝 The “trust equation” and a great tip for video calls — immediately hide your own image so that you’re not put off by it.

image credit: https://kunalbaidmehta.blogspot.com/2020/04/the-trust-equation.html

⏬👈 Perhaps this should have previously been obvious to me, but low-touch and no-touch engagement models for customer success & support in SaaS businesses work best (or perhaps only?) for products with both low to medium complexity and for the low to medium value customers.

⌨️ If a developer gets 20 minutes of solid head-down-typing time in a day then that may actually be pretty productive. The rest of the time goes into “foraging” for information, digesting it, and interruptions. Listen to the whole thing or jump to 12:32.

🧠 Our brains love patterns, and we can create or change them.

They talk about the importance of sleep and just simply taking a break for increasing our problem-solving ability.

An especially interesting thing I learned is about routines and why many periods of the pandemic have been so exhausting.

We work out what to do with the front parts of our brains, the stuff that evolved most recently, but after we do things a few times some optimised routines get cached in a different part of our brain, the more primitive “middle brain”. Drawing on them from there is far less resource-intensive — it literally uses less resources and kind of “just happens”. Commuting to work in exactly the same way each day is an example.

When everything gets shaken up and we need to keep consciously thinking about how to do things, relying less on these cached and optimised routines, we literally use more of our bodily resources and need a little rest. The human brain is about 2.5% of our bodily mass but uses about 25% of the digested resources we consume from putting things in our mouths, which is huge! Most of that goes to the fancy front part that consciously thinks.

So, a tip from this brain doctor: use routines for some more things and your brain will have more energy for fancy thinking.

🔌 To cause compatible clients to refresh cached content beyond the Cache-Control header's max-age value without blocking (which I think is vital for good performance) use it in combination with stale-while-revalidate . Compatible clients will attempt to asynchronously fetch a newer version, but will continue on working for the user without waiting, giving the illusion of zero loading times. I did a little test with my laptop away from WiFi and my toy web app kept working as though I was still within range. Great for being out on the go! It's backwards compatible, too - older clients that don't support stale-while-revalidate will simply ignore it and fall back to using max-age (meaning they will block until network connectivity returns, but not break). Nice!

␀ AWS Athena will just return zero rows from tables contructed by AWS Glue crawling CSV files in S3 if you put several files with different formats in the same directory. You know… like a normal human with several files for the same project. It strictly expects that every directory contains only files with the same schema. The help docs do say this but you have to hunt for this reason among several. I assume that other file formats are affected as well. There is no warning on import. That’s a fail-deadly UI, AWS!

🐢 AWS just gives you a persistent online shell that you can use as your dev env, with 1gb of storage per region. It comes with popular tools such as node & python pre-installed. Best of all, it’s totally free and just works in 1 click. 🤯

🗣 In any conversation between people on very different perceived status levels (e.g. boss-employee, parent-child and even hostage negotiator — hostage taker!) the “1 up” person with more status is most concerned with the content and the “1 down” person is more concerned with the relationship.

With modern JavaScript it’s super easy to smoothly scroll the viewer to a new location in your web page.

document.getElementById('some-id').scrollIntoView({behavior:'smooth'})

🤥 People who more often exxagerate or misleadingly gloss over inconvenient details in order to make themselves or their statements more impressive are also more likely to fall for that when others do it.
It seems that the people who do this more may have a reduced ability to differentiate superficial indicators of truth or produndity and actual reality.
Contrary to the common saying, you can “bullshit a bullshitter”.

🛒 “Customer intent” is a tool for product-led companies to think about what would work for product-led growth.
You can break it down into goals, urgency and knowledge levels.

🏡 Zoom grew to 400% in the first year of the pandemic and they expect to grow by 42% in the next year. They seem certain that the level of remote working is not going to snap back to lower pre-pandemic levels when we’re all vaccinated. Rather, they appear to believe that it will plateau at almost 1.5x what it is now (relative to the global population size). That doesn’t say anything about the mix of WFH and satelite offices / regional hubs.
It also seems like an inescapable conclusion that larger firms with cash to spare are going to use this to hoover up high-performing employees from all over the globe, now that physical proximity to a very restrictive set of offices in expensive locations is far less important as an employment requirement. We’re going to see a consolidation favouring high-earning encumbent firms as they attract talent from smaller firms in lower-cost locations.
OTOH any SMEs that can successfully target this increased level of remote work to accelerate their revenues may find their ability to hire and retain top talent increases faster than the brain drain to giants with deep pockets who now pay less for salaries and real estate. Hitting this mass-market zeitgeist for SMEs could be life-changing for these companies and the people in them. There’s a lot on the table to play for.
Workers on top salaries in the most expensive locations who lack the ability to move are going to find themselves sweating as their remuneration suffers from mean reversion but their living costs remain high.

⧉ I learned how to write CSS that is activated only for selected screen sizes:

@media only screen and (max-width: 1023px) {

/* insert CSS for small screens here */

}

🤯 User onboarding should really be defined as first experience until the key aha moments.
We (and probably most teams) currently define it in terms of time.

⏰ Github Actions can be scheduled with cron expressions, but cron isn’t designed for “every n weeks” so to do that you have to either move the scheduling of your program inside itself (an undesirable blurring of concerns) or do some gnarly date expression logic.

if [ $(expr $(expr $(expr $(date +%s) — $(date — date=”2021–01–28" +%s)) \/ $(expr 60 \* 60 \* 24)) % 14) -eq 0 ]; then node ${GITHUB_WORKSPACE}/run.js; fi

👨‍🚀 What can astronauts, submariners & antarctic researchers teach us about coping with the pandemic & lockdowns? They and others in extended isolation and pressure situations have been studied, and there are 3 pillars to making these situations much, much better:

  • autonomy
  • feelings of competence
  • trusted relationships

⧉ I found out the meaning of that clearfix CSS class that I've been seeing on elements for years. It's for clearing the float after an element so that the next element doesn't float up and across to the same starting position, thereby overlapping, and corresponds to CSS like this:
.clearfix {zoom:1}
.clearfix:after {
content: '.';
clear: both;
display: block;
height: 0;
visibility: hidden;
}

📈 Product Qualified Leads exist on a continuum of metrics to look at for company success. Their context is from marketing to PQLs to PQL-like metrics for even more customer success.

Concrete suggestions on metrics: not just PQLs, but tracking things like how many PQLs become customers (i.e. quality of PQL measure) and how many sign-ups become PQLs (mixed indicator: quality of how well sign-ups match the ICP, quantity of sign-ups, how well the product leads users to do the “right” actions and see its value).

🂡 There are good options for planning poker for distributed teams these days. It’s a small thing but the first time I’ve tried to do it without relying on everyone (or almost) being in the same room.

--

--

Peter Brownlow

Software builder, people manager, topical deep-dive enthusiast