avatarharuki zaemon

Seven quick links for Friday afternoon

Shared by

Your company’s values will be used against you. Values are trade-offs, otherwise they’re not useful for making decisions or shaping behaviour. Provide concrete examples of where company values helped make decisions, what the trade-offs were, and how the values led to better outcomes.

Toward better hypotheses. Experimentation is valuable when we already have a rich set of mental models. However, if our mental models are primitive or don’t highlight interesting variations in the landscape of possibilities, shining a light on them won’t bring much insight.

How to be a SAGE without being a snob: Remove power and authority from relationships; Make others feel included and accepted; Be generous; Create independent, self-directed learners. (Related, 7 marks of mentors who change lives.)

Why you should be afraid of ‘Great Execution’. Poor leadership treats strategy and execution as separate things. They will hand down a strategy to be executed. This leaves them able to claim credit if it succeeds; or blame you for not executing properly. Don’t fall for it.

Fix the system problem, not the people problem. The next time you see a proposal for a restructure, ask if there’s been any attempt to tackle the underlying causes of the problem. Look for any changes to the actual system. If you can’t see any – it’s doomed to fail.

The worst programmer I ever knew. Don’t try to measure the individual contribution of a unit in a complex adaptive system, because the premise of the question is flawed.

Forgetting is actually a form of learning. In experiments with mice, memories were not truly lost, but rather the brain cells encoding them could no longer be naturally reactivated due to interference from new information and experiences. However, the scientists were able to reactivate the forgotten memories by stimulating the brain cells that stored those memories.

Thirteen quick links for Monday morning

Shared by

I’ve been sitting on some of these for a quite a while (and I have enough in the backlog for checks notes another 8 of these posts!):

Reward collaboration, not individual work. Focusing on collaboration over individual credit leads to faster work completion at a sustainable pace without accumulating technical debt.

From reactive to creative leadership. Reactive leadership operates from a place of fear and defensiveness, while Creative leadership operates from openness, possibility, and passion.

The cult of the founders. While potentially inspiring, the prophetic leadership style is immature and inadequate for leading a company at scale.

5 tips for leading successfully in a global environment: Embrace change; Master async comms; Empower local employees; Amplify customer voices; and Build relationships.

Some hard truths about soft skills. Hard skills might get you a job, but soft skills like curiosity, emotional resilience, and learning ability can help you excel in the job.

The strategic benefits of randomized decision-making. In highly ambiguous environments, random decision-making can provide strategic advantages like: getting to market sooner, faster learning, less predictability, and reduced biases.

Obliquity as a strategy for learning. Focusing on helping people understand how they learn, rather than deep strategy or techniques, may help people thrive in complex situations.

How software companies can avoid the trap of Product-Led Growth. Eventually even the best PLG companies will need an enterprise sales strategy, which takes years to develop properly.

The hidden potential of eliminating failure demand. While some types of failure demand are simply unavoidable, reducing failure demand can improve customer satisfaction, reduce operating costs, and increase employee job satisfaction.

Value engineering and build vs. rent. Companies should focus their engineering efforts on building capabilities that are strategically important to their core business and customers, rather than generic systems that are readily available from vendors.

Are OKRs improving or inhibiting decision making? OKRs are not a substitute for strategy, and may be less effective in complex domains with low validity or predictability.

Do OKRs hinder decision making in radically uncertain environments? Goal setting constrains decisions to a “known end, unknown means” scenario and boxes thinking into a single approach rather than exploring alternatives.

Are OKRs overprescribed? Goals can trigger escalation of commitment and overinvestment even if the initial assumptions prove wrong.

Hidden Potential by Adam Grant

Reviewed by

★★★★★

I really enjoyed Hidden Potential by Adam Grant.

There’s so much fascinating, insightful, and often validating stuff, I almost don’t know where to start.

