This is what the indiewebmasters might call a link blog.
It's a list of links to things other folks have created with some quotes and commentary to boot.
Despite a fascination with digital tools, pen and paper is where my real thinking happens.
My experience is seasonal. I haven’t been journaling in the analog lately. And I think a big part of that is because I don’t like the quality of my latest notebook.
Noah’s oil paintings of modern food are perfect. An original will cost you thousands of dollars on ebay. I wish I could support an artist at that level.
The only problem? The method I need, ActionDispatch::FileHandler#find_file is private, meaning that I really “shouldn’t” be calling it. But also, it’s a free country, so whatever. I wrote this and it worked:
This is the beauty of programming in Ruby. You are trusted with sharp knives to accept (and mitigate) your own risks.
Of course, I could write a test to ensure this method still works, but I didn’t want to give this method even more of my time. So instead, I codified this assumption in an initializer:
Writing a test that will fail is routine to me. It feels like an understanding unlock to move that failure from test time to boot time. A failing test can be ignored as flaky. An app that won’t boot demands attention for resolution.
Business want risks that aren’t risky, art that isn’t challenging, and new experiences that are immediately familiar. But if branding is about differentiation, we have to actually differentiate. Diverge. Do something, anything, that isn’t what’s around.
Rewards flow towards risks. But they also flow towards compliance with paved paths. There’s a tension in trying to serve both reward mechanisms. Small differentiators are a hedging of bets.
Being yourself is a better differentiator than any other strategy.
Here’s why this matters: imprecise and euphemistic language is the language of fascists, authoritarians, and oppressors — power-craving leaders who either don’t want people to know what they are doing or don’t want them to think too hard about the illegality or immorality of their actions.
This motivates me to pursue a life of direct and precise language.
Ferrum provides you a high level API interface to Chrome browser and allows you to fully automate it and grab data from any public site you want. There’s no additional software required — only Chrome, Ruby and you.
I have yet to meet the limits of Mechanize, but it’s good to know there are other tools out there.
The problem here is that “sorry” both conveys sympathy without fault and sympathy with fault, i.e. “I’m sorry your feelings were hurt” vs. “I’m sorry I hurt your feelings”.
It is literally difficult to convey sorry without adding additional qualifiers.
To make things more confusing, “sorry-not-sorry” expresses unsympathy with fault.
This complication makes me believe we need another permutation that expresses sympathy even when fault of the speaker is assumed incorrectly.
I find that many people confuse refactoring with any change in code.
It’s true. I need to learn how to be gentler when confronting it because it irks me deeply.
When this happens, I say that the interface becomes a published interface (a step beyond a public interface).
Languages provide mechanisms for marking methods public or private. What would a convention for marking a method “published” look like?
It’s at the seams of the system, that’s a good place to start.
Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.
Refactor (verb): to restructure software by applying a series of refactorings without changing its observable behavior.
So while we refactor (verb), we apply several refactorings (noun).
Here’s the magic part: TCP is built on top of IP. In other words, TCP is obliged to somehow send data reliably using only an unreliable tool.
Every time I relearn this I stand amazed in the presence of TCP/IP.
What is a string library? It’s a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It’s a way to pretend that a hard drive isn’t really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes.
What is a language? It’s a way to pretend we can understand the same concepts in a world of imprecision and subjective experience.
One reason the law of leaky abstractions is problematic is that it means that abstractions do not really simplify our lives as much as they were meant to.
Conceptual compression allows ideas to travel faster and further. Ideas need play with each other to be remixed into something new. Decompressing an idea into its component parts creates opportunities for new compounds. Everything in its time.
Code generation tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting.
This was written in 2002! Long before LLMs were going to take our jobs.
It was true then and it’s true now: writing code is not the hard part of the work. Reading and comprehending and safely transforming the code to achieve refined and emerging desired outcomes is the hard part.
So the abstractions save us time working, but they don’t save us time learning.
This is why curious programmers are the best programmers. They have an insatiable hunger for learning how things work.
You can find out where things stand. But the answer is a human one, not a digital one. It’s fuzzy, it’s a bit abstract, and it’s more a feeling than a figure. It’s taking stock of all the things that can’t be measured, and speaking or writing the actual answer, not pointing to an abstract number. “63” means nothing. “We think next Tuesday” means something.
Ledgers want numbers. Leaders want truth.
Numbers provide facts. Facts are true, but they’re not the truth.
That imprecise wiggle room is also known as the truth.
Truth is subjective when creating something new and putting it into the world. This is a feature, not a bug.
Subjectivity is a good thing. A human thing. It’s with the grain. Subjectivity and productivity are partners, not adversaries.
If I believe I’ve been productive, I’ve been productive. I can be wrong, which is why I check that belief with my peers. Shared belief and shared believability is the next step.
Over time we’ll be adding more imprecision like this to Basecamp. The more we can reflect reality, not a false premise, the better off teams will be.
Reality is the believable interpretation of facts. Facts alone aren’t enough. Facts, in context, with value judgements are desired.
I probably could have just highlighted the entire piece. It’s worth a read, and the truth is probably somewhere in the middle.
Look, we get it. “Write a policy” is a very boring idea. As a vibe, it’s giving taupe, bureaucracy, and mildew. But putting some careful thought into documents like these gives your team clarity about where you stand as an organization, and what to do when the ick — however implausible — shows up. Given the current state of, well, everything? It might be some of the most vital work you do this year.
Well written policies can be a consensus-building and decision-making accelerant. Poorly written policies generate more questions than they answer.
Names that put the verb before the noun. By giving the verb primacy, as the system grows and opportunities for reuse arise, this encourages me to generalize the direct object of the class via polymorphism as opposed to generalizing the core function of the class, violating the single-responsibility principle (i.e. PetsDog may evolve into PetsAnimal, whereas DogPetter is more likely to evolve into a catch-all DogManager)
I’ve definitely written classes that (d)evolved from DogPetter to DogManager. I’m going to give this verb-first naming a spin.
Done well, refactoring is a low-risk investment in future productivity, by reorganising code without changing its behaviour. Often however, our conversations position work that doesn’t meet this description - and needs more scrutiny - as refactoring. Let’s look at what goes wrong when this happens.
I’m thankful one of the giant robots at Thoughtbot wrote this so I don’t have to.
After a while, long periods of work with no result creates distrust.
Results build trust! Results come in the form of desirable change or desirable predictability. Refactoring is focused on not introducing change, so it must be focused on retaining predictability.
A listener is more likely to ask: “why do I need this change and not something else?”, or “what does success look like?” when meaning is not hidden.
Say what you mean and mean what you say.
We need to be careful not to claim that we’re refactoring when we’re really making bug fixes, adding new features, or otherwise changing the code’s behaviour and our product’s user experience. Disguising that work as refactoring sabotages important conversations and creates suspicion about the concept. We can fix this by getting more specific in our language and by learning more about what refactoring really is.
A lot of modern solutions may not save time as much as they introduce complexity and reliance on more tools than you need. This whole process is not that complex.
Managing complexity takes more time than the effort saved. It’s true in many cases.
User adoption doesn’t work if it’s forced; it has to come from a genuine user belief that the new feature can help them achieve their goals. And it certainly doesn’t work if your feature actually creates a worse experience for the user and degrades the quality of the product.
Autonomy in adopting a new behavior is the ultimate sticking point.
The people might have asked for faster horses, but instead they got donkeys on LSD.
I literally lol’d at this. What a great reframing of a misquote.
Cynicism is the cheap seats. It’s the fast food of intellectual positions. Anyone can point at something and say it’s broken, corrupt, or destined to fail. The real challenge? Building something better.
I’ve been sitting in the cheap seats, apparently. I’m just happy to be in the stadium, watching live sports, eating fast food.
Putting aside the choice of analogies, I want to accept the challenge—to value creation above critique.
Cynicism comes with hidden taxes. Every time we default to assuming the worst, we pay in missed opportunities, reduced social trust, and diminished creative capacity. These costs compound over time, creating a self-fulfilling prophecy in which cynical expectations shape cynical realities.
Being right feels so good that you’ll continue pursuing it even if it’s making you miserable.
Call it pragmatic meliorism — the belief that while perfect solutions may not exist, better ones do.
Don’t let the pursuit of the perfect become the enemy of “good enough”.
Full Feed RSS is a simple RSS feed reader that displays the full content of the articles.
This is the kind of stuff that makes the web great. Following an RSS feed that requires a click-through to view the whole article? Build your own tool that brings the full article into the reading environment you want.
Domain ownership and SSL certificates solved this problem at a lower tier before Web 2.0. Centralization on platforms has invented an arguably unnecessary problem of authentication.
The only reason we don’t have this at scale now is because we don’t have a good RSS writer for regular people.
Mann posted a self-reflective essay on 43 Folders, in which he revealed a growing dissatisfaction with the world of personal productivity. Productivity pr0n, he suggested, was becoming a bewildering, complexifying end in itself—list-making as a “cargo cult,” system-tweaking as an addiction. “On more than a few days, I wondered what, precisely, I was trying to accomplish,” he wrote. Part of the problem was the recursive quality of his work. Refining his productivity system so that he could blog more efficiently about productivity made him feel as if he were being “tossed around by a menacing Rube Goldberg device” of his own design; at times, he said, “I thought I might be losing my mind.” He also wondered whether, on a substantive level, the approach that he’d been following was really capable of addressing his frustrations. It seemed to him that it was possible to implement many G.T.D.-inflected life hacks without feeling “more competent, stable, and alive.” He cleaned house, deleting posts. A new “About” page explained that 43 Folders was no longer a productivity blog but a “website about finding the time and attention to do your best creative work.”
I think about this article every time I rebuild my personal website. I love the exploration in finding new ways to do things. But once again I’m confronted with what I’m actually trying to accomplish.
I cannot find a video of this presentation. The slides and speaker notes are gold.
A big mistake they made in my view was that they conflated roles with work a little too much. Frontend engineers did all of the frontend work and none of the backend work, and vice versa.
I have seen this. In the worst characterizations it interprets people as interchangable parts instead of unique collaborators with strengths, weakenesses, and room for growth.
One big thing that a lot of people love to do is create new role types. For any new thing a company wants to do, the tendency is to put up a new job description.
Resist this urge. Start doing the new thing. If it ends up taking an inordinate amount of time, hire someone to do the thing.
Once people have subdivided work, they naturally try to arrange people into assembly lines. If you have AI work, hand it over to the AI person. If you have ops work, give it to the ops person.
That’s the kind of thing that feels obvious to leaders, but I think it’s wrong. And sometimes it’s wrong in a mathematically provable way.
Thinking Fast & Slow comes to mind. It feels intuitive, but it never works out quite that way in practice.
The most important bit that we took from that movement was that we should tear down existing barriers between roles. So after about two years of creative destruction pretty much everybody was pitching in on pretty much everything.
Tearing down dividing walls is work of the highest nobility.
the thing we were actually going to do was use our rare and precious organizational power, and the free time that came with it, to lift up other teams and make them more effective.
Seeing your work make the lives of real people better is the most rewarding outcome.
We tried really hard to have domain experts, but never really domain owners.
Ownership is a word that means different things to different people. I like the idea of floating experts serving the team rather than stationary owner controlling their fief.
There were other ways in which we didn’t just wait for the streams to cross themselves. We injected sustaining energy into this system very intentionally.
Good organizing patterns and collaboration don’t just happen. They require the intention of leaders.
None of them would admit this, but I think there’s an industry instinct that misery gets results. I think this is mistaken. Misery is a shitty proxy metric for results.
Misery loves companies. This rebellion against misery as a metric reminds me of the bigger argument within Accelerate (the most high-performing teams are those that are healthy and enjoyable to be on).
So why is it that career tracks can be misused? The issue is that they are a simplification of a complex, multi-dimensional problem space. People’s careers can go in limitless directions, and career tracks are just one possible path at one possible company. They are represent a local maxima, not the global maxima.
It is easy to forget the vastness of the forest when you’re gathering all your resources from a single tree.
We need to stop obsessing over dangling the next step on the career track as a carrot. Doing so almost always leads to disappointment. Long term conversations become short term: why can’t I have that role now? When can I get that role? What’s the fastest way to get there? These are all questions that are focused on shortcuts and checking boxes, and not on doing impactful work for customers or increasing their skills.
Doing something that is already defined can be appealing. This is the work of clergy cementing the norms of an institution. But many would rather be trailblazing or pioneering.
Instead, we need to help our reports consider the bigger picture: what is the global maxima of their career?
This global maxima is the point at which we are at our most skilled, our most impactful, and the most satisfied. The global maxima may not even be a role, but a state of being where everything comes together: life, work, compensation, contribution, and happiness.
This is interesting, because it will be different for every single person. Maxing out one attribute of life can lead to dread. Satisfizing within the local maxima may lead to more fulfillment.
But you cannot pursue interesting novelty—things that no one else is doing or which you have never seen before, or the little threads of nagging curiosity or doubt—by chasing along known direct value gradients. But that’s where the treasure is. That’s how you will find the place where you need to build. To get the biggest and most interesting payoffs, you have to start by chasing merely interesting novelty in an open-ended way.
This describes my learning style. Follow curiosities with no clear end in mind, just fascination.
This efficient pursuit of predictable value is the quiet dignity of the mass of working people. But if we are to solve the bigger structural, spiritual, and intellectual problems which aren’t addressed by existing institutions, someone needs to be exploring off of the established road, where there is a high probability of failing to accomplish anything at all, and a significant probability of discovering and exploiting the next big breakthroughs.
Conference talks of trailblazers, pioneers, and settlers come to mind.
But this isn’t really about your job. It’s about your relationship to resources and value.
A helpful frame. A job is not an identity. It’s a proxy broker of resources and value.
Capability makes your life simpler. Tolerance, skills, knowledge, and health are always with you, wherever you go. They are assets but they take up no space. They are stored in your body.
Tolerance, skills, knowledge, and health. Investing in these things is an investment in yourself.
iA Writer is my go-to mobile text editor. But it is strictly for words. Having a plain text editor for code-like things could be useful. And this is the tool I’d reach for to do it.
Social share images are basically billboards on the information superhighway. Perhaps they were intended to convey additional context about the article, but in practice they’re really just screaming to catch your eye (and attention) and hopefully make you click.
How can I can turn my website into the Wall Drug of the internet?
100 miles to Wall Drug
50 miles to Wall Drug
25 miles to Wall Drug
10 miles to Wall Drug
Countdown accelerated anticipation doesn’t work, because websites are always one click away. Unless I create a labyrinth of indirection—multiple properties across dozens of domains.
Middle management is not just a communication bus. You should be making things happen.
A parked car needs no alignment. A vehicle’s need for realignment is only revealed when observing it in motion.
New senior managers who have become highly effective at managing smaller teams may overdelegate in larger organizations to the point that they require someone else to answer all of the key questions for them. This is a bug, not a feature. You need to know what your org is doing if you are accountable for it.
Which requires some kind of organized communication bus, which cannot be the entire job.
Current social network technology strongly favors the former: if you write about just one area it’s much easier for algorithms to figure out who to show your posts to. And so you see a lot of advice to build your personal brand about an area: write about cooking, or housing policy, or military history.
This is very much not for me. I want to write about whatever I want to write about, which is a lot of different things, and I’ve generally just accepted that this is a bad fit for Facebook and the other places people read my writing.
The desire for an author to write about whatever they want to write about resonates strongly with my own desire for writing.
I can add this to the pile of excuses for why I haven’t shared my writing. Or I can just get over it and start writing.
Lots of gold nuggets in this interview with Shopify Founder Tobi Lütke.
My attention is the most liquid and valuable resource that I have.
It’s okay that every day doesn’t look the same. Embrace the liquidity of your most valuable resource!
if those assumptions are faulty, the seemingly perfect decision is faulty too.
Challenge every assumption, especially your own, to arrive at good decisions.
One of my biggest beefs with engineers, in general, is that they love determinism. I think there’s very little determinism in engineering left that’s of value. An individual computer is deterministic; once you introduce even just a network connection into the mix, everything becomes unpredictable and you have to write code that’s resilient to the unknown. Most interesting things come from non-deterministic behaviors. People have a love for the predictable, but there is value in being able to build systems that can absorb whatever is being thrown at them and still have good outcomes.
Build systems that handle the unpredictable. This is why people with an emergency fund sleep better at night than those who assume nothing in their life will ever fail.
the lack of healthy debate on most social media is one of the core issues with the platform. Humans must disagree, but these platforms do not provide a proper bi-directional medium (or set of tools) for these debates
Normalize disagreeing respectfully. Can this medium even support it?
in the primarily anonymous world of social media, it’s normal not to consider the other human a human. They are the last thing they wrote that you disagree with. There is no relationship; it’s simply the last thing they posted. And how do you feel about that post.
Eleanor Rosevelt said something along the lines of “Great minds discuss ideas; average minds discuss events; small minds discuss people.” It seems like we’ve all become great minds, but have forgotten their is value from the other points on the belle curve.
Great hearts care for people; average hearts show up for events; small hearts hold only ideas.
Putting everybody in one room is the lowest denominator of collaboration. Same with asking everyone to take part in the same work.
Everyone in the same room should be rare, to refill the trust batteries. Everyone in the same room as the mode of collaboration is waste.
Real collaboration is when someone knows something deeply, another person knows something else deeply, and we put our heads together. We bridge the gaps, we fill in different perspectives, we add in information the other doesn’t have. It’s 1+1=3. More comes out than we put in.
1+1 can equal 3. 1+1+1 can also equal 3. 1+1+1+1 can equal 2. The limit approaches zero.
What we need to collaborate better is (1) appreciation of each others’ strengths and (2) a common language to communicate with.
Creating the common language takes time in smaller groups.
Shipping in a big tech company is a very different skill to writing code, and lots of people who are great at writing code are terrible at shipping.
This statement is true at all scales of companies based on my anecdata.
Projects do not ship automatically once all the code has been written or all the Jira tickets closed. They ship because someone takes up the difficult and delicate job of shipping them.
Tasks done as the definition of shipped feels very waterfall. Each completed task reveals more information about the gaps between what’s been done and when the project will be done.
What does it mean to ship? It does not mean deploying code or even making a feature available to users. Shipping is a social construct within a company. Concretely, that means that a project is shipped when the important people at your company believe it is shipped.
I resonate with this idea that “shipping is a social construct”. It seems to explain why defining what “done” means is so difficult to nail down. It’s dynamic based on the scope and impact and progress of the project.
Really, the whole thing could be highlighted. Go read it.
These steps can reduce risk, which is great, but it’s not the same as eliminating risk. Do what works for you, and do it as consistently as possible. The best steps you take are the ones you take. Start small, build up gradually, and make informed choices.
I don’t like how certain events have played out, but I’ve learned to accept that - while I am only in control of myself - I am in control of myself. I’ve learned not to assume responsibility for the feelings and actions of others. I’ve learned boundaries. I’ve grown. And I’ve had to accept that not everyone is interested in that growth.
Emphasis mine. Because it matches my experience over the last few years.
…my wife and I have largely gone where life has taken us. That has led to great adventures, but it has also carried great costs…
…change is slow. We’re more in the driver’s seat of our own lives than ever before.
I’m bookmarking Ash’s blog post because it feels like something I could have written about my similar experiences.
The secret to my success as a developer has been watching every talk Sandi Metz has ever recorded, reading every book she’s ever written, and assuming her instruction is correct until proven wrong.
As a leader, you can change the rules. You can do so unilaterally. It is so often your job to make the hard calls. No one writing this newsletter would tell you otherwise. What we can tell you, though, is that when you change the rules your people will notice. And at that moment, they will have some hard calls of their own to consider.
A leader can create whatever environment they want. Everyone will choose how they want to respond to that environment.
The site is served by Apache2 with mod_wsgi from a lowish-end Ubuntu instance hosted at Digital Ocean. I don’t use an dedicated app server, or a CDN or cache. Posts have hit the top of Hacker News a handful of times without load struggle; this approach seems fine.
Another drop in the bucket of anecdotal evidence that I do not need the complexity of a git based workflow, Netlify, etc.
But what I lose in simplicity I gain in control.
This is the unspoken trade off of static site generators. I want control. I want dynamism.
I quickly realised that if I didn’t toot my own trumpet (or at least record the notes I played), they’d quickly get lost in the noise of a 500+ person organisation.
Striking the balance between shipping code and highlighting why those contributions are valuable is an art unto itself. It can feel like documenting your own career becomes your career in a large enough organization.
When thinking about our own lives, we don’t remember how we actually felt in the past; We remember how we think we should have felt, given what we know today.
The transition from uncertainty to certainty melts the memories of anxiety and worry.
So much of what matters in investing – this is true for a lot of things in life – is how you manage the psychology of uncertainty. The problem with looking back with hindsight is that nothing is uncertain. You think no one had anything to worry about, because most of what they were worrying about eventually came to pass.
“You should have been happy and calm, given where things ended up,” you say to your past self. But your past self had no idea where things would end up. Uncertainty dictates nearly everything in the current moment, but looking back we pretend it never existed.
Michael Scott said it best: “should have had hindsight.”
The neat part about cultural change is that it’s a rolling average of the last thousand or so interactions you’ve had. And the really neat part about humans is how quickly we adapt to changes in culture.
Can I show up intentionally 1,000 times in a row? Will I show up with adaptability 1,000 times in a row? Its probably a dance of both.
a disagreement happening out loud is one we can resolve. A disagreement happening in silence is not.
Disagreement, like expectations, need to be shared out loud if there is going to be any relational progress.
Though I work professionally in the field, I feel strongly that anyone should be able to make a website with HTML if they want. This book will teach you how to do just that. It doesn’t require any previous experience making websites or coding. I will cover everything you need to know to get started in an approachable and friendly way.
I resonate with this message deeply. Learning HTML was one of the best happy accidents of my life. I hope this resource stays available for a long time.
A brief introduction to Cicero got me thinking this morning. A cautionary tale for those of us who like to live in the world of ideas. (It me.)
He loved to talk about it, he was fascinated by it intellectually, but his ego and his expensive tastes got in the way of actually practicing it day to day.
It’s easier to want to curate a vibe that projects an identity than to practice a discipline in obscurity.
He loved the art of rhetoric more than the practice of virtue.
And, as always, “actions speak louder than words” in the long game.
Templates are built with web pages. You can use HTML, CSS, and JavaScript to lay out your documents. If you know how to make a web site, you can easily make an iA Writer template.
You can use HTML, CSS, and Javascript is a great lead to any publishing endeavor. Remember OSX widgets built with HTML, CSS, and JavaScript? What a joy!
So if you don’t know what to blog about, listen. Listen to what you hear and write it down. I doubt you’re the only one hearing it, but you can be one of the few writing it down.
Listening refines my thinking. Writing refines my thinking. Imagine what could happen if listening and writing oh look a squirrel.
These 4 components of quality have proven to be straightforward, independent, mostly measurable streams to track. There’s no need for a “grand quality metric” which combines them, and no complex coordination system required to manage all these in lockstep. Customers are happy when any of these improve, so I can just make progress on each of them individually whenever it makes sense.
I’m always down for a simple system that does not overcomplicate things.
And screens are the exception that prove the rule because, as Byung-Chul Han has noted, we look through them rather than at them. Screens don’t decorate the physical environment so much as they invite us to stare through a window into a different kind of non-place.
I’m writing these reflections of interest into my special corner of the non-place.
TCP/IP, HTTP(S), DNS, HTML, CSS, and many other protocols along the chain are the medium. And the medium is the message. Trust is at the core. The message of slop goes against the grain of the medium of the open web.
The human component of the web won’t change. People will need answers that they can trust. Folks on the web are also resourceful; they always have been.
It’s humans trusting humans all the way down. We’ll build new networks of reliable information we can trust. Or, to quote the world’s most reputable chaotician Dr. Ian Malcolm: “life finds a way.”
I’ve come to realize I don’t like America, not as a place to live. We have an ugly, selfish, winner-take-all culture — devoid of community, meaning, and the majestic — and almost all our policy is built around the notion that individual liberty, with the most stuff at the cheapest price, is the ultimate good
A brutal run on sentence from a guy who’s walking around the world.
I read this obituary of Susan Wojcicki. She was the chief of YouTube. She died of lung cancer.
It could have been anyone’s death that caused a moment of reflection and meditation. This obituary did it for me.
She was only 16 years older than me. She led one of the biggest culture shifting platforms of our lifetime. She’s still dead.
Steve Jobs died over a decade ago. The culture of Apple has slowly degraded and changed. The brands and institutions being built outlive their founders. The founders still die.
When a grievance like this lands in front of you, there’s a sentence to get good at. If you need to, you can practice it in front of the mirror first. It goes, “what did they say when you told them?”
It’s a gentle shove. You’re not saying “I don’t want to hear it.” You’re just reminding them that it’s a fair expectation that they would try to resolve it directly
I want to get better at this. Embracing conflict is a learned skill and I’m early in my practice.
Solicited advice is rare because people don’t solicit advice. All this time I could’ve asked my friends/family how to be happier. But I avoid honest feedback. I elect to “flop [sic] around and find out”. No flashlight – at full speed, I will navigate this dark landscape entirely with my big toe, which is now gnarled beyond medical intervention (and divine intervention).
“Some projects benefit from early action. If you’re writing a book, it’s easy to spend a lot of time brainstorming titles and dreaming up an outline, but it’s better to simply write. The book discovers itself as you go. Yes, you’ll need to go back and organize things, but this is easier to do once you have material. The key is to act first and then organize your thinking.
Other projects benefit from early planning. The best way to build a skyscraper is to plan carefully. If you start placing steel beams on day one, you’re guaranteed to run into problems. It is harder to make changes once you’ve begun. You’ll need to tear it down and start over again. The key is to organize your thinking and then act.
Do you need early action or early planning?”
There’s more than one way to achieve a goal. Know which mode would be most helpful. I’ve also heard it described as “scrappy or scaling”.
Don’t be afraid to take the trip, but give it at least two weeks (if not two months!), and don’t think of the journey as a way to find the same home in a different place. Be open to a new home, in a new way, in a new place. You might just like it.
David is talking about migrating from Apple to Linux and Android. The paragraph applies to all kinds of experimental life changes.
This is the price of success, of a platform, of power—that is, responsibility. Honesty is still required, but discretion is too. Catharsis is something you’ve given up. Venting is for outsiders. Speaking off the cuff is off the table. You’ll have to learn to keep some things to yourself now. You’ll have to be disciplined, conscientious, deliberate. You’re too visible now. Too much depends on you.
The ease of transition is suspicious. How did this happen? Why did I magically wake up and find it simple to return to work on this day of all days? If I don’t understand it, anything might switch it off again. So I err on the side of secrecy, and remain a jealous guardian of my time.
Seasons of work ebb and flow. I want to find the secret to the seasons that have clicked for me.
Great ideas don’t come to me if I wait for them, they happen whilst I’m bouncing my head off the wall.
Action begets insight. Insight inspires action. It’s a virtuous cycle.
Don’t wait. Just keep noodling. Creativity isn’t a thing that you are, or a thing that you will be temporarily in the future. Creativity isn’t luck, either.
One of the most graceful ways you can age is by becoming a person who sits around outside doing nothing. I’ve started doing it a bit myself.
I’ve been sitting outside doing nothing since my twenties. I want to pick up the frequency on doing nothing for hours.
It’s not just that iPhones are easy for babies to use—iPhones are actually for babies, and when we use our phones we become more baby-like ourselves, endowed with agency-on-training-wheels. You can see why we lose interest in the edge of the sidewalk.
“Agency-on-training-wheels!” What a perfect sentiment for feeling empowered when viewing the world through a window.
At this point, group chats are probably overtheorized. They are a seemingly irresistible object of cultural analysis and trend reporting, perhaps because they are so subliminal—the information layer just below the surface of daily experience, literal subtext, hidden in plain sight, begging to be brought into the foreground and discussed.
This article made me wonder if I’m in far fewer group chats than my peers. But I’m afraid to ask because I don’t want to be invited to even more than the few I already manage.
Our bias is to always add more. More rules, more process, more code, more features, more stuff. Interdependencies proliferate, and gradually strangle us. Systems want to grow and grow, but without pruning, they collapse. Slowly, then spectacularly.
Prune the fruit-bearing branch, or cut back the dead wood. Either way, a cut is coming.
Software development is full of merchants of complexity. They will tell you about great engineering practices and how to optimize for the local, but they never stop to discuss cost/benefit or how the system as a whole will suffer. The recent debate was a great showcase of such a way of thinking.
I think curation, actual human curation, is going to play an important role in the future. In a web filled with generated nonsense, content curated by knowledgeable human beings is going to be incredibly valuable.
When institutions die now, they rarely give us the closure of ceasing to exist—they live on in zombie form, and we learn to tolerate the gradually worsening conditions they impose.
I don’t know that this is new. The haunting of long dead institutions still holds sway on culture.
The red badge notification used to be one of the most reliable indicators of signal amid the noise, but even that has degraded, thanks to proliferating groupchats as well as the feature’s exploitation by legacy platforms. Now you have to come up with your own system, or brace yourself for an onslaught of meaningless alerts.
Growl was great because it was novel and opt-in. Notifications as a first class primitive of the operating system is a burden because it’s opt-out.
Allow me to make errors and give me the space to correct them, rather than preventing them altogether.
A system without errors has completed the work of entrenching all biases. Acknowledgement of the error state would be ceding the truth that other ways of being exist.
Best tacos in Gaslamp. A group from Planning Center ate here before the Reds vs. Padres game. The tacos were incredible enough that I wanted to write it down to remember later.
the pull of online reality and headset-mediated simulations almost automatically carries us toward a variation on the Crichton dystopia, a version of stagnation that’s sustained by the illusion of exploration, an age of fundamental conformity disguised by the personal tailoring of everyone’s private holodeck.
The diversity of personalized simulated realities with sensory-dense stimulation will become a commodity. It will result in wide-open spaces with nothing to do becoming a luxury good, available only to the affluent.
There’s a reason many people are now searching Reddit rather than Google. Since it’s more difficult to monetise content on Reddit, there is less incentive to stuff it with SEO goop in an attempt to capture keyword rankings.
whenever attempting any effort with other people, prioritize building trust and respect for each other over and above any other goal. The trust forms the foundation from which the work can grow.
Trust requires movement. The tension of drifting apart reinforces the importance of strengthening the bond.
Is the situation actually complicated or is it really quite straightforward, but you’re making it complicated because it requires a lot of courage to make the straightforward decision?
Complexity can be incidental. It can also be an avoidance mechenism.
anytime someone says something nice about you, record it in a central place that you can go back to. Keep up this habit for even a few months, and you will start to have a little resource for the days when your inner critic tries to tell you that you’re no good at anything.
Their current homepage has the feel of a departmental civil war, with little fiefdoms vying for above-the-fold favor from their feudal lord, constrained by their in-fighting to produce copies of their conflict.
Not exactly inspiring for the consumer. Or good for business. People mostly care about their problems being solved for a price they can live with. On the surface of that exchange, none of the org charts, internal politics, policies, procedures, KPIs, or corporate culture jargon du jour matter to the customer. But each of those things affect the customer, since they shape the outcome. So companies should care, if they want to stay in business.
Additionally, you don’t solely write code. You also run it and debug it. When I open my webpage and there’s a 1:1 correspondence between the <meta> tags I see in the devtools and the <meta> tags I see in my code, I can move quickly in debugging issues and trusting in the correctness of my code.
It went from a studio constantly making new, amazing things to a studio that just. Kept. Making. The Same. Things. And they started losing the experts who knew how to make things and started bringing in people whose job it was to simply make more of the thing
A common refrain in every failure, from Marvel to Warner Brothers to Boeing, was this: “Leadership doesn’t know what they want,” and “leadership doesn’t trust the people who know what they’re doing to do their jobs.” It’s a deadly combination — people who try to use easy data to justify making decisions when they don’t know the first thing about a product, because they’re too busy numberfucking and datafucking to try to make number bigger, results in every one of these companies getting worse.
The only people who can survive repeated failures are the people running platforms and stores. If you aren’t doing that — and it’s impossible for you or I to go into our garage and start a new Apple, because instead of competing with nobody for the personal computer or games console, we’re competing with the biggest, most stable companies in the world, with research and development fortunes that will smother us alive.
If you want to make choices, expect that you’re going to be accountable for outcomes
Be mindful of holding opinions about everything and making decisions about nothing. Decisions speak louder than commentary.
A risk-free existence isn’t a leadership role, regardless of whatever your title might be.
Leading people is inherently risky. If there’s no risk involved, it’s probably not leadership.
The upside is that almost all meaningful personal and career growth is hidden behind the risk-taking door. There’s a lot of interesting lessons to learn out there, and while you can learn a lot from others, some of them you have to learn yourself.
If you’re a conventional SaaS, by offering a free tier you are allocating money (in the form of ops load, compute, and various other things) in order to acquire customers. Whether or not that offering is correct is not subjective or qualitative: it’s just like any other avenue of paid acquisition, where you look at CAC and you look at LTV and you look at your runway and you call the shot.
My favorite lenticular illusion was a Ghostbusters bookmark. This is a pleasing effect that makes reasonable use of on device technology. Jump strait to the prototype and tilt your mobile phone.
Hill-making, hill-climbing, and hill-finding are all mentioned in this piece. A great metaphor to think through team interactions.
I’ve noticed that conversations between a hill-makers and a hill-climbers devolve quickly. One person thinks about terraforming the landscape. The other person assumes a fixed landscape that need only to be taken. Then there are others who will only ascend the hill if there is a clearly marked path before them.
This burden should always be on the author, not the user. If you find yourself blaming the user for the pattern you built, you might be bad at your job.
Any working system can become invisible to the point where the system loses value because it’s working.
“Look at all the things that aren’t falling apart” is one of the greatest challenges of building tight operations. Things that are done well are invisible because the problems are being consistently, adequately, and even automatically solved.
The bold headline worked on me. This is one to watch. Their “server rendered custom elements” feels like a good name for what I was playing with a few weeks ago.
We will come to see that our default of “trust first and check later” was only a short temporary anomaly in our long history. We are back to the state we have been in for most of our time as humans, where we “check first and trust later.”
This historical perspective is helpful. It is a short window of human history where photographs and videos were the primary validation of truth claims. We’ve operated on networks of trust and reputation before. We can operate on them again.
every venture backed company has the following plan: spend a lot of money to gain a monopoly, use the monopoly to price gouge everyone, replace all core services with subcontractors until the company only exists to add a 5% convenience charge on all transactions.
5% of the biggest pie is always going to be bigger than 100% of a small pie.
There will always be outliers who aren’t here to eat pie. The folks who enjoy the end-to-end practice of baking a pie from scratch. And seeing our friends enjoy it.
It is insane how itchy and irritable I get when there is something I want to get out in the world, and it is just inches away from getting there. I always forget.
It’s like… when something is out, whether it’s a public demo or better in people hands, it can stop living in my head and start being material that I work with to make the next thing.
(This goes for things I’m making with my own hands or making with other people.)
And when I’m carrying something half-complete in my imagination… it’s a weight, it’s a drag.
Radiating information is not free; it takes time. You need to find a balance that makes sense. I estimate I spend one or two hours per week writing what I did or project updates. I usually leave it for the last part of my day. It doesn’t interrupt my main focused work, and it doesn’t happen every day. It’s also a muscle to train. The more you do it, the easier it gets.
And whenever it feels like a chore, I remind myself that it is a chore that lets me spend most of my time doing what I like.
I’ve noticed that humble people tend to share too little information. They want to avoid the risks of appearing arrogant. They want the work to speak for itself.
These are good motivations. Nobody wants to work with the arrogant one. And the work should be good enough to speak for itself.
Distilling a week’s worth of work down into a digestible paragraph or sentence is a skill. It is an amplifier to the work that speaks for itself. And the work that won’t hold water in two weeks time.
Summarizing accomplishments is an extract of the raw goods. Good work can be communicated in brief summaries. This signals that the essence of the problem being solved was understood. Shotty work makes for disjointed summaries. The person is trying to get to the essence of the problem for the first time in reflection.
You hear about this all the time. A thoughtful person goes to write the git commit. While writing about the problem and their solution they uncover a new understanding of the problem and a clearer solution. They don’t settle for first impressions and first drafts. Their own writing is a feedback loop that improves their writing.
Commits cannot meaningfully be changed to become signed retroactively. Unlike an online website, they are part of a historical record, not an operating program. So we cannot establish the difference in treatment by changing how unsigned commits are treated.
Thinking of a website as an operating program is a new thought for me. “Static site generators” shape the thinking that websites are static. The request/response lifecycle that takes my html to your machine is not static. It’s alive!
That probably seemed like increasingly unhinged hyperbole, and it was.
This is a great sentence. Unhinged hyperbole respects unhinged hyperbole.
Just from a baseline utilitarian philosophical perspective, for a given action A, all else being equal, it’s always better not to do A, because taking an action always has some non-zero opportunity cost even if it is just the time taken to do it. Epsilon cost and zero benefit is still a net harm.
Opportunity costs and unpredictable second and third order effects are always present. This isn’t a reason to not take action. It is a reason to truly find value in the desired outcome of the action being taken.
What I am actually trying to point out here is that it is useful to carefully consider how to avoid adding junk complexity to your systems. One area where junk tends to leak in to designs and to cultures particularly easily is in intimidating subjects like trust and safety, where it is easy to get anxious and convince ourselves that piling on more stuff is safer than leaving things simple.
Fame is when people who don’t know you, build an image of you in their head for their own purposes, and if you behave differently from that image, they get mad at you
And yet, as much as I enjoy this handwritten journal, I still use Day One in the evenings. The two journals flow from different parts of my brain, though they work together in an interesting way.
This matches my experience. There are different flow states in different writing environments. Even within the same medium.
Before shelving it in its lovely slipcase alongside my other paper journals, I archived a PDF copy with the scanner app on my iPhone for safekeeping.
I’ve got a box full of journals that date back 20+ years. Digitizing them has been a long horizon idea. Something as simple as scanning them into PDFs using Notes on my iPhone hadn’t occurred to me as a minimal first step. I’m gonna take it.
But wait, here’s a question. These transformations have to happen somewhere on the way between your computer and mine. So where do they happen?
Do they happen on your computer?
Or do they happen on mine?
This is a pretty pedantic post. And I think it needs to be. But the trailing question is the best. Transformation of named custom concepts into agreed upon standards has to happen. That’s web development.
Where that translation happens? That is the question.
But here’s the thing: I create these things for me and me alone. When a bunch of people read something I wrote or show up to one of my talks, do I find it encouraging and validating? Sure. But it’s not what drives me. I started creating things to punctuate my life’s sentences long before anybody took an interest in me and I wouldn’t stop even if everyone loses interest in me.
What’s more, a lot of (ugh) content creators are the same way. In the course of my travels, I’ve gotten to meet many of my heroes, and while a few have disappointed me spectacularly (don’t meet your heroes!), I’ve found that a surprising number of them got into the thought-leading racket for the same selfish reason I did. They create stuff to scratch their own intrinsic creative itches and to give meaning to their careers. If other people’s attention factors in at all, it’s usually to justify the time they spend making stuff.
A few gems in this blog post. A few things that ring true to me:
Planting flags in reflection is more rewarding than setting goals and projections
Creating things that scratch my own itch is more rewarding than creating things that cater to an audience
I use tags for importing Pinboard bookmarks into my website. I wanted to rename tags when changing from https://www.danott.co to https://danott.website. There’s no clear way in the Pinboard website. But this API endpoint did the trick!
I’m going to be on the lookout for triangle plots that need to exist. 2x2 matrices are great. Venn diagrams are great. Bringing three dimensions adds the nuance that drives depth perception.
Maybe your CI isn’t working because one of the services you depend on got bought or ran out of money. You add a new dependency and find yourself needing to upgrade your compiler. Another package you depend on is deprecated, and doesn’t work with the latest version of the compiler.
Some projects are different. You work alone, make some changes when you’re inspired, and then don’t touch it again for another year, or two, or three. You can’t run something like that as a warm-blooded project. There’s not enough activity to keep the temperature up.
This dichotomy of “warm-blooded software” and “cold-blooded software” is really helpful. It invokes feelings of “choose the right tool for the job”, but on an entirely different horizon. Production applications with paying customers can carry the costs of being a warm-blooded project. A personal blog might be more suited to being a cold-blooded project.
Today I learned about structuredClone in JavaScript. Very cool to see the progress in this language over the years. What was implemented as a best attempt in user land is now a native capability that supports all the data structures, circular dependencies, et. al.
Forced mobility of this kind is an emerging theme of the 21st century, in contrast to the discretionary mobility that defined the 20th, which began with the advent of the automobile and ended with supersonic air travel—a century characterized by technology expanding the physical scope of life, propelling us faster and faster, juicing us up with kinetic energy until we seemed to overdose on it, a moment perhaps symbolized by the weaponization of airplanes on 9/11.
In a 2019 newsletter, I quoted Alain Bertaud’s observation that “the new proletariat in places like the United States no longer consists of industrial workers, but rather people who are forced to commute for three or more hours a day because they can’t live near their jobs” The same motorized transport that was once pure luxury is now as likely to be a curse.
Luxuries becoming curses is something I’m on the lookout for. Access to information. The immediacy of cellular communication. Working from home. Doordash.
One of my favorite acronyms and one of the first I heard was for the word SOBER: Son Of a Bitch, Everything’s Real.
I haven’t mentioned the improvements in my relationships because they are so close that all I can really say is, life is all about relationship—to everything and everyone.
Custom Elements seem designed for providing (wait for it) custom elements (markup), while framework components (old and new) put more focus on combining all the elements into reusable templates.
This distinction between “custom elements” and “reusable templates” is helpful. Many (not all) framework component authors don’t believe their consumers can be trusted with the raw materials. So they provide a templating language instead of composable pieces.
The auto-register idea towards the end of the post is compelling. If quickly defining templates with slots is what you need.
I love seeing a desktop progressive web application that just works. A Great little utility. And greater inspiration for what can be achieved by going with the grain of the web these days.
The mix of status quo bias, organizational inertia, satisficing, risk aversion, and incrementalism is a recipe for change aversion. And everything is OK until it isn’t (at which point you have zero adaptive capabilities and can’t weather the storm).
The Henry Ford quote is so well known in product development that I don’t need to to quote it here.
“faster” wasn’t the selling point of cars over horses. Speed wasn’t the problem. Spending huge amounts of money, time, and space on keeping horses alive and dealing with the literal horse shit was the problem.
Those original problems are so far removed from modern day. It’s not intuitive to imagine the problems I’ve never had to solve. It’s intuitive to substitue my modern problem of speed over everything.
TL;DR: Henry Ford did not say “If I had asked people what they wanted, they would have said faster horses”. He pretty much said the exact opposite.
Listen to people. Get their point of view. Discover their problems.
I mean a much more general notion of “ability to absorb or respond to change” – change of all sorts, including both bugs or failures, but also change in product needs, change in the market, change in the organization or team composition, whatever.
The true competitive advantage is being able to adapt to changing conditions.
A system with no slack is efficient as long it works, but brittle and will break down quickly in the presence of any changes to its usual operating modes.
When we accuse a system of being wasteful and inefficient, it’s worth pausing to ask what that “waste” may be buying. When we set out to optimize a system, pause to understand where the joints and flexibility in the current system are, and which ones are vital, and to do our best to preserve those. When we set metrics or goals for a system or a team or an organization that ask for efficiency, let us be aware that, absent countervailing pressures, we are probably also asking for the system to become more brittle and fragile, too.
“Become more fragile” is not something I would wish on any team. This is helpful framing.
publishing conglomerates don’t care about readers; they only care about customers. If they had their way reading would be 100% digital, because they continue to own and have complete control over digital books, which cannot therefore be sold or given to others. They are the enemies of circulation in all its forms, and circulation is the lifeblood of reading.
Circulation is a word worth dwelling on. Even at rest, there is constant circulation of certain resources.
For decades, scientific studies suggested moderate drinking was better for most people’s health than not drinking at all, and could even help them live longer.
A new analysis of more than 40 years of research has concluded that many of those studies were flawed and that the opposite is true.
What I’ve learned since, mostly through designing thoughtful processes that nonetheless failed, is that good process is a deliberate tradeoff between quality and overhead.
This reads like the managerial manifestation of “do you want more boilerplate or more magic [in your codebase]?” Nobody likes having more overhead…but nobody likes defaulting to uncertainty to handle routine situations, either. Knowing that the tradeoff must be made made feels like the smallest increment of progress.
The technologies that most empower humanity almost always produce a shadow ledger of pain. The steam engine unleashed the industrial revolution and brutally shortened life spans. Nuclear technology can power energy reactors or atomic bombs. The internet makes us productive and unproductive, delighted and miserable, informed and deluded. Like the future of everything else, the future of work will be, above all, messy.
There is no silver bullet. Every benefit has associated cost(s).
I try to have the things in my life — particularly books, media, and software — be as high quality as possible, because I enjoy having a nice life where things work and I am surrounded by beauty. Seeing people transfixed by a machine that can generate massive amounts of mediocrity is baffling to me.
The home is no longer seen as a space of personal expression or comfort, or as the backdrop of everyday life, but primarily as an investment and as an asset—meaning that enforcing one’s aesthetics is a financially detrimental decision. Those with the capital to become homeowners (already a diminishing segment of the public) conceive of their houses as being for selling before they even live a day in them.
Curating our personal space for hypothetical mass appeal is dumb and I want to be done with it.
I like having a mix of bullish and bearish thoughts about ChatGPT and large language models. This critique is worth the time.
[ChatGPT] wants to incrementally bring us to the conclusion that “overreliance” is actually convenience, the classic affective alibi for all forms of imposed automation: Why would you want to bother with the effort of thinking? Where is the edge in that? Why struggle internally with how to express yourself when you can instantly produce results? Why struggle to find new kinds of consensus with other people when all the collaboration we need is already built into and guaranteed by the model? What’s more robotic than doing what society tells you to do and being part of a group?
A prediction engine will flatten the discourse toward acceptable mediocrity.
Convenience has also long served as a way to repackage isolation as a treat.
Geesh. Individual microwave meals come to mind on a completely different horizon of technological advancement. How convenient it is to dine alone in perpetuity.
I’ve always wanted to be one of those kids in my computer science classes that routed all traffic through an SSH tunnel. This is an approach I can keep up with.
A to-do list isn’t a catch all. It’s not a list of tasks that could be done. It’s a ruthlessly prioritized list of tasks that must be done.
Each and every item on a to-do list must earn its spot. If a new one is to be added it must at least be better than the bottom item on the list.
A set of criteria I’m apt to adopt. I’m great at the capture step of Getting Things Done methodology. The act of capturing is not enough proof of worth. Catch and release is an available strategy.
of course people think we’re in a computer simulation. We always conceive of our minds as a dominant technology of our moment.
This historical trend is a new insight for me. How does the availability of a metaphor shape our mind’s relationship with our bodies? Does reaching for virtual private servers instead of managing racks of hardware cause a devaluation in the embodied experience? Are there trends of (un)health that correlate with hardware choices? Does using Docker cause a person to have a more compartmentalized form of attachment?
There’s a lot of nuggets of truth in this post. Worth the read if you’re into (engineering) organizational leadership & health.
The reason most written strategies don’t apply is because they’re actually visions of how things could ideally work, rather than accurate descriptions of how things work today. This means they don’t help you plot a course through today’s challenges to the desired state.
I’ve been encountering this in multiple spheres. Changes in habits are necessary as an organizations grow. Changes in individual habits are slow. Incremental adaptations are the basis of transformation on all horizons. Writing things down should be mostly an act of documentation. Maybe 5% of a document should be testing out a mutation that you’d like to be true.
Once you’ve documented them, discussions will happen more frequently, which will create a persistent pull towards improvement. It’s better to go slowly than to avoid starting altogether.
This also matches my experience. Action begets action. Documentation unearths differences. The key is making sure everyone understands that mutual understanding and shared clarity is the goal. Most documents are editable. Most decisions are reverisble. And most decisions are small bets. One foot in front of the other makes for a nice walk in the park.
Authenticity concerns aside, a powerful reason to NOT use ChatGPT to write stuff on your behalf is that it will prevent you from thinking.
Every time I write to think I’m happy with how I spent my time. The anecdotes are true. Writing (in english) before writing (in code) produces better solutions. And clearer scopes for dividing up the problem.
A blog post from the author of The Psychology of Money. Providing a fly-by view of some attitudes that emerge. Particularly of those who are entrenched in their habits.
I think we’ve lost the idea that there is such a thing as professionalism, but I think we need to bring that back.
This entire article is helpful. Some companies need to inject more empathy into their culture. Others need to quit calling a business a family and bring back the idea of professionalism.
The title sums it up. What a helplful bit of advice for keeping momentum moving forward. Uncertainty is a constant. Waiting for a solution that completely obliterates it stalls progress. Aim for small safe moves instead.
This is the best personal website I’ve encountered in a while. Bespoke style on every page at a manageable scale. Don’t be surprised if I end up doing this soon.
The thing about rules and policies is they become very hard to fix once they are put in place. Both the people who put them in place and the people whose jobs it is to exercise them become highly motivated advocates of the policies. Even if the policies originally made sense, they become very hard to change. When you try to change something but can’t, you start becoming a tenant and stop being an owner.
All we get to control are our own actions and intentions. Consider those carefully. Then let others be free from your expectations about how they ought to feel about that.
Using single file applications to demonstrate core ideas or reproduce edge case bugs is an invaluable tool. Greg provided a nice little write-up about how to do it.
in most cases, this kind of perfectionism is holding me back.
Marco hits the nail on the head with this one. The goal of blogging is to share ideas and continually learn. If you wait for 100% certainty and the feelings of authority, nothing will ever be written.
practice is a commitment to a process, not a predetermined outcome. And the outcome was not what I predicted.
Viewing the future fatalistically isn’t helpful. Prenteding you can trol the entire outcome is equally helpful. But the insistence on nudging, influencing, and practicing is a nice balance between the two, setting realistic expectations.
Serving as a kind of midwife to change is a magical experience. The opportunities I’ve had to build close and trusting relationships with people, both my reports and others—when I’ve been able to listen deeply, sit with someone through big feelings, or ask open questions and discover the insight that bubbles up—have been the most rewarding parts of my career. The times when I’ve missed the chance to do that represent my greatest regrets.
The analogy of midwifery is perfect. Supporting others as new features are brought into the world. I think this emphasis on coaching resonates with me.
Here’s how to stop being so darn precious about your blogging: The third time you use an idea in a conversation, you have to blog about it.
A great rule of thumb that I’d like to adopt. And to extend the analogy—there is no use in trying to go back to bat on old ideas that have struck out. They’ll bubble back up if they’re truly enduring, and you’ll get another swing at it.
Everyone should learn to cook. Everyone should learn to code. Not every cook aspires to be a restauranteur. Some just want to host good parties for their families and friends. You can take the same approach to coding.
I feel like in our modern era there is an over-fixation on engagement and being in the moment
This is the first time I’ve hear of “in-the-moment”’ism called into question. He goes on to find a quote positing this position from the early days of computer interaction in 1993.
But design work is so much healthier/better when you stop telling yourself that you’re changing lives. Websites can just be…websites! And your front end framework or side project doesn’t need to reshape human civilization for it to be worth while.
Once you relieve yourself of that pressure it’s so much easier to be happy and to do good, useful work.
Once heard, this idea seems so obvious that it’s painful. Have candidate read code instead of writing code. Most of the job is reading things that have already been written, not writing new things. I like it.
The problem is that certain kinds of stuff simply attract more stuff. The home is an obvious one: It craves sofas, sweaters, buffet cabinets, chandeliers. Computers are another; they grow USB tendrils. Smartphones beget earbuds, cloud backups, and music service subscriptions. I am jealous of the people who make it work with an Eames chair, a fancy ottoman, some nice art books, and multigenerational inherited wealth.
The supply chain is fractal: Zoom in on your stuff and there’s more stuff, ad infinitum.
Someone smart said to me that “Teams are Immutable”, so they would contend that if you add or take away one member you essentially have a whole new team because the dynamics and skills within the team are different. So how can you convey that idea that the team is significantly different at different stages in time?
Immutability as the backing data structures for teams is a super compelling mental model. People intuit this during every transition. “This is going to change the team”…the language of mutability. It feels primed for loss, and slightly hopeful for improvemement. Changing the mental model to “this is a fork of the team” seems to mitigate the feelings of loss in my mind.
The idea that having a better future is mostly about building personal wealth puts the onus on personal responsibility instead of a system that is pitted against entire communities. Everyone deserves to live a great life. And to live in a system that supports them.
I appreciate Ben’s thoughts often. This one in particular stuck out.
The reason we talk so much about authenticity now is because authenticity is no longer available to us. At best, we simulate authenticity: we imbue our deep fakeness with the qualities that people associate with the authentic. We assemble a self that fits the pattern of authenticity, and the ever-present audience applauds the pattern as “authentic.” The likes roll in, the views accumulate. Our production is validated. If we’re lucky, we rise to the level of influencer. What is an influencer but the perfection of the deep-fake self?
Economy as religion is an idea I’ve been tugging on. Especially when reading Debt: The First 5000 Years. Matt Webb expands on this idea much more eloquently than I have.
Immediately after every lecture, meeting, or any significant experience, take 30 seconds — no more, no less — to write down the most important points. If you always do just this, said his grandfather, and even if you only do this, with no other revision, you will be okay.
Eleventy doesn’t have any processing for styles or scripts out of the box. Which is kind of a feature when you’re looking for a non-prescriptive tool. This post was helpful in creating a very simple setup for compiling sass, and getting it into the page.
Whatever you’re doing, a sense of superiority will make you worse at it. Humility, on the other hand, will make you better.
The moment you think you’ve got it all figured out, your progress stops. Instead, continue to advance and improve by reminding yourself how much more there will always be to discover.
Confidence is positive and empowering, but arrogance is deadly. Be confident, but not at the expense of your respect for others.
Don’t burn up all your energy proving how great you are. Invest your time and energy being thoughtful and helpful.
See the victories not as proof of your supremacy, but as opportunities to offer more value to life. See the defeats not as personal affronts, but as chances to learn and grow stronger.
Take care not to waste your time in delusions of grandeur. Embrace the power of confident humility, and live well.
An article that delivers on its title. Really helpful to put some terms and definitions around the parts of a media query that are relied on every day.
I’ve recently been jumping back into the world of CSS development. I’m so thankful for the invention of CSS variables, and this article is a great place to get familiarized with them.
Macaroons, like cookies, are a form of bearer credential. Unlike opaque tokens, macaroons embed caveats that define specific authorization requirements for the target service, the service that issued the root macaroon and which is capable of verifying the integrity of macaroons it recieves.
If it means I can avoid JavaScript Web Tokens, I’m interested in exploring further.
Responsive HTML5 and CSS3 templates released under the The Creative Commons Attribution 3.0 License. If you wanna ditch the license, it’s only $19 at pixelarity.com.
For starters, I love the domain name boringrails.com. This tutorial delivers on the title of building some highly dynamic interaction with a few JavaScript sprinkles.
Self-billed as The Modern Monolith. My read is that it’s a protocol for how to structure your ajax interactions to have predictable re-rendering when receiving a response.
A collection of composable behaviors for your Stimulus Controllers. The spirit of this effort is to bring the reusability of React hooks to Stimulusjs. Time will tell if the idea can span the paradigm differences.
Illegibility comes from complexity without clarity.
The new methods were invented to manage a level of complexity that is completely foreign to me and my work. It was easy to back away from most of this new stuff when I realized I have alternate ways of managing complexity. Instead of changing my tools or workflow, I change my design. It’s like designing a house so it’s easy to build, instead of setting up cranes typically used for skyscrapers.
Nintendo Switch price tracking and wishlist notifications
I started building something like this on AWS when I wanted to wait for Celeste to go back on sale. I’m so happy somebody else did it and I can delete those stale resources.
So when someone asks you for something, be it your time, thoughts, or effort, be skeptical and be French. Ask “why” and (mostly) say “no”. It’s good for you.
The most useful form of patience is persistence. Patience implies waiting for things to improve on their own. Persistence implies keeping your head down and continuing to work when things take longer than you expect.
CSS Tricks is at it again with a focused article on an API we take for granted every day. Data Attributes are still the best-in-class solution for laying behavior onto Plain Old HTML.
A very compelling idea for serving a Rack application on AWS Lambda. As long as the Ruby footprint is small enough, I think this could be a really nice deployment story!
I’ve long had this idea in the back of my mind. It’s nice to see it executed elsewhere, and establish a baseline for the usefulness of automated test on even “simple” projects.
An interesting idea for building on top of Stimulus, ActionController, and ActionCable to coordinate patterns of server-client communication. HTML-over-the-wire sounds good to me.
I’ve heard this parable in a variety of contexts, and no one seems to know the origin. At least this link provides a place where it’s written down succinctly.
definternal_request(path,params={})request_env=Rack::MockRequest.env_for(path,params: params.to_query).merge({'rack.session'=>session# remove if session is unavailable/undesired in request})# Returns: [ status, headers, body ]Rails.application.routes.call(request_env)end
This is the method I built on top of for building a static site generator in Rails.
The paradox of tolerance states that if a society is tolerant without limit, its ability to be tolerant is eventually seized or destroyed by the intolerant.
A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.
Create beautiful JavaScript charts with one line of Ruby. There’s many a Rails CRUD project where I can imagine having benefited from knowing about this library.
We are doing _____
Because we see the problem of _____
We know it’s a problem because _____
If we don’t fix it, we’ll see _____
We’ll know we’ve fixed it when we get _____
the rest of the conversation/project/doc goes SO much easier.
A compelling case for sticking to Ruby’s plain old Hash as much as possible. I’ve lived the pain of serialization errors in higher level of abstractions, so I’d vouch for sticking to low level primitives as much as possible when it comes to persistence.
I found this site because macOS Catalina transitioned the default shell from bash to zsh and I am always trying to embrace defaults. A lot of great information for becoming more useful in the macOS Terminal.
The biggest takeaway: don’t use ids unless absolutely necessary. Rely on the autogenerated, deterministic ids, and you get a bunch of behavior for free.
Daring Fireball offering commentary on the idea from Christopher McQuarrie. You can control the inputs, but not the outputs. Focus on consistently delivering inputs.
This appears to be a well thought out solution for fetching data in a post-hooks, pre-Suspense world. A lot of hand rolled patterns codified into consistent solutions seems worth a shake.
The word “feedback” encourages people to think about the past, not the future. Asking for “advice” instead triggers others to think specifically about what might help someone improve in the future.
Self-billed as a directory of direct links to delete your account from web services. It also provides useful information about the relative ease of deleting those accounts.
A video by Duck Duck Go making the case for privacy. Explicitly calls out Facebook and Google for their shady practices. Communicates the concerns in a way you can share with your non “tech” friends.
My dotcomrade Jeremy Ricketts linked to this post that will strike a nerve with a whole lot of folks, myself included. It’s not about screen time vs non screen time. It’s about consumption vs creativity.
Great piece for architecture introspection. Redis has established itself as rock-solidly-reliable in my experience, but there’s always user error to protect against!
Basecamp triples down on server rendered HTML with StimulusJS. Having built a similar pattern when transitioning away from batman.JS years ago, I really appreciate the refinement of the ideas here.
My only complaint about this project is that they didn’t name it Sprinkles. That would have been awesome.
A simple approach to busting asset caches on GitHub pages. It could stand to have a little more nuance for a highly trafficked site. But it gets the job done for now!
The article title says exactly what it is. There’s a lot of Immutable talk out there, but this long read is a good introduction if you’re going to pick only one.
It turns out that the “inheritance” of a parent’s constants by the child isn’t due to the parent/child relationship. It’s lexical. That means that it’s based on the structure of your code, not on the structure of the objects your code is building.
Andre Staltz ask this question at JSConf. Exploring that question introduces some very interesting ideas about functional programming, and how we can model user/computer interactions.