Some things that stuck with me though, in no particular order:

  • Character traits that predict growth potential: being pro-active; pro-social; disciplined; determined. Develop these in yourself, and foster them in others.

  • Be proactive: don’t wait for others; become a leader in your journey; experiment with new ideas and approaches.

  • Be pro-social: work collaboratively, inspire collective efforts; build understanding of other people and yourself.

  • Be disciplined: persist; stick to the plan despite challenges; don’t choose the easy path; endure discomfort for the sake of improvement; practice deliberately.

  • Be determined: mistakes and setbacks are part of the process; the more effort you invest, the more you grow.

  • Aspiration over ambition: Aspiration represents who you wish to become; Ambition is about your desired achievements.

  • Discomfort is where growth happens: create opportunities to face it. Embrace imperfection and start before you have full understanding or skill mastery; this leads to faster improvement.

  • The joy of learning: cultivating a love for learning fuels growth; discover and alternate between various learning methods to keep the process fun.

  • Teaching to learn: reinforce your understanding, especially when grappling with difficult material; teaching is a highly effective learning tool.

  • The curse of knowledge: It’s often easier to learn from someone only slightly ahead of you in experience; large knowledge or skill gaps require additional effort to bridge.

There’s also a wealth of information about fostering equitable education systems that offer increased opportunities for all, and unbiased hiring practices that consider the individual’s potential, rather than solely past success.

Leviathan Falls (The Expanse, #9) by James S.A. Corey

Reviewed by

★★★★★

Tiamat's Wrath (The Expanse, #8) by James S.A. Corey

Reviewed by

★★★★★

Persepolis Rising (The Expanse, #7) by James S.A. Corey

Reviewed by

★★★★★

Responsibility Traps

By

I recently watched a wonderfully insightful presentation by Eric Evans on Responsibility Traps. In it he describes a number of traps into which otherwise well meaning and capable developers fall. Among others these include:

  • Building a platform to make other (lesser) programmers more productive
  • Cleaning up other people’s mess; being a janitor
  • Making hackers (pejorative) look even better

He concludes that the responsible developer often focuses her energy on solving the wrong problem, incorrectly believing it to be in the best interests of the project/company/etc. as a whole.

Since then I have subconsciously been on the lookout for other areas of life where this anti-pattern arises and to my delight (or perhaps horror), I see it everywhere.

I thought about the number of relationships that I had dragged on for much longer than was probably good for either party, where, as a result of my desire to avoid hurting anyone, both parties suffered needlessly.

I spoke with a colleague who told me how, in a recent attempt to both fulfil his unspoken promise to help a project out of trouble and preserve the reputation of his sponsors, he continued to engage with the client well beyond his own reasonable belief of success. A near stress-related break down followed shortly thereafter leading to strained relationships all ‘round.

I can’t count the number of times I’ve tried to “rescue” a project I thought was doomed to failure, implement an unnecessarily complex story, “protect” a friend/relative/colleague/client from some bad news. In almost all cases the outcome was as bad as, if not worse than, it might have been had I confronted the reality at the outset.

Why do I fall into these traps when I believe I’m primarily motivated by of a sense of duty and responsibility? Partly I think it’s about taking a path of least resistance – It seems easier to try and press ahead to “fix” the symptom than to address the underlying cause; partly it’s about self-esteem – I’m a failure unless I can solve the problem; there’s an aspect of self-importance – few others can see what I see, so it’s up to me to do something about it. And then there’s just a plain old misguided sense of responsibility.

Many years ago, someone handed me a copy of a Garfield cartoon – ironically it was probably a technically illegal copy. The cartoon showed Garfield in bed on a Monday morning with Jon telling him to “Get out of bed Garfield!” Garfield wonders to himself “What’s my motivation?” Taken literally that doesn’t really say much but the message it has left with me is to be honest with myself about what really drives my decisions.

As a professional software developer, I believe I have a duty of care to act in the best interests of my employer even if that means delivering the news nobody wants to hear– “I think we’d be better off killing this project than sinking anymore money into it.” – and that doing so is ultimately better for me as well.

More often than not, the way a message is received has far more to do with the way in which it is delivered than with the substance of the message itself. Telling someone they’re screwed unless they do what you say probably won’t get you anywhere; suggesting humbly that they are spending double what they could be paying if all they are after is someone who’ll unquestioningly implement whatever whacky ideas they present, has historically worked out much better for me.

I’ve come to the conclusion that, more important than acting responsibly is to act ethically – fairly and honestly. If you act ethically you will necessarily end up acting responsibly but not necessarily the other way ‘round. Acting ethically takes courage, determination and optimism and that’s bloody hard work™. I encourage you to be brave, take a risk, act ethically and do the right thing.

Collaboration

By

I’ve heard the phrase “Excuse my poor code” (or words to that effect) a number of times recently. I’ve said it to myself about my own code (if not to others), I’ve heard two of my work colleagues say it, and I’ve had a customer’s sole developer apologise ad nauseum about his code.

I’m not here to make any determination as to the veracity of these claims but the thing that I find interesting is that in all cases, the majority of the code in question was written by a single person.

Now, this may be difficult for some to believe, but I inherently don’t trust my own opinion. I do tend to confidently put ideas forward as bold assertions to be shot down when I’m wrong. The confidence comes from knowing I’ll defend my ideas to the hilt and not take it personally when my argument is proven flawed.

I hate working alone because I don’t trust decisions that weren’t arrived at through furious debate. I don’t like developers working alone no matter how good they are (or think they are) because I don’t trust they can be objective enough by themselves. In fact I don’t care if they’re working in pairs of developers or not, I just want their decisions to be scrutinised by smart people as early as possible.

The idea that the majority of a developer’s work involves going off to think on their own is totally nonsensical to me. It feels like a lot of hocus pocus going on behind closed doors and then poof a few days later something is divined. Not only is the process opaque, but the possibility for smart people to scrutinise is left as late as possible. Sure, I like to sit and ponder without the hullabaloo of every man and his dog trying to give me their 2c worth as much as the next but the lack of transparency and scrutiny in this as a process is something I find very difficult to accept.

Smart people working alone is even worse. They’re often implicitly promoted to the position of grand wizard, the seer and knower of all things. They go away, think about a problem and come back with much fanfare (trumpets playing, drums beating) to bestow upon the people their creation who will wonder in amazement at the design, so simple and yet, so complex, that only they can truly grasp the significance of what they have achieved.

When I write code on my own, I feel personally, individually, responsible. When I write code on my own, the pressures I feel are, mostly, self imposed. They make me lie awake at night. They make me code into the wee hours of the morning, on the train home. I worry that I’ve missed something. I start to believe my own hype. That I’m good enough to do this on my own. That because I did most of it on my own, I should fix it on my own lest someone else realise how crap my code is. In a vacuum my ideas have no predators. As importantly (if not more so), my priorities have no predators. I race towards a goal without stopping to re-think that goal because I’m stuck in a vicious cycle of self doubt and self confidence. Moreover, when I work alone, the production of code becomes the focus and not, as I believe it should be, thinking!

When we write code together we have shared code ownership. I feel like someone has my back. That even if we got the decision “wrong”, we decided together and if two smart people can’t get it right then maybe it’s good enough, maybe there are diminishing returns for adding more people to solving the problem. When I go home at night, sure I might tinker but I know there’s not much point to spending a lot of effort because I’ll just be re-doing it tomorrow anyway. And if there is something we missed, someone has my back if need be.

I speak as one who has been, done and experienced others doing all of the above and decided once and for all that it’s just not worth working alone. Having more than one person working on something WILL cost more but I assert that the result will be better and will be achieved more quickly and with less churn. Anyone who thinks they’re smart enough to do otherwise needs to learn to keep it in their pants.

I have this mental model of software development that is akin to the way I’ve heard Abraham Lincoln’s cabinet described. Apparently he got a whole bunch of really smart people together, even those from opposite sides of politics, and let them argue it out. His (Lincoln’s) role was to decide when to stop the debate and which idea(s) to act on.

I think that’s what collaborative development should be.

YMMV :)

Six quick links on AI for Sunday afternoon

Shared by

Exposing the vulnerabilities of Large Language Models in Low-Resource Languages. Turns out, you can bypass GPT-4 safety measures by using a language other than the dominant languages used for training.

Kudurru is a network that actively blocks AI scrapers. To prevent them from scraping content without permission. We’ve started using Cloudflare but Kudurru seems to go one better and actively poison the well from which AI drinks.

Silicon Valley’s biggest AI developers are hiring poets. Partly to improve the style and credibility of their content, and partly to avoid potential copyright issues that could arise from training on copyrighted books and stories without permission.

Knowledge graphs improve generative AI. I’ve practiced concept mapping for perhaps 15 years, since reading Novak’s paper, and been into graph databases since the early days of RDF, so this is genuinely fascinating.

Generative AI exists because of the transformer. By moving away from sequential processing and focusing on “attention” mechanisms, the Transformer model significantly improved the efficiency and effectiveness of machine learning in language tasks.

With DALL-E 3, you can now get high-quality images that depict complex scenes, by default. I don’t have access to DALL-E 3, yet but from all the reviews I’ve seen, it sounds like I might be able to switch from using stability.ai’s DreamStudio.

My manager owns context, I own the recommendation

Shared by

Ami Vora:

What I need from senior leaders around me isn’t to understand all the exact same info I learned. Instead, I need them to offer complementary info that will help our team make a stronger decision, like:

  1. More context about what’s happening around the company or the industry
  2. Decision-making frameworks I might not be thinking about
  3. Pattern-matching based on other decisions they’ve seen
  4. Identifying other options or logical gaps I’m too close to see
  5. Sometimes, just giving me a vote of confidence that my thinking makes sense and they believe in me

[…]

how can I frame my recommendations so my manager can engage with them and challenge my assumptions, and then I can learn from how they think? Sometimes this means outlining my decision criteria clearly so my manager can disagree with specific ones and I can understand the principles they’re using. Sometimes it means sharing intentionally provocative “hot takes” about things we could do differently so I can hear context I might be missing

Techyte Blog

Shared by

On the weekend, our 15yo and I went about setting up a blog for her on micro.blog.

She already had a website she describes as “that mess” from when she first started getting into technology, and wanted to get into daily blogging on topics she reads about and is interested in.

After convincing her not to roll her own, researching various platforms, a bit of Cloudflare magic, and redirecting funds from Microsoft Game Pass, she was ready to roll.

Turns out, I had a dormant micro.blog account from when they first launched. If I didn’t have a bunch of historical baggage on this site I felt compelled to lug around with me, I’d be tempted to move over there myself.

Enjoy!

Four quick links for Saturday afternoon

Shared by

A short film made to explore one man’s fascination with artificial gravity in space. Beautifully produced and totally believable. So believable, in fact, I started to get nauseated watching it.

Sebastiaan de With reviews the latest telephoto-equipped camera out of Cupertino in his annual review. So many people have linked to this article that it’s probably not worth me adding to the pile, but I thoroughly enjoyed it. If you only skim it for the photos it will be worth it.

The iPhone 15 Opts for Intuitive AI, Not Generative AI. I really like the idea of AI to enhance human creativity and productivity, rather than replace it.

A research team found it’s easy to evade current methods of AI watermarking. They even added fake watermarks to real images. Watermarking has emerged as one of the more promising strategies to identify AI-generated images and text but as it stands, it’s ineffective.

The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!)

Shared by

A thoroughly accessible and enjoyable read, despite the dry topic.

Nikita Prokopov:

Unicode is a standard that aims to unify all human languages, both past and present, and make them work with computers.

[…]

What’s sad for us is that the rules defining grapheme clusters change every year as well. What is considered a sequence of two or three separate code points today might become a grapheme cluster tomorrow! There’s no way to know! Or prepare!

Even worse, different versions of your own app might be running on different Unicode standards and report different string lengths!

[…]

Unfortunately, Unicode is not a perfect system, and it has many shortcomings. Among them is assigning the same code point to glyphs that are supposed to look differently, like Cyrillic Lowercase K and Bulgarian Lowercase K (both are U+043A)

[…]

Overall, yes, Unicode is not perfect, but the fact that

  1. an encoding exists that covers all possible languages at once,
  2. the entire world agrees to use it,
  3. we can completely forget about encodings and conversions and all that stuff

is a miracle. Send this to your fellow programmers so they can learn about it, too.

The Man in the High Castle by Philip K. Dick

Reviewed by

★★★

Another book I read after watching the Apple TV series. This time, I can’t decide which I liked more. They’re almost entirely different stories save some common threads and characters.

Dust by Hugh Howey

Reviewed by

★★★

Like the other two books, Wool and Shift, I just wanted to keep reading.

Overall, it’s not a remarkable trilogy, but it held my attention, and I’m glad I read it.

Shift by Hugh Howey

Reviewed by

★★★

I enjoyed this perhaps more than Wool as I had no preconceived ideas from the TV series.

Six quick links for Monday evening

Shared by

A day off, a morning of reading, recuperating, and a few more quick links…

A Literary History of Fake Texts in Apple’s Marketing Materials. I don’t know what I like more, that Apple has these unwritten rules about a virtual world, or that someone went about deducing it from 13 years worth of marketing materials?!

Peter Drucker never said, “If you can’t measure it, you can’t manage it.” In fact, it was Demming, and in context, he meant exactly the opposite.

A great early write-up of the iPhone 15 Pro (and Pro Max) camera. I’m at best a hack when it comes to photography, but the iPhone cameras have made me want to get better at it.

How Big Tech Runs Tech Projects and the Curious Absence of Scrum. It’s no secret that whilst I believe in lightweight structure and process, I also think that a process is a means to overcome a limitation, and we should always be seeking to remove the limitation and thus remove the process.

There’s a difference between what tools can do and what tools do do. This is primarily about data products, but it’s also about products in general, and the reality that we continue to build new tools when we haven’t even used the ones we have to their full potential.

Grow your brain by moving your body—just 10 minutes a day. I find 10 minutes of meditative breathing and a long walk every day makes a huge difference to my mental health. It’s nice to learn there is not only science behind it, but the benefits are even greater than I thought.

Eight quick links for Monday morning

Shared by

Sad YouTube. Mark Slutsky collects meaningful personal stories found in YouTube comment sections before they are deleted. After publishing one comment recently reminiscing of a childhood crush in the ’60s, someone wrote in to say that they were the person mentioned.

Dan Ariely has been accused of fabricating research into … dishonesty. Speaking of crushes, one of the darlings of the cognitive behavioural science field. I loved Predictably Irrational.

Train travel in Australia is terrible because of the way the Federation was constituted. I had never really thought about it but, it makes perfect sense in retrospect. High-speed, electric train travel in Australia seems like a pipe dream.

Have you heard anyone say “whom of which”? It’s a linguistic trend that’s breaking my brain just learning about it. It may be related to the “pied piping” phenomenon where multiple words move left in speech over time, or perhaps people just think it makes them sound smarter.

Turning Chopin into Jazz. A short clip that makes me smile every time I watch it. My only criticism is how short it is! I wanted it to go on forever.

The Most Insane American Wagyu Steak I’ve Ever Cooked. My youngest is into cooking and recently asked me “what’s Wagyu, and why does everyone say it’s so good?” I sent him a link to Kenji López-Alt’s. Naturally, we went straight out and bought the closest thing we could find and had it for dinner. It was delicious, thanks for asking.

Eggslut bills itself as “A gourmet restaurant for true egg lovers”. I’ve not been there but Warren Seen went with his family recently and said his kids found the whole concept, challenging.

Xingyi Quan, imitating the movement of the spear. Unsurprisingly, I’m a sucker for videos on martial arts techniques.

Customer-centricity

By

Joop's Jetty, Harrietville Dredge Hole, Harrietville, Victoria, Australia, c. 2022.
Joop's Jetty, Harrietville Dredge Hole, Harrietville, Victoria, Australia, c. 2022.

One of our apprentices asked me recently: “What’s one good thing and one bad thing that’s changed over your career?” I said I think we have lost connection to, empathy with, and focus on the customer.

When I started as an apprentice analyst programmer (as we were known) c. 1991, the customer wasn’t just at the centre of everything we did, but we worked with them regularly. This customer engagement continued throughout most of my career.

Early in my career, software development felt less about the technology, and more about starting directly with the customer, and working backward to deliver outcomes early, and often. We’d go on site to see how people worked, and to listen to their pain points. Pre-sales was also an opportunity to understand customer needs. Doing customer support meant empathising with their problems, and more often than not turning them into evangelists for our product.

That doesn’t mean we always got it right, of course. Resourcing, prioritisation, and speed of delivery, have always been a challenge. As a software developer, of course I have always liked trying new technology and understanding better practices, etc. At the same time, in my mind at least, it was always a means to an end; not the end itself.

In the past 10-15 years, I’ve experienced a trend I think has been detrimental namely, intermediating cross-functional software development teams from the customer, and spending more time building technology platforms than delivering customer outcomes.

In my role, I am acutely aware of the challenges that come with not operationalising a product and ways of working. Ultimately, if the platform is fragile and hard to maintain, teams will become overwhelmed with rework and will slow down. I don’t think the two need be in opposition.

The more connection development teams have to the customer, the more they can understand their impact (positive and negative), and the more they are empowered to own the relationships, the more they are incentivised to deliver value incrementally while keeping their systems maintainable.

One of the challenges now is we’ve lost this muscle. There are many causes however, a generation (developers, designers, and product managers) has grown up in organisations structured around multiple layers of management, strict delineation between roles, and many degrees of separation from the customer.

We need to nurture a new generation of technology teams to directly engage with customers and value their feedback and needs; break down organisational barriers; encourage cross-functional collaboration; emphasise ruthless iterative and incremental delivery; and take ownership and accountability for customer relationships while ensuring system maintainability.

We need to stop intermediating and genuinely participate in the day-to-day; model how to exploit every challenge as an opportunity to incrementally deliver value; and innovate by ensuring our practices are truly generative and emergent.

Related, I loved this interview with Airbnb CEO Brian Chesky on why he’s deep in the product details. It resonated with me on a number of fronts, especially the functional org (vs matrix), and the customer focus. He talks about how they organise and coordinate the entire company around a coherent outcome, and the trade-offs of that approach. He also talks a lot about specific customer pain points, how they identified them, and the choices they made when addressing them.

Six quick links for Sunday afternoon

Shared by

Focus on quality and authenticity to surround yourself with quality and authenticity. Building communities by doing, rather than aspiring to be part of the “in-group” resonates so hard.

“It is more productive to convert an opportunity into results than to solve a problem – which only restores the equilibrium of yesterday.”–Peter Drucker. Call it confirmation bias if you like, but I think of myself as an opportunity exploiter, rather than a problem solver.

10 Self-Defeating Behaviors You Need to Let Go. I’ve worked hard to overcome a bunch of these the past 5 or so years. The struggle is real and I suspect, forever.

Convert videos of people speaking into videos of them speaking one of several different languages (including English, Spanish, Hindi, and French) with matching mouth movements. As Kottke says, the results are definitely in the category of “indistinguishable from magic.”

As the technology becomes ubiquitous, a vast tasker underclass is emerging. Speaking of AI, there’s a large global workforce being exploited doing “bullshit jobs” for low wages? Quelle surprise!

AI’s massive compute load doesn’t just generate carbon – it uses huge amounts of fresh water for cooling. While we’re still on the topic, it’s all the rage, and perhaps there’s a future, but as far as I can tell, it’s currently a large Wizard of Oz-style illusion.