Results: 438
-
As if I've deliberately come back to this one day
2024-11-16 13:49
I just try to live every day as if I've deliberately come back to this one day, to enjoy it, as if it was the full final day of my extraordinary, ordinary life.[^curtis2013]
From About Time, a movie about a person, Tim, who learns that he can time travel and then the lessons he learns about living his life along the way. He initially tries to change everything to be perfect, but finds times where it's just not possible to achieve the outcomes he desires. There are many lessons in there about the value of cherishing your life and the people in it.
The final moral of the film is that we can live the perfect life without time travel if we choose to interact with the world in the right way. The writer of the film, Richard Curtis, suggests that the "right way" is to treat every moment, every day, as if it was a moment that you chose to come back to, to experience with the benefit of hindsight, and with the knowledge that you could never experience it again.
This rings true for me at least in a general sense. I think it lends itself towards a "mindful" "be present in the moment" philosophy towards life. It pushes us to shed our stress, our anxieties, our fears, and to take life as it comes. It pushes us to consider how we would act if we could never be in that moment again, or with the people in that moment again. After all, life is fleeting and it's true that we don't get to relive any of our moments.
-
The Final Edition of Embedded Muse
2024-10-22 01:01
After 27 years, The Embedded Muse, an awesome programming newsletter focused on embedded systems issued its 500th and final edition. Its editor Jack Ganssle recently retired and is winding the newsletter down as part of getting to full retirement. Fittingly, the final issue has some really nice reflections on industry, programming careers, and life.
It's always a little sad to see things like these wind down on the internet. In the age of the enshittification of the internet, I value places like The Embedded Muse, where real people publish real thoughts and insights for others to enjoy and learn from and that facilitate forming genuine human connections. Obviously, change is the only constant and Jack should take his well deserved retirement, but that doesn't mean I won't miss it.
-
Engineering Multi-classing
2024-10-20 11:10
There's a good analogy in there somewhere with engineering, product management, and people management as DnD multi-classing.
-
1BRC in rust in depth
2024-08-25 09:20
Just found a really awesome, super in-depth write-up of a high performance computing approach to the 1 billion row challenge using Rust. I'll probably try and tackle this myself sometime soon. I've been itching to get some experience with really hyper-optimized computing.
-
The abyss gazes back
2024-08-23 23:59
He who fights with monsters might take care lest he thereby become a monster. And if you gaze for long into an abyss, the abyss gazes also into you.[^nietzsche1886]
Firstly, we must not fall into the mindset or actions of the things we’re examining when studying evil, immorality, or even lesser undesirable things.
More abstractly, there’s a danger of being absorbed into the thing that you “gaze at.” This can apply to academia and learning for learning’s sake, where we lose sight of reality, purpose, or reason.
It also works to illustrate that merely observing something is not a totally detached process. It’s not possible to completely detach from the observed phenomenon. The mere act can change you and affect you in unintended or undesirable ways.
Lastly, it speaks to the dangers of romanticizing things that should not be: depression, abnegation, loneliness, and more. If I allow my mind to spend time gazing into depression for instance, I’ll be swallowed by it. 202408221304 Desolation tries to colonize you.
We can call the depression void-gazing. Everyone does it sometimes, but step two has to be wrenching your gaze away from the void and doing something. There's nothing in the void but more void and the curse[^suresh2024angry]
-
Have fun and be terrified
2024-08-22 20:21
Have fun and be terrified. I can do that.1
On quitting your job and striking out on your own, or more broadly, daring to do something and put your skin in the game #wip
-
Suresh, N. (2024, August 21). Quitting My Job For The Way Of Pain [Blog]. Ludicity. https://ludic.mataroa.blog/blog/quitting-my-job-for-the-way-of-pain/ ↩
-
-
Desolation tries to colonize you
2024-08-22 13:04
[W]hen you see beauty in desolation it changes something inside you. Desolation tries to colonize you.1
There’s a certain appeal to the abyss, but 202408232359 The abyss gazes back. We must be cautious of the allure of desolation and the ways that it can overtake our minds and souls like a slow creeping swamp fungus swallowing a landscape on the sea by the lighthouse.
-
VanderMeer, Jeff. Annihilation. First Edition. Southern Reach Trilogy 1. (pp. 6). New York: Farrar, Straus and Giroux, 2014. ↩
-
-
Ten thousand times the spider would rebuild
2024-08-22 12:54
Ten thousand times the web could be destroyed, and ten thousand times the spider would rebuild it. There was neither annoyance nor despair, nor any delight, just as it had been for a billion years.1
The spider knows nothing of humans; it knows nothing of why the things happen to it that do; it only has a need and drive to exist. Humans, in turn, may not be able to comprehend the ways of other advanced civilizations in the universe. We're different than bugs though because of our desire to understand, model, and perhaps change the universe around us.
This quote is interesting because it can be interpreted as a value judgement — even contradicting positive and negative judgements — of the spider. It can also be interpreted in a more Zen way where the presumption of judgement or need to understand should be negated.
-
Liu, C. (2016). The Dark Forest (1st ed., Vol. 1) (pp. 15). Tor Books. ↩
-
-
Go is not worth it
2024-08-22 09:39
I had to spend a lot of time recently — yet again — debugging weird edge case Go code in production. The person who wrote it had no idea how far off they were from writing something that behaved reliably and correctly. But they're also one of the people who I constantly hear proclaiming how easy it is to use Go, how simple it is, and how productive they are with it. To be fair, they're very productive at churning out bugs. But I'm tired of being on call for it.
This experience triggered me so hard, I almost wrote a whole blog post about how bad Go is. It constantly papers over real world complexity, has a whole arsenal of guns to shoot yourself with, and the people who don't realize that are the ones who love it and make my on-call shifts hell.
I hear the same arguments over and over about "simplicity" in the language that just don't hold up. I really don't understand if I'm just an absolute idiot or if there are loads of developers who don't realize that they're writing half-assed, buggy Go code while thinking it's "so easy and simple".
But honestly, I just couldn’t be bothered to write it all out. I'll never get through to those people. They'll have to learn it for themselves.
-
Willful ignorance of reality in organizations
2024-08-22 08:51
In organizations, there's a tendency for people at higher levels or in roles further removed from the "doing" of a project to be vague to the point of harm. Some (bad) managers want something done and want other people to deal with how that gets done or indeed whether or not it's even possible to do it.
[I]t boils down to a psychological distance from the fact that true reality exists, and that someone lower status has to handle it.[^suresh2024pain]
I see this frequently in the interactions between (bad) product managers and engineers. The PM has an idea or a requirement to build something that they don't inspect closely or take the time to understand the reality of that idea. They don't understand what it would take to build it, what it would feel like to use, or whether it's a good idea once faced with all the edge cases involved. The idea of doing all that work is either too challenging or demeaning to these bad actors and it ends up falling on the individual contributor who actually produces the work output to solve these problems.
I've alternatively called this "compression of reality" and "where the rubber meets the road" to show that engineers don't have the luxury to hand wave or be vague when writing code. They have to specify — in exacting detail! — how it all works.
-
Ownership
2024-08-18 22:08
Notes on the meaning, implementation, and outcomes of ownership of our work.
The global network of capital essentially functions to separate the workers from the means of production.
Philosophically
- 202403131332 Techno-bourgeoisie
- 202112291821 The things we own end up owning us
In Engineering
- 202407081040 If you can't cancel the project you're not the product owner
- 202408060133 Caution and perfectionism hurt progress
- 202312091511 There is no such thing as sacred code
- 202206171206 Delivery Performance vs Value Delivery
-
The conclusiveness of arguments requires rigor
2024-08-12 21:03
Rigor is required when formalizing and generalizing an argument. In order for the conclusion of the argument to be valid, the argument must be well structured, the assumptions must be valid, and the logic must be correct.
I immediately know that I have to pay attention to formal correctness when using the note, or that I have to pay attention to my premises (basic assumptions) so that the argument is not only valid (logically correct), but also conclusive (I can also rely on the truth of the conclusion). Arguments are constructs to transfer the truth of some statements (the basic assumptions) to another (the conclusion). I must therefore ensure that the basic assumptions are true (by means of further arguments and empirical evidence) and that the transfer of truth is correct.[^sascha2024]
In order to be good at this, we must practice formalization. If you capture an argument, formalize it to make it easier to understand. If you are capture a model, actively think through what aspects of reality it describes and how exactly the model relates these aspects to each other. Practicing formalization can be made easier if we use the skills and tools you already have. If you’re an engineer, you’re already an expert at representing problems, using models, and inferring causal chains. Let these skills shine in your notes.
-
The Story of Mel, a Real Programmer
2024-08-12 18:14
A recent article devoted to the *macho* side of programming made the bald and unvarnished statement: Real Programmers write in FORTRAN. Maybe they do now, in this decadent era of Lite beer, hand calculators, and "user-friendly" software but back in the Good Old Days, when the term "software" sounded funny and Real Computers were made out of drums and vacuum tubes, Real Programmers wrote in machine code. Not FORTRAN. Not RATFOR. Not, even, assembly language. Machine Code. Raw, unadorned, inscrutable hexadecimal numbers. Directly. Lest a whole new generation of programmers grow up in ignorance of this glorious past, I feel duty-bound to describe, as best I can through the generation gap, how a Real Programmer wrote code. I'll call him Mel, because that was his name. I first met Mel when I went to work for Royal McBee Computer Corp., a now-defunct subsidiary of the typewriter company. The firm manufactured the LGP-30, a small, cheap (by the standards of the day) drum-memory computer, and had just started to manufacture the RPC-4000, a much-improved, bigger, better, faster --- drum-memory computer. Cores cost too much, and weren't here to stay, anyway. (That's why you haven't heard of the company, [Continue reading](/notes/202408121814)
-
Only artists can appreciate art
2024-08-12 18:12
A particularly insightful quote from 202408121814 The Story of Mel, a Real Programmer concerns the intricacies and beauty of programming and the perception and recognition thereof.[^nather1983]
I have often felt that programming is an art form, whose real value can only be appreciated by another versed in the same arcane art; there are lovely gems and brilliant coups hidden from human view and admiration, sometimes forever, by the very nature of the process. — Ed Nather, The Story of Mel, a Real Programmer
I've always felt this to be true. It's hard to directly describe the exact nature of this phenomenon, but my gut tells me that it has to do with intuition. 202408021018 Intuition and instinct are implicit knowledge, which means that our intuition about what code is beautiful is really a deep subconscious judgement of its strengths and weaknesses. Still — beauty is subjective (is it? Aristotle, Kant etc. #thread) and perhaps some of this perception of the art of programming is simply personal, inscrutable, irrational preference.
More broadly, this would apply to other fields. In particular, I've heard mathematicians and physicists discuss the beauty and elegance of research findings in a similar way. After all, Hamming wrote a whole book about it: 202205092134 The Art of Doing Science and Engineering.
-
Caution and perfectionism hurt progress
2024-08-06 01:33
Being overly cautious or too much of a perfectionist will undoubtedly limit progress and potentially even destroy the ultimate outcome of a project as a whole. Being overly cautious can manifest in different ways:
- Having meetings about meetings. This shows that there are issues with how the organization runs that need to be addressed pre- or post-hoc in order for something to actually get done.
- Meetings to discuss how we should do something in order to get consensus before getting things done. This shows that contributors do not have the authority, responsibility, or capability to do things individually and have to justify, wait, and ask others to do their job.
- A lack of desire from contributors to be associated with a particular project or task. This shows that risk and reward are not appropriately balanced in your organization. If people don't want to be a part of a risky project, then they know that they don't have the authority or latitude to address the project correctly or perhaps know that they won't be rewarded for working hard and taking a risk on something that could hurt them.
- Requiring large chains of approval and sign-off. If many people need to see something in order for it to be approved, then the contributors and the teams responsible for making something don't really have the authority or empowerment to do the job they were asked to do (202407081040 If you can't cancel the project you're not the product owner). If people who are not intricately involved in the project day-to-day get more say than as a potential source of feedback, they are in the way of that project's success and the team will revert to caution and perfectionism in order to avoid re-work and disapprovals.
-
Intuition and instinct are implicit knowledge
2024-08-02 10:18
Intuition, or instinct, or gut-feel is actually implicit knowledge (202110231457 Tacit knowledge) of some process, phenomenon, system, etc. that we don't consciously, explicitly understand.
When we intuitively know a solution to a problem, or instinctively feel uneasy about something, what's really happening is that our conscious and unconscious mind has taken in a variety of signals and understood something that we didn't sit down and reason out.
This can be powerful in a skill based setting where decisions have to be made frequently, like sports. It can also help experts shed false starts and bad paths without wasting time on them.
I would argue that one of the key characteristics of becoming skillful or expert at something is getting to the point where you have intuitive understanding of how to do it. This intuition may be enumerable if one tried to sit down and think it through
-
The Private Library
Being a More or Less Compendious Disquisition on The History of the Architecture and Furnishing of the Domestic Bookroom
2024-07-28 12:42
The Private Library is the domestic bookroom: that quiet, book-wrapt space that guarantees its owner that there is at least one place in the world where it is possible to be happy. The history of its architecture and furnishing extends back almost to the beginning of history and forward toward a future that is in equal parts amazing and alarming.
All libraries are magical rooms. All their windows look out onto Faërie, and all their carpets can fly. […] Entering our library should feel like easing into a hot tub, strolling into a magic store, emerging into the orchestra pit, or entering a chamber of curiosities, the club, the circus, our cabin on an outbound yacht, the house an old friend. It is a setting forth and a coming back to center. [^byers2021] (pp. 1, 3)
A visitor standing before this instantiation of language must have felt the true, right sense of the numinous.[^byers2021] (pp. 14)
A private library is a place for rest and relaxation, but also contemplation and thought. It is a place for the individual to find respite and transport oneself to new worlds. In its purest form, a library is only a library if that is its sole purpose. A study or an office can have many of the qualities of a private library but it may not truly be one if it can’t provide the enveloping nature of a pure library.
-
Architecture as a form of procrastination
2024-07-18 10:26
Don't let architecting your application, library, or system prevent you from doing the actual work that needs to be done. It's better to have something working and shipped than to have it be perfect the first time.
Avoid architecture as a form of procrastination. [...] There's a lot of disguised procrastination in dev in general. Lots of working around the work, planning how to work, talking about the work, instead of actually working. And I know there's a balance to that because you want to think about what you're doing beforehand, before you do it, and have a good plan.1
202106221150 Procrastination is a complex subject with a range of causes and effects. Architectural 202109090909 Decision paralysis could mean that we need to just get something going in order to make progress and get a better feel for the problem space (throw one away #thread).
Knowing when to architect and plan ahead vs just get moving is something that comes with experience, and can be a good indicator of people who can operate at the 202206112236 Senior engineer or 202206112233 Staff-plus engineer level.
-
Otwell, T., & Stauffer, M. (2024, June 24). The Laravel Podcast | Listener Q&A: ChatGPT, Laravel Hangups & Best Practices, API Docs, Inertia Next Steps (S6:E13) [Broadcast]. https://laravelpodcast.com/episodes/listener-q-a-chatgpt-laravel-hangups-best-practices-api-docs-inertia-next-steps ↩
-
-
If you can't cancel the project you're not the product owner
2024-07-08 10:40
If you can’t cancel the project, you’re not the product owner.1
A simple enough statement but deep nonetheless. It cuts at the heart of whether or not you have real ownership over a product — or in the general sense anything. Only someone who actually owns something can make final decisions like these.
Some more questions that distill ownership and autonomy in similar areas1 are:
- Circle who can buy pizza on the org chart
- Who needs to be consulted to install or uninstall something in the office space
A lack of this kind of ownership commonly results in overly cautious behaviors and remember that 202408060133 Caution and perfectionism hurt progress.
-
Suresh, N. (2024, April 22). Jokes for Jokers [Broadcast]. https://open.spotify.com/show/57i8sYVqxG4i3NvBniLfhv ↩ ↩2
-
Freedom and Responsibility
2024-07-01 09:52
People must have the freedom to act and the responsibility to act wisely. Without the freedom to act, responsibility is pointless; the system decides what actions can be taken and the responsibility or lack thereof for those actions is vested in the system, not the individual. Without the responsibility to act wisely, the freedom to act is risky and unfair; consequences for those free actions have to be upheld, both positive and negative; accountability for outcomes and whether the act was taken with proper consideration lie on the free person.
Note that this doesn't mean that we all have to be risk-averse. Just because you are responsible for your actions, doesn't mean we have to exact painful consequences. We can create a culture that gives freedom, demands responsibility in return, and then is benevolent with punishment for bad outcomes. If the action was taken in good faith — responsibly — and didn't work out, we can accept that as one of the tradeoffs for the other benefits we gain from FNR. If someone makes an honest mistake, they don't need to be shamed, hurt, or expelled. In fact, this honesty and transparency about outcomes combined with the lenient forgiveness of failure is what drives true freedom to do, build, create, innovate, and achieve.
-
Essential XP Emergent Design
2024-06-27 12:56
An article we read as a group for a discussion in our engineering organization. The author explicitly offered all his conclusions as fact "without much justification" noting that "at some later time, perhaps I’ll try to justify this view."[^jeffries2001] I did not agree with what little it did contain.
There are many well-known modeling and design techniques that can be used to bring about a "good design". An incremental process may limit the applicability of these techniques, which are most powerful when applied and committed to "up front". Test everything; eliminate duplication; express all ideas; minimize entities: These few simple rules, applied locally, can help a high quality global design to emerge.[^jeffries2001]
Ron asserts that good design is highly modular, consisting of separate components (typically objects) which are highly cohesive, loosely coupled, and given expressive names that enable us to grasp quickly what the modules mean and why they are there.[^jeffries2001] This statement is the most reasonable of the article. I agree with it, but I find it to be vague to the point of being unhelpful. For example, I'd rather be the right temperature than very hot or cold, but that doesn't offer much as to the nature of "the right temperature". Being the right temperature is tautological. His design principles aren't as self-evident, but they can be interpreted in almost any way to fit or reject a design as "good".
-
The Myth of Sisyphus
2024-06-13 17:15
The fundamental subject of The Myth of Sisyphus is this: it is legitimate and necessary to wonder whether life has a meaning; therefore it is legitimate to meet the problem of suicide face to face. The answer, underlying and appearing through the paradoxes which cover it, is this: even one does not believe in God, suicide is not legitimate. Written fifteen years ago, in 1940, amid the French and European disaster, this book declares that even within the limits of nihilism it is possible to find the means to proceed beyond nihilism.
– Albert Camus, Paris, March 19551
-
Camus, Albert, and Justin O’Brien. The Myth of Sisyphus. Second Vintage international edition. New York: Vintage International : Vintage Books, a division of Penguin Random House LLC, 2018. ↩
-
-
Pratt parsing
2024-05-17 09:38
Pratt parsing (alternatively Top Down Operator Precedence or Precendence Climbing) is a method for writing language parsers.
Resources:
- YouTube Discussion of the method
- original Pratt paper, rehosted
- An ALGOL 60 Translator for the X1
- The Shunting Yard Algorithm
- Parsing expressions by precedence climbing
- Crafting Interpreters
- Pratt Parsers: Expression Parsing Made Easy
- Writing An Interpreter in Go
- Simple but Powerful Pratt Parsing
references
-
Mobile Content Width
2024-05-05 14:58
I’d argue that there’s a greater chance that a website on mobile will have the wrong max width than the right one. These content overflows change scrolling — normally a 1 dimensional action up and down – into a fiddly, annoying 2D action.
A small amount of overflow can be fine because a lot of devices allow you to use the "zoom out" gesture to "lock" the screen to the full width. But that doesn't always work, and if the full width is very wide, the actual content becomes unreadably small.
It’s not that hard to do this correctly!
Scribbling furiously on my todo list to check every page in my site for this error to not look like a hypocrite 😬
-
Timeout Killer
2024-05-05 12:51
Timeouts and Cancellations for Humans
Nice article on the difficulties of actually doing timeouts correctly. And an idea for a malicious endpoint that returns 1 byte every second or so for the same request to keep poorly coded timeouts from triggering.
-
Joe the Axolotl, Clever Closet, & Demonic Robots
2024-05-03 15:30
- Anyone can start a girls who code club and if you have enough people sign up, you can get free resources like lessons, notebooks etc.
- Dept of Ed standards alignment
- 7x more likely to go into STEM than national avg
- She led the Otterbein one, it does something a little different than the provided web lessons
- Build things “clever closet” and others (had never seen clueless so they thought it was original which is cool)
- Pololu 3 Pi Robots pre-built 4 AAA batteries, hokey pokey robot, Rube Goldberg machines, etc
- LEGO Robots now, loved those
- Game dev
gwcotterbein@gmail.com afholcomb72@gmail.com @gwcotterbein insta
-
Minimum Viable Replacement
2024-05-03 14:00
About 100x as long as needed and poorly written. Did not even introduce a “framework” in the end, literally just set up the problem and ended with GLWTS. But the slides are good.
The problem: Replacing an existing system is the exact opposite of an MVP
If you’re trying to retire a legacy platform — instead of having the luxury of just solving very specific customer segment needs — you need to solve the needs for every customer segment using your software! [...] Instead of trying to solve the needs of just one small segment, you now have to deliver 20 years worth of software development for thousands of customers across multiple countries and segments to retire the system [...] Consequently, we need to prove that the new technology matches or exceeds the value of the old technology for our existing customer base.
Retiring systems takes longer and costs more than your executives want to hear
Stir Trek Talk
- Charlie Brown kicking the ball, but yet we think it’ll work this time
- Turns into deadline driven development
- Problem is that expectations are out of alignment with reality
- Ignore laggards and edge cases but laggards are biggest customers and edge cases are your critical risks
-
Understanding How Your CPU Thinks
2024-05-03 11:00
- Two most important skills for a developer
- Break problems into smaller problems
- Communication (with people and with the computer)
- Talked about pipelining
- increases µops throughput
- think about doing multiple loads of laundry in washer and dryer
- f# nice
- this point was a little off from my understanding of schedulers and the term "pipelining" specifically.
- Caches and different memory locations: registers, L1, L2, L3, RAM, DISK etc.
- Don't use 0V–1.3V and 3.7V-6.3V anymore for memory and heat efficiency. They've shrunk those voltages and tolerances.
- Got into machine code and micro-ops for assembly
- Importantly, the op and params and everything are all encoded.
- This is why ARM ops have variable bit sized parameters. They're all encoded into 32 bit instructions, so the specifics of the encoded instructions/params might change the available bits for parameter store.
- Showed the circuit for a 4 bit adder, arbitrarily chainable for higher bits, 32/64.
- youtube videos:
- domino computing by standupmaths
- water computer steve mould
- how to do multiplication
- f# "Freestylecoding.Math" bit math lib
- interesting idea of returning division with remainder as tuple with
/%
operator
- youtube videos:
- Two most important skills for a developer
-
Stir Trek 2024
2024-04-30 10:34
Selected Sessions
time room rank speaker track session 08:45 could not attend -
Masonry Layout CSS
2024-04-23 21:22
Help us invent masonry layouts for css grid level 3
I remember getting this working in ~2013 with flexbox columns, but I had to do a complicated interleaving operation to make the sequence correct from left to right then top to bottom. Cool to see this happening finally.
-
Hell yeah NASA
2024-04-23 21:20
NASA engineers never fail to amaze as they get Voyager 1 sending data again from interstellar space.
-
Lullaby for a Stormy Night
2024-03-13 13:14
Little child, be not afraid Though rain pounds harshly against the glass Like an unwanted stranger, there is no danger I am here tonight Little child, be not afraid Though thunder explodes and lightning flash Illuminates your tear-stained face I am here tonight And someday you'll know That nature is so The same rain that draws you near me Falls on rivers and land On forests and sand Makes the beautiful world that you'll see In the morning Little child, be not afraid Though storm clouds mask your beloved moon And its candlelight beams, still keep pleasant dreams I am here tonight Little child, be not afraid Though wind makes creatures of our trees And their branches to hands, they're not real, understand And I am here tonight And someday you'll know That nature is so The same rain that draws you near me Falls on rivers and land On forests and sand Makes the beautiful world that you'll see In the morning For you know, once even I was a Little child, and I was afraid But a gentle someone always came To dry all my tears, trade sweet sleep for fears And to give a kiss goodnight Well now I am grown And these years have shown [Continue reading](/notes/202403131314)
-
The tragedy of the commons
2024-02-25 14:49
In a commons system there is a resource that is shared (e.g. a shared pasture for cattle grazing). For these systems to be tragedy, the shared resource must be erodible (i.e. the further it's degraded, the harder it is to regenerate the resource) and the users of that resource must be incentivized to use the resource even in the face of the erosion (e.g. immigrants may hurry or increase in numbers if they hear immigration laws are going to become tougher).1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 116–121). Chelsea Green Pub. ↩
-
-
Policy-resistant systems
2024-02-25 14:34
A policy-resistant system is one where fixes don't produce changes. They exhibit balancing loops that make their undesirable behavior resilient to changes.
Imagine a system that has a strong balancing loop that produces some outcome that's continually being injected with some imbalance. It doesn't matter that there's something constantly pushing the system in a direction, the balancing loop overcomes that push and keeps the behavior consistent. Many governmental policy changes are examples of fixes for resilient systems that will simply result in the same outcomes due to the inherent structure of the system.[^meadows2011]
Many of these systems arise when the goals of the subsystems are different and incongruous with each other. In some cases, the effect of one subsystem pulling towards a goal causes the other subsystem to redouble its efforts to pull back. For instance, the end of prohibition drastically decreased the crime and chaos of the underground, illegal alcohol culture that had been developed during its enactment. Zealots often run afoul of this type of thinking: creating stringent rules by force causes the opposite outcome by intensifying the resentment and backlash from otherwise uninterested parties.
-
Problem-generating systems have to be restructured to be fixed
2024-02-25 14:30
Problem-generating systems have to be completely restructured in order to be fixed. This is because these problem generating structures are resilient and self-organizing for the exact problematic behavior they exhibit (202402201202 Resilient systems, 202402201203 Self-organizing systems). No amount of policy changes, lever pulling, tinkering at the margins, or hope will produce a different system. Only a total restructuring of the system can produce a different behavior.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 111–112). Chelsea Green Pub. ↩
-
-
Reality has bounded rationality
2024-02-25 12:32
The rationality of actors and systems in the real world is bounded. People are not perfectly rational consumers in an economy. Organisms do things that are irrational for seemingly no reason and sometimes to their own detriment (e.g. the lumber industry deforests their environment unsustainably until their company fails).
The economist Herbert Simon coined the phrase "bounded rationality" for this. His definition of bounded rationality is that most often, people act rationally with the information they have on hand. The bounding of that rationality comes from inadequate or misleading information — such that their rational choice is actually an irrational one given the true information — or simply a "good enough" need to only sufficiently satisfy ourselves instead of rationally optimize everything.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 105–106). Chelsea Green Pub. ↩
-
-
Delays are ubiquitous
2024-02-25 12:24
In accordance with 202402251213 Hofstadter's Law, delays are everywhere. In 202203210833 Systems thinking, all stocks are a form of delay because 202402171455 Feedback can only affect future behavior. When modeling a system it is important to remember that 202203210832 Models are necessarily incomplete including the element of time. We may see a neat system of supply and demand, but even rational actors will exhibit "irrational" behavior — i.e. behavior that they would not take without delayed information (202402251232 Reality has bounded rationality) — in the presence of feedback delays.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 10. Chelsea Green Pub. ↩
-
-
Hofstadter's Law
2024-02-25 12:13
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.1
A self-referential adage about how 202402251224 Delays are ubiquitous. It has continued to gain popularity in programming culture in particular connection to The Mythical Man-Month and the concept of estimating how long any sufficiently complex task will take to complete.
In Gödel, Escher, Bach, Hofstadter talks about the difficulty in creating a chess engine that could beat the top grandmasters. For years, the proponents of engines claimed that they would be able to win at the highest levels within the next few years. Such predictions always came to pass, then doubled or more and the goal was not achieved. Compare this to the AI bulls today. There are claims that artificial general intelligence is upon us and we can expect that breakthrough any day now. More than likely it will take a long time to ever achieve (if it's even truly possible technically or philosophically #thread)
Why is it so difficult for us to accurately predict things like this? #thread
-
Hofstadter, D. R. (20). Gödel, Escher, Bach: An eternal golden braid (20th-anniversary ed.) (pp. 152). Basic Books. ↩
-
-
Limiting factors can change
2024-02-25 12:02
The 202402251159 Limiting factor of a system can change over time. Take the example where adding potassium won't help crops if they don't have enough nitrogen. Now imagine that we add sufficient nitrogen to the soil, it's possible that the limiting factor might be the potassium or something else entirely like water or sunlight.
This can cause a "whack-a-mole" style expansion problem for optimizing a system. It's even possible that the shifts in the limiting factors could be at cross purpose with each other so that the result of helping one hurts the other.
In a business, it's important to remember this concept. Adding more salespeople to sell a product that you can't build fast enough won't help.
In engineering, it's an interesting analogy for quality, speed, and productivity over the long run. The limiting factor may not be quality now, but it could be in the future. Whether it's acceptable to trade that depends on many factors including the probability of making it to that future without failing.
-
Limiting factor
2024-02-25 11:59
There always will be limits to growth. They can be self-imposed. If they aren't, they will be system-imposed.1
A limiting factor in a system is the one element that is most important to the overall behavior of the system.1 For instance, when growing crops if there isn't enough potassium in the soil, your crops won't grow no matter how much nitrogen is available. The next logical conclusion here is that 202402251202 Limiting factors can change.
-
Boundaries don't exist in the real world
2024-02-24 18:23
There are no separate systems. The world is a continuum. Where to draw a boundary around a system depends on the purpose of the discussion — the questions we want to ask.1
When you draw boundaries too narrowly, the system surprises you because it doesn't sufficiently account for the reality of the situation. Conversely, when you draw boundaries too broadly, you fail to find something sufficiently descriptive and useful for reasoning about a system. The lesson here is that boundaries are a useful fabrication whose delineation amounts to an art rather than a science.1
-
Reality is often nonlinear
2024-02-24 18:21
Our minds are very capable of rationalizing about cause and effect in a direct way. These direct (linear) relationships are often too simplistic to describe the reality of a system (202203210830 When your model and reality conflict, reality is always right). We simply need to remember that 202402241823 Boundaries don't exist in the real world and that 202203210832 Models are necessarily incomplete. These simplifications that are necessary, but always cast doubt on whether we're describing the true nature of a system or rather describing a useful mental model for thinking about an underlying reality.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 91–93). Chelsea Green Pub. ↩
-
-
Hierarchies enable iterative progress
2024-02-24 17:22
Hierarchies — in particular biological hierarchies — enable iterative progress. They do this by allowing continual development of sub-assemblies that are stable on their own to combine with other sub-assemblies into a higher level assembly. If something is wrong with one sub-assembly, then it can be discarded without discarding the whole high level assembly. For example, molecules combine into biological components, into cells, up into organs, systems, and a whole human. Each cell is dispensable and replaceable without needing to discard the human. Growth proceeds simply one cell at a time iteratively from a single cell into the uncountable complexity of life.1
Consider also how 202401291458 The purpose of the parts may not be the purpose of the whole and how this 202104291540 Emergence comes about from the parts.
This property is somewhat contrasted with (but maybe is more a subset of) things that are a 202109060904 Heterarchy.
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp.82–83). Chelsea Green Pub. ↩
-
-
Stability and resilience are not the same thing
2024-02-24 16:58
Stability and resilience are not the same thing. Just because a system is stable, doesn't mean it can recover from a disturbance (which is the defining characteristic of 202402201202 Resilient systems).1
For example, imagine a system that has an equilibrium on a fine edge where any change will cause it to rapidly diverge from the equilibrium. Even though it's stable on that "ridge line", it is not resilient to disturbance. A system that is stable and not resilient may follow the 202207272000 Garbage in, garbage out rule where 202207271958 Stability or instability dominates a system.
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 76–78). Chelsea Green Pub. ↩
-
-
A renewable stock constrained by another renewable stock
2024-02-24 15:50
One example of a system with a renewable stock that's constrained by another renewable stock is the fishing industry. Similar to the oil economy example of 202402241536 A renewable stock constrained by a non-renewable stock, the capital and resource are constrained in the same ways but the resource can be replenished. The competing rates of these different loops can cause drastically different behaviors of the end system ranging from extinction to exponential population growth.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 60). Chelsea Green Pub. ↩
-
-
Physical systems cannot grow infinitely
2024-02-24 15:45
There always will be limits to growth. They can be self-imposed. If they aren't, they will be system-imposed.1
In all physical systems, there must be at least one growth reinforcing feedback loop and one balancing loop. There are no physical systems that can grow infinitely. Eventually there will be a limit to the space, availability, or possibility of more of that thing.1
-
A renewable stock constrained by a non-renewable stock
2024-02-24 15:36
An interesting two-stock system arises when there is a renewable stock constrained by a non-renewable stock. This system differs from one-stock systems because it is constrained by its surroundings. An example of this type of system is an oil economy. The non-renewable stock of oil, its production, and its long-term availability constrains the stock of capital in the industry. Investment — a renewable source of capital — and oil extraction and sales increase the capital of the oil industry, but the non-renewable availability will eventually limit the growth of that capital to the point where no investment will happen and the industry will dry up when oil is gone.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 60). Chelsea Green Pub. ↩
-
-
One stock with delays
2024-02-24 15:30
Business inventories are examples of single stock systems with delays. The inflows to the system are the supply of goods whether produced or bought. The outflow is the sales of those products. The feedback loops are the flow of information that dictate how much ordering or production of goods should be done based on things like the current rate of sales and the predicted demand in the future. These delays across time can be extreme in the case where custom production takes a long time per order or minimal in the case where flow is predictable. There can also be informational delays like lagging perception.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 51–58). Chelsea Green Pub. ↩
-
-
Everything we think we know about reality is a model
2024-02-20 15:26
Everything we think we know about reality is a model. Our models do have a strong congruence with the world. Our models [also] fall far short of representing the real world fully.1
The purpose of 202203210833 Systems thinking is to make useful models of reality. There are major conflicts here: 202203210832 Models are necessarily incomplete, 202203210831 Models are immutable but reality isn't, and 202203210830 When your model and reality conflict, reality is always right. We know tremendous amounts about the world we live in and the systems we study, but at the same time we know preciously little. Our ignorance always far outpaces our knowledge (epistemology #thread and "I know that I know nothing" 202109071225 Socrates #thread) but at the same time, it's important for us to develop methods for rationalizing about reality. Otherwise, we wouldn't be able to actually exist, live, and thrive in the real world.
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 87). Chelsea Green Pub. ↩
-
-
Resilient, self-organizing systems will generate hierarchies
2024-02-20 12:04
Often 202402201202 Resilient systems that are also 202402201203 Self-organizing systems will produce hierarchies in the process of self-modifying and self-organizing.1 There are many reasons that hierarchies can be desirable — notably 202402241722 Hierarchies enable iterative progress and cohesion (202204272309 Modules should be loosely coupled, 202204272308 Modules should be highly cohesive).
Outside of the desirable traits of cohesion in man-made systems, biological or emergent systems that are modularly cohesive allow for less understanding and dependence on other parts. They are more resilient because there are parts that can take the place of other parts as long as they provide the same "interface" or function of the replaced part. For example, the human body is remarkably adaptable and there are parts of the brain that can completely rewire themselves to function as other damaged parts if needed.
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 83–85). Chelsea Green Pub. ↩
-
-
Self-organizing systems
2024-02-20 12:03
The most marvelous characteristic of some complex systems is their ability to learn, diversify, complexify, and evolve.1
Self-organizing systems are higher level 202402201202 Resilient systems. They have the ability to repair, modify, or produce their own feedback loops through complex interactions of loops acting on the loops themselves. This ability to modify their own structure is exactly what it means to be self-organizing.1
Human bodies are remarkable examples of resilient, self-organizing systems.
Self-organizing systems can be so complex that they verge into the realm of chaos theory. In other cases, they can be more like a fractal, where a simple law produces infinite complexity. See The Computational Beauty of Nature.
-
Resilient systems
2024-02-20 12:02
Systems that work well are resilient: they can recover after being stretched or strained. Most often, resilient systems have rich feedback loops and interactions that allow a system return to some equilibrium, state, or function even after a large disruption.1
Sometimes systems will exhibit even higher level resilience where they can repair, produce, or modify feedback loops themselves. These are 202402201203 Self-organizing systems.
Human bodies are remarkable examples of resilient, self-organizing systems.
Also, note that 202402241658 Stability and resilience are not the same thing.
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 76–78). Chelsea Green Pub. ↩
-
-
Ask questions to assess the validity of a model
2024-02-17 15:20
Whenever you’re confronted with a scenario, as yourself questions to help you decide how good of a representation of reality the model is — but always remember 202203210830 When your model and reality conflict, reality is always right.1
Some questions that might be helpful:
- Are the driving factors likely to unfold this way? Models of dynamic systems are usually not designed to predict what will happen. Rather they’re designed to explore what would happen if a number of driving factors unfold in a range of different ways.
- If they did, would the system react this way? Regardless of whether you think the driving factors will do something, would the system actually behave like that if they did?
- What drives the driving factors of the system? Who watches the watchmen?
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 45–47). Chelsea Green Pub. ↩
-
The principle of shifting dominance
2024-02-17 15:12
The principle of shifting dominance in 202203210833 Systems thinking is when one loop dominates another, having stronger impact on behavior. Because systems often have multiple competing 202110231515 Feedback loops operating simultaneously, the ones that dominate the others will therefore dominate the behavior of the system as a whole. Finally, these dominating factors can change over time causing shifts in the behavior of a system as the dominance of loops wax and wane relative to the others in the system.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 44). Chelsea Green Pub. ↩
-
-
A stock with one reinforcing loop and one balancing loop
2024-02-17 15:07
An example of a stock with one reinforcing loop and one balancing loop is population. The reinforcing loop is the birth rate and the balancing loop is mortality. Depending on the relative strengths of these loops, the stock will either increase, decrease, or remain completely unchanged. In reality the rates of these types of things are not constant and so the real system exhibits complex periods of moving in any direction. This is an example of 202402171512 The principle of shifting dominance.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 42). Chelsea Green Pub. ↩
-
-
Feedback can only affect future behavior
2024-02-17 14:55
While mostly tautological — or physical based in relativity and information transfer — the statement that feedback can only affect future behavior is important. It describes “lag” and requires our attention to the lag time — if I’m ordering stock for my store inventory, I need to account for the continued outflow of inventory as the resupply of inventory is arriving after ordering it.1
More generally, it means that flows can’t react instantly to other flows. They can only react to changes in stocks and after a delay. (huh? #wip)
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 39). Chelsea Green Pub. ↩
-
-
One stock with two competing balancing loops
2024-02-17 14:39
An example of a one stock system with two competing balancing loops is a thermostat. The competition between to 202110231515 Feedback loops that are pulling a stock towards different goals. In the case of the thermostat, the climate control is pushing the room temperature towards the desired temperature and the differential between the room temperature and the outside world is drawing it towards the outside temperature. An interesting case is when the desired temp and the outside temp are the same and they both move to the same goal.1
Todo, not right:
graph LR furnace-->|heat|room room-->|loss|outside room-->|discrepancy|furnace room-->|differential|outside
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 36). Chelsea Green Pub. ↩
-
-
All systems thinking is a simplification
2024-01-29 15:54
All 202203210833 Systems thinking is an approximation or simplification of the real world. 202203210830 When your model and reality conflict, reality is always right. We can't possibly account for all the nuance and intricacies of the systems that govern behaviors. There is always an encompassing system and further sub-systems at play. There are always more feedback loops and information that influences the system.1
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 18). Chelsea Green Pub. ↩
-
-
The purpose of the parts may not be the purpose of the whole
2024-01-29 14:58
In 202203210833 Systems thinking, the purpose of all the elements of a system may be aligned to individual or shared ends. However the result of the system may not align with those purposes. It’s even possible for the purpose of the whole to be counter to the purpose of the elements.1
This can also result in a hierarchy of sub-systems (202402201204 Resilient, self-organizing systems will generate hierarchies). It can be challenging to keep this hierarchy aligned to the desired outcomes.
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 16). Chelsea Green Pub. ↩
-
-
Systems thinking benefits all thought
2024-01-29 14:41
Though we should use all of our different lenses for viewing and thinking about the world, a Systems Thinking lens has distinct benefits:1
- It hones our ability to understand parts of the whole
- It allows us to see interconnections
- It gives us tools to ask questions about future behavior and get answers
- It gives us the power to understand and be confident at 202203231646 Affecting long-term change in the system
-
Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 6–7). Chelsea Green Pub. ↩
-
Definition of system
2024-01-29 14:25
So what is a system? A system is a set of things — people, cells, molecules, or whatever — interconnected in such a way that they produce their own pattern of behavior over time. The system may be buffeted, constricted, triggered, or driven by outside forces. But the system’s response to these forces is characteristic of itself, and that response is seldom simple in the real world.1
Systems are combinations: sets of things that combine to create behavior. Systems exhibit 202104291540 Emergence.
We our complex systems — our own bodies are magnificent examples of integrated, interconnected, self-maintaining complexity.1
Systems must consist of elements, interconnections, and a function or purpose. Elements are easy to see, interconnections harder, and purpose hardest.
-
Thinking in Systems
2024-01-29 14:11
- 202401291425 Definition of system
- 202401291441 Systems thinking benefits all thought
- 202401291458 The purpose of the parts may not be the purpose of the whole
- 202401291554 All systems thinking is a simplification
- 202308281423 Ship of Theseus
- 202205021252 Stock and flow
- 202110231515 Feedback loop
Chapter 2 - A Brief Visit to the Systems Zoo
- One Stock Systems
- 202402171439 One stock with two competing balancing loops
- 202402171455 Feedback can only affect future behavior
- 202402171507 A stock with one reinforcing loop and one balancing loop
- 202402171512 The principle of shifting dominance
- 202402171520 Ask questions to assess the validity of a model
- 202402241530 One stock with delays
- Two Stock Systems
Chapter 3 - Why Systems Work So Well
-
Sturgeon's Law
2023-12-20 14:32
Ninety percent of everything is crap.[^wikipedia2023sturgeon]
Coined by Theodore Sturgeon in a 1957 edition of Venture Science Fiction, the quote was used in the context of critique. Sturgeon argued that science fiction — which at the time was derided for its low quality — was no different than other genres. He argued that all genres were mostly poor and therefore valid criticism against a genre (or anything really) should be leveled against the best examples of that genre rather than the 90% that's crap.
This is one of the most common problems that I have with modern writing, argumentation, and criticism. Many books, articles, blog posts, etc. level arguments in bad faith against a poor example of how something works in order to advocate for some other thing.
There is a small counterpoint, or perhaps more accurately, footnote to this idea though. It can be valuable for criticism to be leveled against the whole of an idea. For instance, if you focus your criticism against the best 10% of the idea and feel you've come to a conclusion or alternate idea, it can still be valuable to talk about the other 90% as an example of the scope of the downsides. If the worst 90% of my position result in better outcomes than the worst 90% of another position, that's a valuable data point.
-
Software Craftsmanship
2023-12-16 14:42
Software craftsmanship is a long journey to mastery. It’s a mindset where Software developers choose to be responsible for their own careers, constantly learning new tools and techniques and constantly bettering themselves. Software craftsmanship is all about putting responsibility, professionalism, pragmatism, and pride back into software development.[^mancuso2015]
Or more shortly
Software craftsmanship is about professionalism in software development.[^mancuso2015]
Software craftsmanship is a movement in 202109061338 Software Engineering. Though it is broadly a movement about professionalism and quality, most people active in this movement are proponents of things like Test Driven Development #thread, Pair Programming #thread, Mob Programming #thread, and “Clean Code” #thread. This reality directly contradicts the statements made by Mancuso in his book 202312091323 The Software Craftsman. Because of this contradiction, I have trouble feeling like the movement is net positive in the way that the Agile movement, eXtreme Programming (XP), and Lean Programming have all also failed as religions without context or flexibility. “You’re not doing it right or hard enough”. However, similar to those movements I do still agree with many of the underlying values even if the commodification of those values inevitably fail.
-
You don’t do Agile
2023-12-16 13:43
Agile is an adjective. You can’t do agile: you either are agile or are not.1 More broadly, agile consultants, processes, systems, and the like are fundamentally not agile because they are prescriptive and not flexible or reactive.
For all the effort in the 202109061338 Software Engineering industry to codify things that will automatically make you agile, it’s simply not possible. It’s a simple relationship between feedback and the autonomy and capability to act on that feedback. Get more feedback and treat all instances as individual instances in individual contexts. Remember that 202205031219 Agility is not equal to speed.
-
Mancuso, S. (2015). The software craftsman: Professionalism, pragmatism, pride (pp. 11). Prentice Hall. ↩
-
-
Seniority is transient and relative
2023-12-11 14:13
Perhaps a better way to describe this is that expertise is transient and relative. But when we phrase it like this, it becomes self-evident. Of course expertise is related to a specific area and time. An expert C programmer in the 1970s would look a lot different than an expert C programmer today. Similarly, we must remember that "seniority" — which is inherently a slippery term — is relative to individual systems, tools, times, organizations, and more.1
Furthermore, we must 202106241524 Sharpen the saw and grow to retain, increase, and expand our areas of expertise. Id est 202208211352 There is no shortcut to learning and 202304031233 Repeated success requires adaptation.
-
Mancuso, S. (2015). The software craftsman: Professionalism, pragmatism, pride (pp. 6). Prentice Hall. ↩
-
-
Think horses, not zebras
2023-12-10 18:39
There’s a saying in the medical field,
When you hear hoof beats, think horses not zebras.
Which is another way of expressing Occam’s Razor (make note #thread), where the simplest explanation is often the correct one.
The explanation of the saying is that zebras are rare in almost all circumstances, whereas horses can be found anywhere in the world. So it’s more likely that a horse is making the noise than a zebra.
This can be applied to programming in many ways, for instance when debugging the cause of some issue.1
Be careful though, when you’re in the right circumstances it may actually be that zebras are the explanation or the more likely one. See this excellent talk about this side of the coin: Zebras all the way down #thread add citation better and stuff.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 95). Addison-Wesley. ↩
-
-
Write a failing test for bugs
2023-12-09 15:34
Before fixing a bug, we should write a failing test so that the bug can't be reintroduced later.
This is common collective wisdom, but mentioned specifically in 202307241042 The Pragmatic Programmer1
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 91). Addison-Wesley. ↩
-
-
Start at square one when debugging
2023-12-09 15:31
When debugging code (or examining an argument or thought) it's best to remove all prior assumptions and knowledge. All code is suspect.1 Furthermore, we need to stay calm, go back to basics, and take it slow and methodically.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 89). Addison-Wesley. ↩
-
-
Get good with your tools
2023-12-09 15:26
Any skill that requires use of instruments or tools can be improved by increasing your proficiency with those tools.
As a programmer, these tools are things like editors and shells, reporting systems, languages, and more. Simply investing the time to be good and fast at using these tools will dramatically increase the quantity and quality of your output.1
More broadly, what we're achieving here is a reduction in the explicit thought and effort that goes into turning our ideas into reality. Whether it's just typing out the code that I'm attempting to produce or soloing on a guitar, being better at the physical actions so that more of my mind is devoted to higher level thinking will yield positive results.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 73, 81). Addison-Wesley. ↩
-
-
Your language limits your world
2023-12-09 15:20
The limits of language are the limits of your world. – Wittgenstein
Our ability to express our thoughts as language limits our ability to perceive the world around us and imagine new possibilities.
In programming, this can be important because a language that has a tool or does not have a tool, may affect how you solve a problem.1
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 59). Addison-Wesley. ↩
-
-
MVPs should be vertical slices
2023-12-09 15:17
MVPs should contain a full vertical slice of the application. Instead of delivering a UI or API without the other, we should fully scaffold and build each layer of the system and deploy it before releasing an MVP. This way, users get a real experience, we get real feedback on our designs, and a path to incrementally building functionality instead of doing big lifts.
This is also known as Tracer Bullet design.1
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 50-55). Addison-Wesley. ↩
-
-
There is no such thing as sacred code
2023-12-09 15:11
All code is changeable. All code can be suspect. All developers can change any code with enough time and knowledge. 202312091509 There are no final architectures.
In organizations, we should strive for strong ownership of code on teams while encouraging people to contribute to other teams' projects when needed. Collaboration and quality of code goes up when we don't tell people that this code is "not their problem" or "that other team's responsibility".
Why would we want to block progress on code by requiring specific people to be the only ones to make the changes? Certainly owners should be involved or consulted at some point, but if someone writes a good PR, then those owners should accept it.
-
There are no final architectures
2023-12-09 15:09
All architectures will evolve over time.1 Strive to internalize that and let go of some of the 202109090909 Decision paralysis that we feel when designing and coding. Remember that 202312091511 There is no such thing as sacred code. Change is the only guarantee so 202205031449 Optimize for change.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 48). Addison-Wesley. ↩
-
-
Make reversible decisions quickly
2023-12-09 15:03
Make reversible decisions quickly and irreversible decisions deliberately.
This saying has been popularized in the tech world (though I don't know the original source to attribute here, it's also mentioned in 202307241042 The Pragmatic Programmer1).
We tend to spend too much time in 202109090909 Decision paralysis when it's more often the case that either direction is fine and even if one is bad, we can reverse course. Because of this mis-attribution of weight on the importance of our decisions, we need a reminder like this one to push through that and take action.
Another interpretation of this is that 202312091509 There are no final architectures and 202312091511 There is no such thing as sacred code. Everything is subject to change and re-evaluation at any point in time. The only thing we should surely do is 202205031449 Optimize for change, which means making decisions with the knowledge that they'll be changed later.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 48). Addison-Wesley. ↩
-
-
Encapsulate at the boundary
2023-12-09 14:49
We should code systems that encapsulate external systems at the boundaries of our system.
For example, if I'm building an app that consumes an API, I should encapsulate the specifics of the API at the very edge of my system. This is a translation layer that turns the calling and results of the API into a shape that I control.
This is a particularly powerful — and nearly required — pattern when working with type systems. We take in values that are unknown, spend the effort to well-type them at the boundary, and then the rest of our app does not need to check if that external value was good or not since they only use the internal representation. Using this pattern, you only 202312091445 Rely on what you control
See also: 202205121023 Use values as the boundary
-
Rely on what you control
2023-12-09 14:45
Don't design systems to rely on properties of things you don't control.1
A simple example of this is building an integration with a 3rd party. You may need to understand and implement specifics of an API that you don't control, but you should always write that code defensively and ensure that changes or bugs in their system won't affect yours. Of course, there are times when that system needs to be online for yours to operate correctly, but you can still ensure that your data isn't corrupted, or your users still have a good experience even though that other system is broken. Remember to 202312091449 Encapsulate at the boundary.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 42). Addison-Wesley. ↩
-
-
Eliminate effects between unrelated things
2023-12-09 14:40
Also known as orthogonality1, we should strive to design systems that reduce or eliminate the effects of unrelated things. There are countless benefits, but they generally boil down to 202205031449 Optimize for change and 202203221620 The golden rule of programming.
When it's possible for us to understand and change parts of a system in isolation with the knowledge that our changes won't affect other things, everything simplifies greatly.
Even better, use technology that enforces these separations for you so you can know with 100% certainty that this is how it works.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 39). Addison-Wesley. ↩
-
-
Have a single source of truth for invariants
2023-12-09 14:34
Every piece of knowledge must have a single, unambiguous, authoritative representation in your system.1
Even though I do not generally like the DRY principle because of its over-generalization, misdirection, and ease of misuse (202204262054 Prefer duplication over the wrong abstraction), I do think that it can be helpful when discussing sources of truth.
For instance, an application should only have one authoritative way to get an object or model where important invariants and business rules can be housed. Then we know that everyone who's making a new user or something will have e.g. the same validation requirements.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 31). Addison-Wesley. ↩
-
-
Know what's good enough
2023-12-09 14:13
In most areas of work, there's a time when the work done is good enough.1 This point is reached when there's less value in continuing to work on the project than there is in finishing it.
The difficulty lies in knowing where this point is. It can be extremely challenging without concrete data or if we can't 202309011327 Define metric to value transfer functions using sensitivity analysis.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 11-12). Addison-Wesley. ↩
-
-
Be the exemplar of change
2023-12-09 14:00
It's hard to argue with working code.
It's easier to ask for forgiveness than permission.
Creating change is tricky. A good way to go about it is to produce the change you want to see and share that experience widely.1 If your change is positive or better than the existing way of doing things, then people will see. The evidence of something real and tangible that's already happening is undeniable and you won't get bogged down in theoretical arguments. 202208131431 Everybody loves an existence proof.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 9). Addison-Wesley. ↩
-
-
The Software Craftsman
2023-12-09 13:23
Chapter 2 - Agile
- 202312161343 You don’t do Agile
- (18 discussion) “Focusing purely on the process and treating software development like a production line leads to average 9-to-5 developers doing what they are told — they become factory workers.” This is what we do here with mobbing
- (19 discussion) bad faith argument in paragraph 2
Chapter 3 - Software Craftsmanship
-
Rescuing a failing project
2023-10-30 11:05
Cure the lack of momentum and feedback.
- Add some (very few for now) tests even if they verifies a bug continues to be a bug.
- Set up CI/CD that tests and pushes always.
- Continue to add tests
- If it hurts, do it more and automate it more.
Crafting Code Podcast Ep. 2
-
Stop starting, start finishing
2023-10-24 15:10
Instead of starting many things and splitting your attention, you should focus on finishing things that you've started. Note that "finishing" doesn't have to be seeing that project to completion. For example you can finish a project by deciding that you don't have time for it and won't continue with it. This relates to 202110181246 Limit WIP to increase throughput.
How does this idea work with creativity learning or the fact that 202110212227 Moderate procrastination facilitates creativity? Creativity learning is about chasing the many interesting things that we see without worrying about becoming an expert in them. This leads to generalized knowledge (T-shaped etc.) #thread and this 202304031221 Breadth of knowledge fuels analogy.1
-
Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range ↩
-
-
Important trade-offs have u-curve optimizations
2023-09-02 16:20
When considering important trade offs, we can see that in many situations graphing the value of the cost or benefit of the two things will vary indirectly, forming an X shaped graph. Therefore, minimizing the total cost in the trade off will be a U shape sitting in the middle above the X. Similarly, maximizing the benefit in a situation might mean leaning fully into one direction.1
-
Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 35). Celeritas Publishing. ↩
-
-
Measure output instead of activity
2023-09-01 13:42
It's always better to measure the output of a worker or team than it is to measure their activity. The economic value added can be enormous for things that are traditionally viewed as waste. For instance, testing software may not increase value in certain ways, but the reliability and costs for failures factor in. We can see then that testing does add direct economic value.
In another light, as a leader it's important to keep this in mind for knowledge workers. Scrutinizing hours worked or other activities adds obstacles (when really 202106241548 Leaders work to remove obstacles) to employees days, making it harder for them to feel safe and become top performers (202112180933 Psychological safety is the top indicator for group performance) After all, 202110212227 Moderate procrastination facilitates creativity and 202211030958 Creative accomplishments happen over time.
This idea is discussed in a slightly different way at length in 202206171206 Delivery Performance vs Value Delivery.
-
Quantify your cost of delay
2023-09-01 13:33
If you're only going to quantify one thing, quantify the cost of delay.1
We simply have no business trading money for cycle time if we do not know the economic value of cycle time.
Cost of delay is the measure that returns the most value while building an economic framework for a project. It will lead to our ability to quantify other important variables such as the cost of queues, batch sizes, and variability.1
How to quantify it? #wip #thread (should be answered later in the book)
-
Define metric to value transfer functions using sensitivity analysis
2023-09-01 13:27
When building an economic framework in a complex system, we should strive to understand the transfer function between measurements and value output. In order to understand how (for example) reducing response latency impacts total life-cycle profits for a project, we can vary that measure independently and see the outcome. We then put it back and vary a different measure. Doing this is called performing a sensitivity analysis. In this way we get the information we need to make economically based decisions (202309011312 The primary goal in product development is to make good economic decisions) for our complex product development systems (202309011322 We need more information for complex decision making).1
-
Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 30). Celeritas Publishing. ↩
-
-
We need more information for complex decision making
2023-09-01 13:22
Most complex systems have interconnected variables. We can't just make one change in isolation from others. If we could, then making decisions and affecting system-wide changes would be easy. In that case, we'd only need to know the direction of the change for that variable. In the case of a complex, interconnected system, we still need to know the direction of the change on each variable, but we also need to know its magnitude and be able to express all the variables' changes in direction and magnitude in the same unit of measure.
In the context of product development, this lends support to the theory that 202309011312 The primary goal in product development is to make good economic decisions. We build an economic framework, express each variable in terms of that singular cost, and can measure complex changes.1
-
Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 29). Celeritas Publishing. ↩
-
-
The primary goal in product development is to make good economic decisions
2023-09-01 13:12
The primary goal in product development is to make good economic decisions. All other objectives should be viewed as secondary to the economics. This gives us a common comparison between (for example) quality and delaying go-to-market. This means that we should select the actions that we take based on an overall, quantified economic impact.1
How though, does ethical concerns factor into this. We can say that we simply have be ethical even if it's not the best economic decision, but what happens when the ethics of a decision are not cut and dry. How does one keep these other — equally, or even more important — concerns around while also striving for a single economic decision mindset?
-
Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 28). Celeritas Publishing. ↩
-
-
Broken window theory
2023-08-28 23:41
Researchers determined that if a single broken window is left unfixed in a neighborhood, the neighborhood will descend into disrepair.1 The idea is that people will continue to put in the effort and care about things until they feel that others don’t care either.
-
Kelling, G. L., & Wilson, J. Q. (1982, March 1). Broken Windows. The Atlantic. https://www.theatlantic.com/magazine/archive/1982/03/broken-windows/304465/ ↩
-
-
No broken windows
2023-08-28 23:40
Keep in mind the 202308282341 Broken window theory with our code. People will continue to put in the effort to maintain, test, lint, etc a project unless there are any obvious signs on disrepair. Don’t allow “that one area of the code that we don’t care about” to creep into the rest of the project. The only way to keep things going is to instill a zero tolerance, no broken windows rule.1
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 7). Addison-Wesley. ↩
-
-
Ship of Theseus
2023-08-28 14:23
The Ship of Theseus is a thought experiment first recorded by Plutarch in his Life of Theseus which questions whether an object which has had all of its original components replaced over time remains the same object.[^wikipedia2023theseus] This raises questions about the philosophy of identity and has influenced a wide range of western philosophy.
Thomas Hobbes later extended the thought experiment to ask whether if a person collected all the parts that were replaced and made a ship out of those parts, which of the ships would be the original. He goes on to sketch out a system that allows for differing kinds of identity.
In 202203210833 Systems thinking, we would answer this question by saying that the purpose of an individual — its system identity — is continuous as total substitutions are made. We use this same line of thought to describe other systems like a company or the government; though all the members of these systems may change, they retain an identity, system interconnections, and a systemic purpose. In fact a system may retain its identity even with different purposes or interconnections, but those are much more drastic alterations to the system than the elements.
-
Care about your craft
2023-08-28 14:02
We feel that there is no point in developing software unless you care about doing it well.
Care about your craft.
Think! about your work.1
Think about what you're doing. Take pride in what you produce. Take joy in the craft, the puzzle, the mastery that you gain over time. Make code that works for you that other people will see, understand, and be able to work with.
This is a similar, highly overlapping concept to 202308282340 No broken windows. Don't let things slip even a bit, and care that it's all done well.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xxi). Addison-Wesley. ↩
-
-
Quarry workers' creed
2023-08-27 16:10
We who cut mere stones must always be envisioning cathedrals
An old saying of uncertain providence. Mentioned in Cal Newport's Deep Work and David Thomas and Andrew Hunt's The Pragmatic Programmer.1 This saying symbolizes the compounding effect of simple actions taken over a long period of time.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xvii). Addison-Wesley. ↩
-
-
This be the verse
2023-08-27 15:54
They fuck you up, your mum and dad. They may not mean to, but they do. They fill you with the faults they had And add some extra, just for you. But they were fucked up in their turn By fools in old-style hats and coats, Who half the time were soppy-stern And half at one another's throats. Man hands on misery to man. It deepens like a coastal shelf. Get out as early as you can, And don't have any kids yourself.
-
Larkin, P. (2003). Collected poems (A. Thwaite, Ed.; [New ed.], 2. pr). Marvell Press. ↩
-
-
Construct hooks for future knowledge
2023-08-27 11:08
Fortune favors the prepared mind1
202109060835 Knowledge is constructed through effort. Some of that effort can be prepared ahead of time by collecting information widely (202308141518 Be a pack rat for little facts) and turning it over in our mind.2
Not only does this make learning new things easier in general, but it also builds our repertoire of analogies (202304031221 Breadth of knowledge fuels analogy). In this way it’s valuable in and of itself. The output of using this method is greater than the sum of the pieces of knowledge learned.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 255). Addison-Wesley. ↩
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Be a jack of all trades
2023-08-27 10:55
Along with 202308141518 Be a pack rat for little facts, we should become capable at many things. We should try to be familiar with many different systems, languages, technologies, paradigms, etc. The value of being broadly capable may be less than apparent at first, given our current jobs might require us to only specialize in one tool. But when taking a wide view #thread of things, we realize that all of the things we learn and can do will influence our specialized actions as well. Breakthroughs rarely come from specialists #thread.1
Range #thread
-
Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range ↩
-
-
Be a realistic critical thinker
2023-08-27 10:47
We should almost never take things for certain when we learn them. We should be asking why things are the way they are, and if they could be differently. We should view someone saying "that can't be done" as a challenge.
At the same time, by trying to understand the underlying nature of the problems we solve we should develop a realistic intuition for the times that things are difficult or complex because they are actually hard. There are hard problems to solve that have complexity that we can't simplify by simply reworking the problem. These are the places that we'll have to accept and embrace the challenge. Understanding that difficult things are difficult and will take a long time or lot of effort to solve gives us the stamina to keep at it.1
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xxi). Addison-Wesley. ↩
-
-
Be an early adopter
2023-08-27 10:43
Being an early adopter helps us develop an intuition for technologies and trends. 202408021018 Intuition and instinct are implicit knowledge that we gain by doing things like exploratory learning and adoption. It also gives us regular practice in integrating new knowledge into our existing toolbox. It gives us confidence in tackling problems through many varied experiences actually solving them.1 This increases our chances of being able to continue succeeding in a changing landscape because 202304031233 Repeated success requires adaptation.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xx). Addison-Wesley. ↩
-
-
The Principles of Product Development Flow
2023-08-24 17:43
- 202309011312 The primary goal in product development is to make good economic decisions
- 202309011322 We need more information for complex decision making
- 202309011327 Define metric to value transfer functions using sensitivity analysis
- 202309011333 Quantify your cost of delay
- 202309011342 Measure output instead of activity
- 202309021620 Important trade-offs have u-curve optimizations
-
Make the future less painful
2023-08-14 15:44
202308141538 It's your life and you have the power to make things better. Never forget that we're the engineers that build, maintain, and change our systems. Don't feel trapped by the systems we've inherited, work towards the better and "make the future less painful".1
This can feel isolating sometimes (202112201317 The solitude of leadership), but the liberation of seizing your 202407010952 Freedom and Responsibility is unbelievably rewarding.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xxi). Addison-Wesley. ↩
-
-
It's your life
2023-08-14 15:38
Never forget that your life is yours. You alone have agency in it. We all have the power to build the life we want, live the life we want, and change reality to reflect our will. It's a deep, dreadful, awful, wonderful, life-affirming, joyous, humanistic responsibility and we must never forget it. You have the 202407010952 Freedom and Responsibility to live.
202109060833 Sapere Aude and seize the day. Live your life to the fullest. Get out there and experience the world. Experience other people. Take advantage of your short time here.
See 202307282003 An Ode as a poetic example of the idea that we alone have agency and the power to make the changes we want and build the future we imagine. Also 202208221306 In the Desert and 202210141736 Ozymandias.
-
Be able to have a conversation about anything
2023-08-14 15:34
A personal desire of mine. I realized that I felt this way when I learned how much more interesting and rewarding life is when you ask people what they're passionate about and really listen to the answer. The natural follow-up is to then be able engage in that passion with them and converse about it. 202308141538 It's your life, spend it making meaningful connections and learning things.
This motto doesn't mean that I desire to be knowledgable about everything. Instead, it means that I should both be able to be inquisitive about a topic I don't know about and potentially contribute meaningfully to the conversation through analogous knowledge I do have.
This echoes the fact that 202110251122 Analogy is a highly effective communication method and the core desire in this statement to be able to effectively understand and communicate with anyone.
-
Be a pack rat for little facts
2023-08-14 15:18
Be a pack rat for little facts.1
I've always valued generalization[^epstein2019] and breadth of learning. Being a pack rat for little facts means that you value learning and keeping knowledge and information that may or may not be useful at the time.
The proposed benefit is that all of these facts accumulate (202109060836 Knowledge should accumulate) and combine (202110231450 Combination of knowledge) over time. This will allow us to make better decisions and construct knowledge at an increasing rate (202304112152 Intellectual investment is like compound interest). 202304031221 Breadth of knowledge fuels analogy.[^hamming2020]
This is superficially different than the 202304041100 Learn, don't memorize motto, but on closer examination, we're advocating for learning deeply, but also filing information away that we might not synthesize now, in order to aid in deep learning later. We 202308271108 Construct hooks for future knowledge by seeing and storing facts whose depth we might not yet understand.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xx). Addison-Wesley. ↩
-
-
An Ode
2023-07-28 20:03
We are the music makers, And we are the dreamers of dreams, Wandering by lone sea-breakers, And sitting by desolate streams; — World-losers and world-forsakers, On whom the pale moon gleams: Yet we are the movers and shakers Of the world for ever, it seems. With wonderful deathless ditties We build up the world's great cities, And out of a fabulous story We fashion an empire's glory: One man with a dream, at pleasure, Shall go forth and conquer a crown; And three with a new song's measure Can trample a kingdom down. We, in the ages lying, In the buried past of the earth, Built Nineveh with our sighing, And Babel itself in our mirth; And o'erthrew them with prophesying To the old of the new world's worth; For each age is a dream that is dying, Or one that is coming to birth. A breath of our inspiration Is the life of each generation; A wondrous thing of our dreaming Unearthly, impossible seeming — The soldier, the king, and the peasant Are working together in one, Till our dream shall become their present, And their work in the world be done. They had no vision amazing Of the goodly house they are raising; They had no divine foreshowing [Continue reading](/notes/202307282003)
-
The Pragmatic Programmer
2023-07-24 10:42
Intro
- 202308141544 Make the future less painful
- 202308281423 Ship of Theseus
- What makes a pragmatic programmer?
- 202308271610 Quarry workers' creed
Chapter 1
- 202308282340 No broken windows
- 202312091400 Be the exemplar of change
- 202312091413 Know what's good enough
- Think critically
Chapter 2
- Good design is easier to change than bad design. Almost all other patterns boil down to "easier to change" or ETC or 202205031449 Optimize for change or 202204262114 Write code that's easy to delete, not extend.
- This is a value (spectrum) not a rule.
- This is why I don't like frameworks that lift a lot (tailwind style string classes everywhere in code) or rails magic. It's everywhere and pervasive and not good. Or things w/lots of non-standard tooling (bit or graphql)
-
List of SDLC metrics
2023-04-23 10:46
In no particular order as of now and with no comment on value of tracking them.
Many of those can be measured in different ways: collection methodology, count, per unit of time, etc.
Remember metrics are used to identify and address problems for the business. Start with the problem, not the metrics.
- LoC, SLoC
- Defects detected
- Defects fixed
- Regressions detected
- Regressions fixed
- Commits
- Files
- Memory size of repo
- Checkout time
- Build time
- Deploy time
- Time for onboarding
- Time for local repo setup
- Tests
- Test run time
- Test coverage
- CI times
- PR review time
- Ticket in
STATUS
time - CPU/memory/resource usage
- Logs and counts etc
- Cost (infra, people etc)
- Time spent extending/adding new features
- Time spent maintaining
- Time spent fixing
- Time from problem to alert
- Time from alert to response
- Incident count and severity
- Oldest PR
- Costs per query/request
- PR
- Costs per query/request
- Hiring plan vs actual
- Dev retention
- DEI
- DORA
- Deployment frequency (DF)
- Mean lead time for changes (MLT)
- Mean time to recover (MTTR)
- Change failure rate (CFR)
- Change failure catches prior to full rollout
- Uptime (9s)
- Latency
- Response times
-
The philosophy of water
2023-04-21 20:16
Water is life. Connection to humanity through water and rain. The smell of the earth after a warm rain.
-
The effort to achieve excellence is worth it
2023-04-11 22:27
When addressing whether the effort to become excellent is worth it, Richard Hamming says,
The chief gain is in the effort to change yourself, in the struggle with yourself, and it is less in the winning than you might expect. Yes it is nice to end up where you wanted to be, but the person you are when you get there is far more important. I believe a life in which you do not try to extend yourself is not worth living — but it is up to you to pick goals you believe are worth striving for.1
202109071223 The unexamined life is not worth living. Strive for greatness as you see it. We all have to live our own lives, but there's no reason not to strive for greatness. There are many opportunities that anyone can reach for and succeed in, if only they try (202304102024 Great people have a great deal of drive to do great things).
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Selling ideas requires effort
2023-04-11 22:20
Specifically, there are 3 skills to master in order to be able to sell our ideas:1
- Giving Formal presentations
- Producing written reports
- Mastering the art of informal presentations as they happen to occur.
The best ideas don't naturally win out, they must be sold even if they're much better than the competition. After all,
Change does not require progress, but progress requires change.1
Some tips for getting better at these:1
- Privately critique presentations you attend
- Ask others for their opinion on yours and others' presentations
- Find parts that are effective and those that are detrimental
- Be yourself or develop a personal style that you are comfortable with. This includes subtle things like telling jokes and being personable.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩ ↩2 ↩3
-
Ten percent time
2023-04-11 22:03
The concept of "10% time" (or any given percent) is the idea that we set aside 10% of our work week for non-immediate work problems.
While it doesn't have to be each work week, it's important to do this 10% time on a regular basis. It could be daily or biweekly, but it shouldn't be less frequent than that.
This practice helps us avoid staying immersed in the sea of detail where almost everyone stays almost all of the time. We need to examine the big-picture on a consistent, frequent basis for many years (202304041619 Keep the whole in mind, 202203231646 Affecting long-term change) especially if we're going to be leaders instead of followers.
The well supported[^hamming2020] outcome is that the value we get out of this time is greatly repaid through the process in both direct (202304102048 Compounding Interest) and indirect (202106221146 Leverage) ways.
As a software developer, we might experiment with new tech, do some independent learning, get around to cleaning up that bug in the developer experience flow that is annoying you, or anything else. It's an open ended time for research and development, for thinking, for play and experimentation, and for inefficiency.
-
Intellectual investment is like compound interest
2023-04-11 21:52
Intellectual investment is like compound interest: the more you do, the more you learn how to do, so the more you can do, etc. I do not know what compound interest rate to apply, but it must be well over 6% — one extra hour per day over a lifetime will much more than double the total output.[^hamming2020]
202109060836 Knowledge should accumulate and it does so at a 202304102048 Compounding Interest rate. 202304102024 Great people have a great deal of drive to do great things and applying that drive to intellectual pursuits is a high 202106221146 Leverage use of time over the long run (202109251140 Play long term-games).
Hamming would put aside Friday afternoons for "great thoughts" such as "what effect will computers have [...] on science generally?" 202110231433 Think week runs in a similar vein. Setting aside dedicated 202304112203 Ten percent time is well worth it. It helps us stay focused on important and interesting work as well as determine the best directions to work in.
Intellectual investment can also be done little and often. 202308141518 Be a pack rat for little facts and 202308271108 Construct hooks for future knowledge. The progress from continually learning small amounts is exponential.
-
Compounding Interest
2023-04-10 20:48
There is a quote attributed to Einstein that's probably made up but still good.
Compound interest is the eighth wonder of the world. He who understands it, earns it; he who doesn't, pays it.
Or sometimes in a different phrasing,
Compound interest is the most powerful force in the universe.
Both of these sentiments strike at the heart of the power of compound interest. Unfettered exponential growth can make even the smallest changes today, radically valuable in the future.
- 202304102024 Great people have a great deal of drive to do great things
- 202304112152 Intellectual investment is like compound interest
- 202109060836 Knowledge should accumulate
- 202106221146 Leverage
- 202109121530 Maturity of interdependence
- 202109251140 Play long term-games
- 202308271610 Quarry workers' creed
-
Great people have a great deal of drive to do great things
2023-04-10 20:24
Richard Hamming's boss once said to him,
You would be surprised how much you would know if if you had worked as hard as he has for as many years.1
It's evident that great people have a great deal of drive to do great things. 202208211352 There is no shortcut to learning and putting in the hard work, day-in and day-out will lead to compounding gains (202304102048 Compounding Interest, 202109060836 Knowledge should accumulate).
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Interactions with reality drive innovation
2023-04-10 20:10
The interaction with harsh reality tends to push you into significant discoveries which otherwise you would never have thought about while doing pure research in a vacuum of your private interests.1
It's important not to live in an ivory tower, separated from the muck of life. All the best research and thought can lead down paths that would never work when implemented in a real system. Not only that, but reality will strengthen your ideas or illuminate new paths and opportunities.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Use a simple heuristic to guide gradual adoption
2023-04-05 10:01
unless you have a good reason write it in [new tech]
Have to give autonomy, have to spend the effort to justify the reason not to, have to allow people to do the right thing without you dictating
202203231647 Leading from vision 202107240951 Visionary leadership style 202205111310 Migrations are the only solution to tech debt
Software unscripted change management minute 30
-
The end of all things
2023-04-04 16:31
I'm glad you are here with me. Here at the end of all things, Sam."1
-
Tolkien, J. R. R. (2020). The hobbit & The lord of the rings boxed set. HarperCollinsPublishers. ↩
-
-
Keep the whole in mind
2023-04-04 16:19
Hamming said in 202205092134 The Art of Doing Science and Engineering something along the lines of "If you asked a professor what they were doing in their next class, they would say something like 'teaching topic X' instead of 'I am going to educate the students and prepare them for their future careers'."1 This causes a "missing the forest for the trees" issue.
Most of the time each person is immersed in the details of one special part of the whole and does not think of how what they are doing relates to the larger picture.1
We must keep the whole in mind as we navigate our day-to-day. It's a bit trivial in a sense because many people would think that the whole is there implicitly, but by keeping it explicitly in mind, we can guide 202205231312 A Career and more broadly 202304031317 A Life. To be truly successful in retrospect at the end of our lives, we need to keep a larger view. One attempt at keeping that larger view is to adhere to 202203210833 Systems thinking, even though there is no single larger picture, but many.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩ ↩2
-
-
Learn, don't memorize
2023-04-04 11:00
Memorization is the easy way to get a good grade or look like you know something. However, as we know, 202208211352 There is no shortcut to learning, 202109060835 Knowledge is constructed, and 202109060836 Knowledge should accumulate. In order to have wide (202304031221 Breadth of knowledge fuels analogy), meaningful (202204301410 Criteria for durable knowledge storage) knowledge and ability to use that knowledge to communicate (202110251122 Analogy is a highly effective communication method), we have to understand the "why" behind the "what".
We are all lifelong learners (202208211426 Work with people who know they don't know) and should strive to get down to the fundamentals instead of just learning a rote piece of information. 202107272242 The Art of using a Zettelkasten is an attempt at habituating and recording some of this process.
If we look at 202107282144 Bloom's taxonomy of knowledge, we see that memorization is only the most basic level of knowledge. Understanding and using that knowledge is more advanced and valuable.
One aspect of memorization that can be useful is to 202308141518 Be a pack rat for little facts and 202308271108 Construct hooks for future knowledge. This isn’t memorization for memorization’s sake though. Rather, it’s memorizing — or more accurately remembering facts — in order to learn Things more widely and deeply in the future. It’s filling things away in order to be able to say “oh yeah, I’ve seen this before.”
-
Do significant things with your life
2023-04-04 10:47
As far as I know each of [us] has but one life to lead, and it seems to me it is better to do significant things than to just get along through life to its end. Certainly near the end it is nice to look back at a life of accomplishments rather than a life where you have merely survived and amused yourself. Thus in a real sense I am preaching the messages that (1) it is worth trying to accomplish the goals you set yourself and (2) it is worth setting yourself high goals.1
An excellent quote on living 202304031317 A Life and having 202205231312 A Career that you can be proud of and be happy to have lived.
A similar but less philosophical take on this is to 202206112310 Work on what matters. A similar but more philosophical take on this is 202109071223 The unexamined life is not worth living.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
A Life
2023-04-03 13:17
What does it take to have a long and prosperous life? What is success? What is happiness? What is meaning? What is a good life?
Inspiration
Praxis
- 202205231312 A Career
- 202308141518 Be a pack rat for little facts
- 202308141534 Be able to have a conversation about anything
- 202106221744 Begin with the end in mind
- 202304041047 Do significant things with your life
- 202109060816 Do your own thinking
- 202112180923 Don't fear failing, fear failing to try
- 202110181231 Don't tacitly endorse bad behaviors
- 202109251152 How much is enough
- 202109090947 Idea gardening
- 202308141538 It's your life
- 202304041619 Keep the whole in mind
- 202203231647 Leading from vision
- 202304041100 Learn, don't memorize
- 202109121530 Maturity of interdependence
- 202112221953 My bucket list
- 202104291947 Our purpose as leaders is to serve others
- 202109251140 Play long term-games
- 202106241524 Sharpen the saw and grow
- 202112291821 The things we own end up owning us
- 202109071223 The unexamined life is not worth living
- 202208211352 There is no shortcut to learning
-
Small careful samples are better than large poor ones
2023-04-03 12:54
Small samples carefully taken are better than large samples poorly done.1
It's important when taking measurements or testing something that the samples we gather are taken carefully. If we gather a lot of data but it's inaccurate, then we're going to make a mistake in our conclusions or actions. Instead we should focus on accuracy first and only after that try to increase our sample size as long as it doesn't decrease quality.
A topic that comes to mind when writing this is logging and testing in 202109061338 Software Engineering. I'd rather have a few excellent log outputs or tests run that I can count on to get precise, high quality information from than a huge number of them that produce mostly noise.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
There is never time to fix things later
2023-04-03 12:44
There is a saying in software development:
There is never time to do the job right, but there is always time to fix it later.1
We all know that this is the attitude of many managers and developers, but we can plainly see that it's an obvious contradiction. If there's never time to work on something now, then there can't be any other time at any future "now".
Push back. Take your time. Get things done right or else you'll pay for it many times over in the long run.
This does contrast somewhat with the general philosophy that 202208151317 Incremental change is always better, but it isn't a contradiction. Each incremental change should be done slowly and thoroughly. Each piece of development should have all the steps that go into making something excellent.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Repeated success requires adaptation
2023-04-03 12:33
What you did to become successful is likely to be counter-productive when applied at a later date.[^hamming2020]
There are two things at play here.
First, the "old expert" often fails to keep up with the times. The context around them shifts and the advancements even in their areas of expertise change what, how, and why things are done. They often become set in their ways and can end up not just irrelevant, but outright wrong. This can be for many reasons like ego, pride, lack of motivation, arrogance, or just rapid progress.
Second, because we have gained some success by doing things a certain way, we're likely to be biased to believing that we're capable of knowing the "correct" way more than others since there were people who were not successful while we were. This closes our minds to novel, creative solutions and fundamental changes in our fields.
It's important to use our time regardless of our successes to continue being creative (202211030958 Creative accomplishments happen over time). We should avoid being overly cautious for fear of losing our successful position (202408060133 Caution and perfectionism hurt progress). We should strive to 202208211426 Work with people who know they don't know and be one of those people ourselves! We need to adapt to the changing world in order to have more success and not be blockers for future generations of thinkers. 202308271043 Be an early adopter of interesting things to learn widely and integrate good new ideas.
-
Breadth of knowledge fuels analogy
2023-04-03 12:21
Fortune favors the prepared mind[^thomas2019]
202110251122 Analogy is a highly effective communication method and tool for thinking. In order to maximize our ability to create analogies for novel problem solving (202211030958 Creative accomplishments happen over time), we must gain as much varied, wide-ranging knowledge as possible.[^epstein2019]
202107272242 The Art of using a Zettelkasten can be interpreted loosely as an explicit rendering of connections and analogues between ideas.
Richard Hamming discusses analogy in these terms by extolling the value of turning things over in our minds (202109090947 Idea gardening), creating "hooks" (202308271108 Construct hooks for future knowledge) to other knowledge in order to build new knowledge and cement recall of what we already know (202109060835 Knowledge is constructed, 202109091132 Notes should be densely linked, 202209091141 The goal of note-taking is not to be better at taking notes, it's to be better at thinking).[^hamming2020] He also talks about how creating knowledge and building new analogies seems to happen while acquiring new information by turning it over in our minds before it becomes set and less mutable. He is a big proponent of my personal belief of 202304041100 Learn, don't memorize.
-
Value of employee time
2022-11-12 12:53
A simple table to relate an employee’s time cost to proposed time savings.
All values are per $100,000 in total compensation cost to the business and use average values for time, which is calculated as follows.
Given $365.25$ days per year $= \frac{1461;\text{days}}{4;\text{year}}$ and $\frac{5;\text{weekdays}}{7;\text{days}}$.
We have $\frac{7305}{28}$ weekdays per year and $\frac{1461}{28}$ weeks per year.
Using this and the rate of 8 work hours per weekday our total work hours per years and weeks are
$$ \frac{58,440}{28} = \frac{14610}{7} = 2087 \frac{1}{7} = 2087.\overline{142857} ; \text{work hours per year} $$
and (unsurprisingly)
$$ \frac{14610;\text{work hours}}{7;\text{years}} \cdot \frac{28;\text{years}}{1461;\text{weeks}} = 40 ;\text{work hours per week} $$
Percent Weekly Total Total (Exact) Weekly Cost Total Cost 100.000% 40 hrs 2087 hrs $2087 \frac{1}{7}$ $1916.50 $100,000.00 50.000% 20 hrs 1044 hrs $1043 \frac{4}{7}$ $958.25 $50,000.00 25.000% 10 hrs 522 hrs $521 \frac{11}{14}$ $479.12 $25,000.00 -
The unreasonable effectiveness of mathematics
2022-11-03 10:26
Despite the fact that mathematics can be disregarded (using valid, coherent arguments) as a game of symbols unrelated to any ground truth of reality, we have to admit that it's unreasonably effective at describing, modeling, and communicating about reality.1 This is especially true in science and engineering.
Mathematics is a sort of universal mental tool for clear thinking.1
Einstein once said that the fundamental paradox of life is that it appears the world is logically constructed.1 Assuming this is true, it can explain why mathematics is an effective analogy for reality (202110251122 Analogy is a highly effective communication method).
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp. 308). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩ ↩2 ↩3
-
-
Creative accomplishments happen over time
2022-11-03 09:58
We need to allow our ideas to germinate (which requires time) in order to come to fundamental, novel understanding of interesting problems.
History shows that the typical pattern of creativity is as follows:[^hamming2020]
- There is at least some dim recognition of a problem.
- A short or long period of problem refinement. This stage is important because it's likely that our experience will phrase the problem in a conventional way leading only to mediocre or conventional solutions. We must give ourselves time to fully understand the problem for what it is outside of our pre-conceptions. We might even abandon the problem for some time (allowing our subconscious to work on it 202109090947 Idea gardening). However, we must be emotionally involved and want to find a fundamental, novel solution.
- The moment of insight or creativity. This may only be an attempt and might not work but it leads back into step 2. There are also times when we can change the problem itself to fit the solution or perhaps ask ourselves "If I had a solution, what would it look like?"
- Often there is still much work to be done cleaning and refining even the closest, most correct solutions once the problem has been "solved".
-
Yearn for the vast and endless sea
2022-11-02 10:54
If you want to build a ship, don’t drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea.
— Antoine de Saint-Exupéry
This quote is a modern rendition that has been morphed over time from Saint-Exupéry's 1948 work Citadelle.1
One will weave the canvas; another will fell a tree by the light of his ax. Yet another will forge nails, and there will be others who observe the stars to learn how to navigate. And yet all will be as one. Building a boat isn’t about weaving canvas, forging nails, or reading the sky. It’s about giving a shared taste for the sea, by the light of which you will see nothing contradictory but rather a community of love.
-
Quote Investigator. (2015, August 25). Teach Them to Yearn for the Vast and Endless Sea – Quote Investigator. Quote Investigator. https://quoteinvestigator.com/2015/08/25/sea/ ↩
-
-
Second-order thoughts about the 2020s
2022-11-02 09:29
Much of these excellent thoughts are from Eli Dourado's great post on the subject.[^dourado2020]
- Bring science to market in order to end 202110220905 The great stagnation.
- mRNA vaccines are amazing. They can be developed quickly and cheaply. There is an HIV/AIDS vaccine in trials and it could be eradicated this decade. There are also "miraculous" treatments for cancer in this vein that aren't true vaccines, but could improve outcomes drastically.
- There are a number of anti-aging techniques coming out that are backed by more credible science than before (therapeutic plasma exchange, aging clocks, other senolytic drugs). Expect people to live longer and healthier by the end of the decade.
- Solar and wind costs were drastically cut in the 2010s and in the 2020s deployment will accelerate. We need a storage price of $20/kWh for a grid powered completely by today's tech. The closest we come is a $542/kWh battery based solution from Tesla.
- Instead of solar and wind we need scalable zero-carbon baseload energy — nuclear or geothermal. Current tech for nuclear targets around 6.5¢/kWh but is delayed until at least 2030. More likely is geothermal which looks to crack 3.5¢/kWh. Not only this but geothermal's drilling advancements mean that even Lockheed Martin's promising compact fusion reactor might not be able to compete if it comes to market this decade. This is because digging the wells this decade means we just have to replace the heat exchange pieces but not re-dig the wells, effectively halving the cost of new wells for the following 15 years, meaning 1¢/kWh energy by the 2050s. Fusion will kill in space though.
-
Effective staff engineering meetings
2022-11-01 10:39
The measure of an effective staff engineering meeting is the same as the measure of an effective 202206112233 Staff-plus engineer. The goals are the same and having a meeting simply facilitates people doing their jobs well. A huge portion of high-level engineering is communication and alignment. There's no better way to achieve those two things than regularly talking with people.
How to get started
Just schedule the first meeting with staff engineers to go over what this is and how the group would like to proceed.
- Set a cadence
- Assign an owner of the calendar meeting and agenda
Going forward, the agenda should be collaboratively set, allowing for leads from teams to bring things that their team and engineers on their team care about or are working on. Particularly, they should present things that would benefit from feedback from this group, things that people on their team are struggling with, or things that other teams would benefit from knowing about. This is primarily a communication meeting, though working sessions are valuable from time to time.
Purpose, benefits, and outcomes
- Setting company-wide technical direction.
- Coordinating mentorship and sponsorship for engineers across the company.
-
Ozymandias
2022-10-14 17:36
I met a Traveller from an antique land, Who said, “Two vast and trunkless logs of stone Stand in the desert. Near them, on the sand, Half sunk, a shattered visage lies, whose frown, And wrinkled lip, and sneer of cold command, Tell that its sculptor well those passions read, Which yet survive, stamped on these lifeless things, The hand that mocked them, and the heart that fed; And on the pedestal these words appear: ‘My name is Ozymandias, King of Kings, Look on my works ye Mighty, and despair!’ No thing beside remains. Round the decay Of that Colossal Wreck, boundless and bare, The lone and level sands stretch far away.”
[^shelley1818]
In the original edition, the word “Ozymandias” appears in small-caps.
Ozymandias
The poem was signed and published under the pseudonym “Glirastes” which is a portmanteau combining the Greek suffix erastes, meaning “lover of,” and the Latin Gliridae, the scientific term for the family of the dormouse. Mary Shelley’s wife playfully called herself “a dormouse” in many letters to Percy, so this was his way of signaling his affection for her as “a lover of the dormouse”
-
Science can only amplify
2022-09-20 14:14
Underneath the general optimism of Verne’s novels lies a kernel of pessimistic truth: science can do nothing but amplify the natural attributes of humankind, including hatred, violence, and vengeance.
— Victoria Blake, Introduction to Twenty Thousand Leagues Under the Sea1
-
Verne, J. (2015). 20,000 leagues under the sea (L. P. Mercier, Trans.). Starbooks Classics Collection. (Original work published 1870) ↩
-
-
Normalization of deviance
2022-09-18 20:13
- Pay attention to weak signals
- Resist the urge to be unreasonably optimistic
- Teach employees how to conduct emotionally uncomfortable conversations
- System operators need to feel safe in speaking up
- Realize that oversight and monitoring are never-ending
-
Mobilis in mobili
2022-09-12 13:44
Mobilis in mobili, meaning moving in a moving thing, moving in the moving element, or changing in a changing medium.
This is the motto of Captain Nemo in Twenty Thousand Leagues Under the Sea. It is seen on his flag on the Nautilus as well as the one that he plants on the South Pole.1 It has a literal interpretation of moving through the ocean waters, but also of moving politically through humanity and geo-politics as a revolutionary attempting to move the tides of nations.
-
Verne, J. (2015). 20,000 leagues under the sea (L. P. Mercier, Trans.). Starbooks Classics Collection. (Original work published 1870) ↩
-
-
Aegri somnia
2022-09-12 13:42
Aegri somnia, meaning troubled (literally bitter) dreams.
A chapter title in Twenty Thousand Leagues Under the Sea.1
-
Verne, J. (2015). 20,000 leagues under the sea (L. P. Mercier, Trans.). Starbooks Classics Collection. (Original work published 1870) ↩
-
-
The world wants new men
2022-09-12 10:25
The earth does not want new continents, but new men.[^verne1870]
Spoken by Captain Nemo in Twenty Thousand Leagues Under the Sea.
Captain Nemo is a supporter of revolutionaries around the world and a strong enemy of colonialism. He was a revolutionary in his own country (drafted originally by Verne as a Polish revolutionary against Russia, but later changed to an Indian one against Britain) and lost his family and friends to his oppressor. He renounced his citizenship of all nations of men and took to the seas, fighting (and sinking) colonial ships as well as accumulating riches and giving them to revolutionary causes around the world.
In this context, the quote is lamenting that land and nations are not needed to solve the problems of the world. Instead, men need to fundamentally change ethically and morally in favor of freedom, liberty, and self-determination.
In a broader context, this quote could be interpreted as a general sentiment to re-evaluate the direction something is going in. In tech, if someone said "we need better advertisements that respect people's privacy", I might reply with this quote meaning "we don't need better ads, we need a fundamental shift from this paradigm."
-
Notes are the fundamental unit of knowledge work
2022-09-09 11:42
The number of 202109091129 Evergreen notes written per day might be the most valuable metric for measuring the productivity of a knowledge worker.[^matuschak2017unit] Consider that 202209091141 The goal of note-taking is not to be better at taking notes, it's to be better at thinking. This sharply contrasts to taking transient notes which create busy work without accumulating knowledge (202209091140 Transient notes don't create knowledge).
There are a few good reasons for this metric's value:
- Evergreen note writing helps insight accumulate
- Evergreen note writing helps reading efforts accumulate
- Evergreen note writing helps writing accumulate
If writing is the medium of research and studying nothing else than research, then there is no reason not to work as if nothing else counts than writing.
Focusing on writing as if nothing else counts does not necessarily mean you should do everything else less well, but it certainly makes you do everything else differently. Having a clear, tangible purpose when you attend a lecture, discussion or seminar will make you more engaged and sharpen your focus.
Even if you decide never to write a single line of a manuscript, you will improve your reading, thinking and other intellectual skills just by doing everything as if nothing counts other than writing.[^ahrens2017]
-
The goal of note-taking is not to be better at taking notes, it's to be better at thinking
2022-09-09 11:41
There are plenty of systems out there for note-taking. Many of these systems emphasize "lifehacks", focusing on questions like "how should I organize my notes", "what kind of journal should I use", and "how can I make it easy to capture things I read?"
Answering these questions will not help us get to a place where our notes are more useful for us because they miss the fundamental point. Note taking is about being better at thinking, not writing things down.[^matuschak2017better]
Better questions we could ask ourselves:
- How can I take notes that will help me to reliably develop insights over time?
- How can I shepherd my attention effectively?
- How can I surprise myself with unimagined connections?
- How can I make sure that my notes are adding up to something?
In this context, we can see how we come to the conclusion that 202209091142 Notes are the fundamental unit of knowledge work. 202109091129 Evergreen notes answer those questions.
Technology can play a large role in these misguided attempts to get better at note-taking. New technologies and techniques are available that make it easier for us to shove information into the computer. But as we know 202209091140 Transient notes don't create knowledge. We should be helping ourselves develop computer supported thinking instead of computer supported note-taking.
-
Transient notes don't create knowledge
2022-09-09 11:40
Transient notes do not create knowledge because — by definition — they are not meant to be kept. The notes don't add up to anything after they're taken.1 We know that 202109060835 Knowledge is constructed and that 202109060845 Knowledge is a heterarchy. Transient notes do not create any of these characteristics and most critically don't connect with each other like 202109091129 Evergreen notes do.
This is not to say that transient notes can't be useful. They certainly help us store information, remember things, and process our ongoing experiences, but they'll never accumulate to create knowledge. In this sense, we can view transient notes as "messy thought" inputs for "neat thought" notes that we'll store and connect in our long term knowledge system.[^khoe2016]
Remember that 202209091141 The goal of note-taking is not to be better at taking notes, it's to be better at thinking and we can see how transient notes are not helping us further that goal. As such, 202209091142 Notes are the fundamental unit of knowledge work, definitely not transient notes.
-
Matuschak, A. (2017). Most people take only transient notes. Andyʼs Working Notes. https://notes.andymatuschak.org/z2ZAGQBHuJ2u9WrtAQHAEHcCZTtqpsGkAsrD1 ↩
-
-
Notes should be atomic
2022-09-09 11:30
202109091129 Evergreen notes should be about one thing and one thing only. They should also try to encapsulate as complete of a description of that one thing as possible.1
Writing our notes in this way allows for maximum composability. The concept that each note encapsulates (202109091134 Notes should be concept-oriented) is more transferable and connective across topics and contexts when it's atomic. If it's too broad, you risk missing connections or making connections that are only partially applicable to the note. This gives us the right level of abstraction for creating a web of densely connected notes (202109091132 Notes should be densely linked) that allow for emergent properties (202109091133 Notes should associate organically) to surprise us (202109091131 Notes should surprise us).
-
Matuschak, A. (2017). Evergreen notes should be atomic. Andyʼs Working Notes. https://notes.andymatuschak.org/z4Rrmh17vMBbauEGnFPTZSK3UmdsGExLRfZz1 ↩
-
-
Authorization
2022-08-28 12:53
Approaches and learnings about authorization and authentication in software engineering.
-
Up too late
2022-08-27 03:11
An acute awareness of the passage of time and the fleeting nature of life. A deep nostalgia for every day as it passes. The painful beauty that is the human experience. A visceral understanding of the love that transcends reality for the love of your life sleeping next to you and the other love of your life snuggled in her crib with her wubba, Barbara, lovey, and blanket. All the dreams that stack up and likely won’t happen, but being ok with that because of the profound happiness in the banality of a normal life with your family. All the lives you aren’t, weren’t, and won’t be. All the other lives that were, are, and will be that aren’t you. Sonder. But deep, still, calm peace in spite of it. Happiness.
A glimpse into deep time, seeing the future of who I am and who my family is and how we’ve built and lived our lives. Living in a future moment where they’re grown.
-
Microblog
2022-08-27 00:00
This page serves as a simple index of all my microblog posts. This list should be roughly equivalent to searching for the #microblog tag.
If you're looking for my longer #blog posts see 201610270000 Tech — Work — Ramblings.
- 202410220101 The Final Edition of Embedded Muse
- 202410201110 Engineering Multi-classing
- 202408250920 1BRC in rust in depth
- 202408220939 Go is not worth it
- 202405051458 Mobile Content Width
- 202405051251 Timeout Killer
- 202405021450 Ideating
- 202404232122 Masonry Layout CSS
- 202404232120 Hell yeah NASA
- 202208270311 Up too late
-
Beauty will save the world
2022-08-22 16:35
Beauty will save the world.1
-
Dostoyevsky, F., McDuff, D., & Todd, W. M. (2004). The idiot. Penguin Books. (Original work published 1868) ↩
-
-
I claim them all
2022-08-22 13:21
"What you need," the Savage went on, "is something with tears for a change. Nothing costs enough here." [...]
"Exposing what is mortal and unsure to all that fortune, death and danger dare, even for an eggshell. Isn't there something in that?" he asked, looking up at Mustapha Mond. "Quite apart from God—though of course God would be a reason for it. Isn't there something in living dangerously?"
"There's a great deal in it," the Controller replied. "Men and women must have their adrenals stimulated from time to time."
"What?" questioned the Savage, uncomprehending.
"It's one of the conditions of perfect health. That's why we've made the V.P.S. treatments compulsory."
"V.P.S.?"
"Violent Passion Surrogate. Regularly once a month. We flood the whole system with adrenin. It's the complete physiological equivalent of fear and rage. All the tonic effects of murdering Desdemona and being murdered by Othello, without any of the inconveniences."
"But I like the inconveniences."
"We don't," said the Controller. "We prefer to do things comfortably."
"But I don't want comfort. I want God, I want poetry, I want real danger, I want freedom, I want goodness. I want sin."
-
In the Desert
2022-08-22 13:06
In the desert I saw a creature, naked, bestial, Who, squatting upon the ground, Held his heart in his hands, And ate of it. I said, “Is it good, friend?” “It is bitter—bitter,” he answered; “But I like it “Because it is bitter, “And because it is my heart.”
There's an interesting difference in interpretation that can be made here. On one hand the poem could be a comment on the inherent sinful and corrupt nature of humans.2 On the other, it could be emblematic of the individualistic freedom of humanity; the right for a human to choose the bad with the good, to own the whole human experience, the freedom to eat your own heart (202208221321 I claim them all).
-
Crane, S. (1895). The Black Riders and Other Lines (1st ed.). Copeland & Day. ↩
-
Wikipedia contributors. (2021). In the Desert. In Wikipedia. https://en.wikipedia.org/w/index.php?title=In_the_Desert&oldid=1053090812 ↩
-
-
Poetry and quotes
2022-08-22 13:05
- 202208221306 In the Desert
- 202210141736 Ozymandias
- 202307282003 An Ode
- 202308271554 This be the verse
- People (society) plant trees under whose shade they will never lie
Literature Quotes
- 202208221635 Beauty will save the world
- 202208221321 I claim them all
- 202209201414 Science can only amplify
- 202209121025 The world wants new men
- 202211021054 Yearn for the vast and endless sea
- 202304041631 The end of all things
- 202308271610 Quarry workers' creed
- 202408221254 Ten thousand times the spider would rebuild
- 202408221304 Desolation tries to colonize you
- 202408232359 The abyss gazes back
Quotes
- 202408222021 Have fun and be terrified
- 202411161349 As if I've deliberately come back to this one day
- "An investment in knowledge always pays the best returns" - Benjamin Franklin
Stories and Folklore
Songs
Latin
-
Work with people who know they don't know
2022-08-21 14:26
If an expert says something can be done he is probably correct, but if he says it is impossible then consider getting another opinion.1
Experts bring their opinions and knowledge when looking at something new. Whatever doesn't fit into that understanding and frame of reference is dismissed. In this way, they can block innovation.2
The truly great leaps in a field come from novel thinking, not from incremental improvement on the existing paradigm. Note that this doesn't mean that the incremental improvements aren't important and don't set the stage for the bigger leaps. But in order to facilitate novel thinking, we need to approach things without these pre-conceived frameworks.
It's best to work with people who are consistently open to new ideas and humble to lifelong learning.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp. 336). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range ↩
-
-
Learning to follow and learning to lead
2022-08-21 14:04
What you learn from others you can use to follow; What you learn for yourself you can use to lead.1
If you put in the hard work (202208211352 There is no shortcut to learning) to learn something for yourself, you'll know it through and through. You'll be able to make connections to other pieces of information. You will have constructed durable knowledge for your life (202109060835 Knowledge is constructed).
I often think of this in relation to 202109061338 Software Engineering where some of the simplest tools to learn end up causing the most pain down the road, whereas tools that teach you how they work even if it takes more effort end up being more stable, reliable, and maintainable. #thread (move to own zettel)
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp.292). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Hawthorne effect
2022-08-21 13:58
There was a company that wanted to see what factors they could change to increase productivity. They did things like change the color of the paint on the walls and the food offered in the cafeteria. They were curious about how it always rose after each change so they made another change and switched that thing back to its original state before the study. Productivity rose again! What they discovered is called the Hawthorne effect.1
The Hawthorne effect states that when you show care the recipient of the care will respond more favorably to you. The employees interpreted the changes as the company caring how they felt and worked, and they were more happy because of that. Not because of the specific changes.
The lesson for leadership is that we should actually care and whether we get it right or not, people will know that we care and give us care back.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp.287). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
There is no shortcut to learning
2022-08-21 13:52
There is a story from ancient Greek times of a mathematician telling a ruler there were royal roads for him to walk on, and royal messengers to carry his mail, but there was no royal road to geometry.1
There is no shortcut to learning. It takes hard work over a long period of time to learn and know things. 202109060835 Knowledge is constructed, 202109060836 Knowledge should accumulate over time, 202109060816 Do your own thinking, think critically2, and most importantly, 202109060833 Sapere Aude!
Keep in mind how what we struggle to learn impacts 202208211404 Learning to follow and learning to lead.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp.286). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 18). Addison-Wesley. ↩
-
-
Double blind studies
2022-08-21 13:42
A double blind study is a method for conducting research (particularly in medicine) where the researches nor the subjects know whether the subjects are in the control group or the variable group.
This is required because 202208211340 Users can affect the validity of simulations and science has proven that bias impacts the results of studies in which the researchers know who is in what group.
-
Users can affect the validity of simulations
2022-08-21 13:40
People who use simulations or participate in them can affect the outcomes of the simulation based on their knowledge of it.1
For instance, a simulation that is meant to help study behavior may have misleading results because the subjects know that they're being studied and change their behavior accordingly.
This is especially relevant to and forces the use of 202208211342 Double blind studies.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp.252). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Simpson's paradox
2022-08-21 13:31
Simpson's paradox is a phenomenon in probability and statistics in which a trend appears in several groups of data but disappear or reverses when the groups are combined.[^wikipedia2022simpson]
The paradox can be resolved when confounding variables and causal relations are appropriately addressed in the statistical modeling.
The paradox has been used to illustrate the types of misleading results that can be produced through the misuse of statistics.1 In particular, 202304031254 Small careful samples are better than large poor ones. If we measure a homogenous group and take an average, we'll likely learn something. If we measure heterogenous groups and take the average, we'll likely see something misleading. For example:
The average adult has one breast and one testicle, but that does not represent the average person in our society.1
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp.251). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩ ↩2
-
-
Incremental change is always better
2022-08-15 13:17
When making drastic changes or migrations (202205111310 Migrations are the only solution to tech debt), it's always better to make deliverable, incremental change than to try to do big projects and releases.
There are times when it's tempting to think that things are just too different and there needs to be a big cutover or separation from the old. This could be true, but even in those circumstances, there are ways to make the cutover incremental, the feature replacement incremental, or similar.
It's true that incremental change can be more complex and is most likely slower than a big change, but as we know 202203221630 Slow is steady, steady is smooth, smooth is fast and 202304031244 There is never time to fix things later.
This is one of those rakes that people (including myself) want to continue stepping on even though we have stepped on it many times in the past. This is why I say incremental change is always better and not almost always. It's because you have to be strong to not allow yourself to be fooled into thinking you're the exception (202109251155 Desire vs expected outcome in decision making).
-
Everybody loves an existence proof
2022-08-13 14:31
Everybody loves an existence proof.
– John Carmack1
There is nothing that spurs progress more quickly and easily than an existing, working thing.
If you want to get funding, clearance, approval, investment, adoption, etc. for something, there is undoubtedly no better way to go about it than to show the thing does what you say it will and already works.
If you want to change the world’s energy supply, build a small, cheap, working fission reactor, power your company with it, and then the world will change.
If you want to code a new system, build part of it and show that it works and is solving a real problem. Prove through its existence that it’s not only doable, but already so near to being fully realized that there’s no conceivable reason not to continue with it.
The benefits of something are obvious to anyone if they already exist.
-
lexteam. (2022, August 4). Ep. 309 – John Carmack: Doom, Quake, VR, AGI, Programming, Video Games, and Rockets | Lex Fridman Podcast. Lex Fridman. https://lexfridman.com/john-carmack/ ↩
-
-
System design
2022-08-13 13:27
Designing systems is one of the common, critical tasks of a 202206112233 Staff-plus engineer. It's something that sets a 202206112236 Senior engineer apart. It proves that you can understand tradeoffs in technology and organizational size and maturity. It shows that you understand how to build things that are optimal for now and have a clear path to the future you're working toward. Many engineers plateau at a place where they can understand and implement any type of tech but aren't capable of planning out new systems from scratch based on some need of the business.
Example systems to learn how to design
- Rate limiter
- Consistent hashing
- Key-value store
- Unique id generator in distributed systems
- Url shortener
- Web crawler
- Notifications
- News feed
- Chat
- Search autocomplete
- YouTube
- Google Drive
Example: Scale from 0 to 1M users
- start with a single server. DNS somewhere directs all traffic to the web server where everything from apps, to APIs, to DBs are housed.
- The first interesting scale point is when you need to separate your database from your web servers. At this point you probably have enough reason to discuss the exact details of the DB you're using. Should you be using a relational DB or a NoSQL document store?
-
The value of a great tech stack
Non-technical reasons to have a great tech stack
2022-08-13 09:54
I’ve been doing some thinking lately about how much value to place on a great tech stack. There are two lenses in particular that I’m looking at this through: value to a product organization and value to the individual engineer as a measure of the desirability and enjoyment of working there.
I’ve been doing some thinking lately about how much value to place on a great tech stack. There are two lenses in particular that I’m looking at this through: value to a product organization and value to the individual engineer as a measure of the desirability and enjoyment of working there.
-
Types are not a substitute for tests
2022-08-11 22:28
Type systems cannot and should not be viewed as a replacement for testing. Types cannot ensure that the code you wrote produces the actual outcome that you want it to. Tests on the other hand, can be used to verify and maintain that correctness.
Tests can never provide an unbroken chain of checks, from the database all the way to the frontend React props, guaranteeing that all of the data has the right shape [emphasis mine]. Types can't (usually) tell us when we accidentally put a "!" in front of a conditional. Focusing on one or the other means sacrificing quality, work efficiency, or both.1
Conversely 202208112226 Tests are not a substitute for types.
-
Bernhardt, G. (2020, April 13). Execute Program. https://www.executeprogram.com/blog/are-tests-necessary-in-typescript ↩
-
-
Tests are not a substitute for types
2022-08-11 22:26
Tests cannot and should not be viewed as a replacement for a type system. Imagine needing to test all function arguments against all permutations of possible variable types in a dynamic language. It's certainly possible, but it's not done in practice and would bloat your test suite immensely. Instead tests should be used to verify the code under test is logically correct and produces the intended outcome.
Tests can never provide an unbroken chain of checks, from the database all the way to the frontend React props, guaranteeing that all of the data has the right shape. Types can't (usually) tell us when we accidentally put a "!" in front of a conditional [emphasis mine]. Focusing on one or the other means sacrificing quality, work efficiency, or both.1
The constraints, invariants, and information encoded in type systems also serve more purposes than just ensuring things like correct usage. They also serve as documentation and communication mechanisms about intent.
Conversely 202208112228 Types are not a substitute for tests. These two systems need to be used together to achieve the best outcome.
-
Bernhardt, G. (2020, April 13). Execute Program. https://www.executeprogram.com/blog/are-tests-necessary-in-typescript ↩
-
-
Zero to engineer
2022-08-10 19:44
How do get into 202109061338 Software Engineering?
Let's go at this from a specific angle.
What would it take for me to get an entry level job as a programmer?
- Get past the résumé screen
- Get past the recruiter screen
- Get past the coding exercise
- Get past the onsite interviews
Preparing for these takes different amounts of time and require different skillsets. If we include the dependencies between each step and sort them by preparation time, we get a new ordering.
- Getting past the coding exercise — is the basis for 2 and 3, so it must be solid and come first.
- Getting past the résumé screening — requires things like example projects and raw time spent coding.
- Getting past the onsite interviews — definitely the point where not knowing your shit can bite you, but it's also possible to be great at interviewing and compensate for your rough patches with things like work ethic and initiative.
- Getting past the recruiter screening — easy to bullshit past if the résumé checks out, but always easier if you're confident and capable than faking it.
Getting past the coding exercise
Helps if you know what it will be. Many companies make things like this available in advance. If so, you have an obvious path.
-
Information and intelligence
2022-08-10 10:13
Information and intelligence are subtle concepts. Subterfuge, espionage, propaganda, mis-information, and narrative intent are just some of the areas that can cloud the truthfulness or usefulness of information and intelligence.
More than ever it's important that 202109060835 Knowledge is constructed in the receiver, but authors and gatherers of information and intelligence can work to induce an intended construction.
It's important to use tools like 202203210833 Systems thinking to try and understand things. It's vital to cut through what we would like to be true to the base facts of reality (202109251155 Desire vs expected outcome in decision making and 202203210830 When your model and reality conflict, reality is always right).
Thoughts on the topic
-
Let myths that benefit you run
2022-08-10 10:02
When there's a myth that benefits you, you just let it go. You let it happen because it gets you further without you doing any work.
That's what the CIA does well [...] they don't answer any questions. They don't say anything. Wherever the myth goes, they let it go.1
-
lexteam. (2022, August 8). #310 – Andrew Bustamante: CIA Spy | Lex Fridman Podcast. Lex Fridman. https://lexfridman.com/andrew-bustamante/ ↩
-
-
Making a Rust Roguelike
Making a Game Out of Learning
2022-08-01 00:00
In the process of learning Rust, I'm following a great tutorial for building a roguelike game.
Background
There are a lot of ways to learn a programming language: from docs and books to puzzles to fun side projects.
There's a really great community on Reddit called /r/roguelikedev and one of their coolest resources is a comprehensive tutorial for making a roguelike game from scratch in Python called The Complete Roguelike Tutorial or TCOD. A guy named Herbert Wolverson built a really amazing version of that tutorial in Rust (with some changes).
One of my friends who's into game development showed me all these things and how he was going through that Rust tutorial and porting it to his most comfortable language, C#. Since I was already learning Rust, I thought I would give the Herbert's Rust version a try.
So come along and join me as I document some progress and thoughts about Rust and game development. Hopefully I'll be able to build the final game to WASM and embed it as a project here on the site.
-
Staff engineer promotion packet
2022-07-31 09:47
Here are some questions to ask yourself in order to prepare a promotion packet for a staff engineering position.
- What are your Staff projects? What did you do? What was the project’s impact (including a well-defined goal)? What made this project complex? Keep it very short and then link out to supporting design documents1
- What are the high-leverage ways you’ve improved the organization?
- What is the quantifiable impact of your projects? (Did you increase revenue by $10 million? Did you reduce year-on-year customer support tickets by 20%?)
- Who have you mentored and through what accomplishments?
- What glue work do you do for the organization? What’s the impact of that glue work?
- Which teams and leaders are familiar with and advocates for your work? What do they value about your work? One sentence, include data (e.g. survey data) when possible
- Do you have a real or perceived skill or behavior gaps that might hold you back? For each, how would you address the concern? One sentence each
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
Garbage in, garbage out
2022-07-27 20:00
There's an old adage concerning the accuracy of systems.
Garbage in, garbage out.
The implication is that if you (for instance) give bad data to an algorithm, you'll get a bad result. The opposite is sometimes implied as well: if you give good data to a system, you'll get good results.
This can be a helpful heuristic for many things, but it's not necessarily true. In fact a more helpful, but more nuanced rule of thumb should be to check whether 202207271958 Stability or instability dominates a system. This alternative mantra shows how a system that has strong stabilizing or converging forces can accept "garbage" as input and give great results. Conversely a system with strong diverging, destabilizing forces can accept extremely precise inputs and still produce garbage results.
-
Stability or instability dominates a system
2022-07-27 19:58
When undertaking a simulation or evaluating a system for its effectiveness or accuracy, it’s important to look closely at whether stability or instability (do small changes result in large differences in outcomes) dominate the problem. It will determine if the results are valuable or even impossible to find.1
Related to this is whether the 202207272000 Garbage in, garbage out rule of thumb is applicable to the system in question. If a system has strong stabilizing or converging forces it can accept "garbage" as input and give great results. Conversely a system with strong diverging, destabilizing forces can accept extremely precise inputs and still produce nonsense.
Note: we can actually use the instability of such systems as a guide for a numeric/iterative approach to getting good results. If we see a large jump in results after a few iterations or steps, we might be able to conclude that we've "strayed too far" and are under the influence of the strong divergence, which in turn tells us to "re-evaluate" some of the most recent steps more carefully. This is known as a predictor-corrector.
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn (pp. 251-270). Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Expertise is required to create useful simulations
2022-07-27 15:30
It is necessary to have a great deal of special, expert knowledge in a field in order to create an accurate, useful simulation or program.[^hamming2020]
The argument for the requirement of deep practical knowledge:
- We know that a simulation cannot be 100% accurate to the real world (202203210832 Models are necessarily incomplete)
- Ergo, we will have to accept inaccuracies somewhere in the simulation
- Ergo, we need to know which inaccuracies are acceptable and which are not
- Ergo, we need to understand the field, the purpose of the simulation, the way people will interpret it, and how to make a simulation feel accurate even if it's slightly unfaithful to reality (e.g. a flight simulator giving pilots the right feeling for flying)
- Ergo, we have to be an expert to make a good simulation
A correlated, responsible first question when faced with a simulation of anything is "why should anyone believe this simulation is accurate or useful?" This question will make you better at creating simulations as well as more capable of detecting when others have not done well at this.
We need to be suspicious about getting too many solutions and not doing enough careful thinking about what we've seen. Volume output is a poor substitute for acquiring an intimate feeling (through deep thought about the underlying situation) for a situation being simulated.
-
An order of magnitude of change produces new effects
2022-07-27 15:27
Systems tend to behave in a reliable way when small changes are introduced. On the other hand, when large changes happen, the system can show fundamentally new effects and outcomes (202104291540 Emergence). Typically a single order of magnitude change is enough to produce these fundamentally new effects.1
-
Hamming, R. W. (2020). The art of doing science and engineering: Learning to learn. Stripe Press. https://www.goodreads.com/book/show/53349431-the-art-of-doing-science-and-engineering ↩
-
-
Creating a monad from a set
2022-07-27 13:24
Say we have a set ($M$). What would make that set a monoid?
Our first step to Monads is to make the set a Magma. A magma is a set that has any binary operator ( $\cdot$ ) that takes two elements of that set and produces another element in that set.
$$a,b \in M \implies a \cdot b \in M$$
Next, we add associativity to turn our Magma into a Semigroup.
$$\forall a,b,c \in M \enspace [(a \cdot b) \cdot c = a \cdot (b \cdot c)]$$
Next, we add the identity constraint to turn our Semigroup into a Monoid.[^wikipedia2022monoid] Note that we specify the "left" and "right" identity since we don't have the commutativity constraint.
$$\exists i \in M \enspace [\forall x \in M : | : i \cdot x = x \land x \cdot i = x]$$
Notice also that as a category, a monoid contains only one item (hence the "mon-" prefix). All morphisms loop back onto the same object. This is an english language way of saying the same associativity and identity ideas.
This is where we take a turn away from sets. The (in)famous saying
A monad is just a monoid in the category of endofunctors.
shows that we need to look at the monoid through the lens of a functor to create a monad.[^lipovaca2012]
-
Category Theory in Life
2022-07-18 19:46
Category theory is abstract, but its abstraction makes it apply to many things around us in ordinary life.
What is category theory?
Category theory is the mathematics of mathematics
Mathematics is the logical study of how logical things work.
In order to study things logically, we have to ignore some details of reality that make things behave illogically. It's only in the abstract world where things do behave perfectly logically
Category theory is the logical theory study of the logical study of how logical things work.
The map of the London underground is a good example of a "mathematics", where the geographical map of the exact tubes are not the purpose. The slightly unreal, more representative version helps us in a certain situation navigate more easily. We choose to ignore certain details to represent things more logically.
Objects and morphisms
$A \rightarrow B$ means there's a $morphism$ between $A$ and $B$.
So if we have
$$A \xrightarrow{\text{is the mother of}} B \xrightarrow{\text{is the mother of}} C$$
We can deduce
$$A \xrightarrow{\text{is the grandmother of}} C$$
Instead of looking at things based on their intrinsic characteristics, we can learn a lot about them (and other things) by their relationships to other things: hence the "Category". This gives us more context
-
Optimal line length for readability
2022-07-06 16:26
The optimal line length for readability on a screen is 50-75 characters.1
-
Scott, E. (2022, May 10). Readability: The Optimal Line Length – Articles. Baymard Institute. https://baymard.com/blog/line-length-readability ↩
-
-
Curriculum design for software engineering
2022-06-28 20:18
I want to teach computer science, what should I do?
vs
I want to make software, what should I do?
Need to ask questions about the desired solution to figure out things like goals, constraints, and methods before you can build that solution. In the education case, the “solution” is the curriculum.
Ask things like:
- What age are the students?
- What exposure have they had before?
- Is this required? An elective? An extracurricular?
- How long is the class? How often does it meet?
- Is it even a class or something else?
- How many students are in the room?
etc. but also think about things like
- Is there internet access?
- Is the teacher new to programming?
- Can the students type?
- Are there students with disabilities?
- Do the students have regular computer access at home?
- Do the students have regular computer access at school?
Think about
- Equity, Rigor, and Scale
Methods
- Required courses
- Don’t scale though, need certifications for teacher. The economy for experts means that they’ll go to Jane Street and learn a huge amount more than public HS
- Rigor has to take a hit because everyone has to pass the course to graduate
- Elective courses
- Not equitable. Hugely biased (currently) to white and asian males, failures and achievement gap #thread lead to further disparity.
-
Types, and why you should care
2022-06-28 14:49
From a talk[^minsky2019] by Yaron Minsky of Jane Street.
Typed vs. Untyped
- Untyped — scripting, lightweight, friendly, and slow.
- Typed — Serious, professional, unfriendly, verbose, and fast.
Some definitions
- Values — data, things
- Variables — can be different values, part of the lexical portion of the language
- Expression — composed out of variables, values, and other things
- Types — categorization system for values; groups values into named groups; strings, integers etc.
- In untyped language, values have types
- In typed languages, values, variables, and expressions all have types. (For instance, variable is typed when it always contains a variable of that type)
Why types?
- Make programs faster, typically through compilation/interpretation loop having “hints” and more information.
- V8 for instance can be super fast, within a factor of 3 or so from a compiled language (but this is through herculean effort of thousands of people over tens of years and complicated things like tracing compilers and things)
- This is predictable performance vs V8
- Make programs more understandable
So why don’t people always use them?
- Often make programs more verbose — when the language doesn’t have a convenient way to express something, it’s difficult to express it at all or in a good way
-
Computer Science
2022-06-19 13:00
The nitty-gritty of computation and technology. Contrasted with 202109061338 Software Engineering which is more about the practice of writing software and careers or organizations in that field.
Curriculum
- 202208101944 Zero to engineer
- 202206282018 Curriculum design for software engineering
- Maybe start here?: MIT OpenCourseWare for Computer Science
- Maybe I should make this yet another structure note that lays out the whole process and what order and how things are connected? Probably just start doing that in this note and maybe split it out later.
Programming language design
- 202107272307 Data-first pipe design
- 202107272306 Data-last pipe design
- Go kind of sucks?
Asynchronous computing
- How does asynchronous stuff really work in JS? Promises, async/await, under the hood etc. #thread answer: JS spec requires implementations of JS to implement an event queue which JS processes fifo. Could be fun to implement a JavaScript runtime in Rust or something. (Might already exist from Mozilla, V8 is written in C++)
-
Delivery Performance vs Value Delivery
2022-06-17 12:06
An alternate title for this essay is The "How" Matters.
I want to talk more about performance — the act of executing, building, delivering, how our team works together and with other teams, and how these stack up against our potential.
I don't want to stop talking about product value — the product, its value, our direction, how we choose what to build, or if what we built was valuable or not.
I just want to additionally talk more about performance.
Here's the way we typically talk about the product, its value, and our performance.
At an individual level you know if you’re doing a good job based on how effectively you’re contributing.
At a team level you see if the things the team built were valuable over a longer period of time.
Directors and executives plan for years out and it can take a long time to get feedback about the value of their decisions.
Therefore, we can’t know as easily or quickly if leaders (or groups of people as a whole) are doing a good job over these long, ambiguous timelines
See 202104291527 Live in the ambiguity and 202104291528 Leaders have to accept a slower feedback loop for more support of this position.
-
Career checkup template
2022-06-12 20:47
Sourced from Will Larson's blog Irrational Exuberance[^larson2022checkup]
This is a simple template for checking in on your career. Here’s how to use it:
- Look through the sections. If there are any sections that don’t resonate with you at all (as opposed to just feeling hard to fill in), then remove or edit them.
- Fill in the sections. Feel free to jump around to answer the parts that you have the most energy for.
- Revisit a few days later: anything you want to change after sleeping on it?
- If possible, find peers or friends to share and discuss each others checkups together.
- Store it away somewhere to review a year from now.
Summary
Write this section last! How would you summarize everything else you wrote below? Try to keep it to max of two paragraphs.
<start writing here!>
How are you feeling about your career right now?
Write a few paragraphs about how you’re feeling about your career right now. Don’t worry about writing this for consumption, focus on finding words that resonate with you!
<start writing here!>
What did you expect / what happened in the last 5 years?
When you think back to five years ago, what did you expect to happen over the following five years? What has happened? How do you feel about the difference between those two?
-
Homoiconic programming languages
2022-06-12 13:09
A language is homoiconic if a program written in it can be manipulated as data using the language, and thus the program's internal representation can be inferred just by reading the program itself. This property is often summarized by saying that the language treats "code as data".[^wikipedia2022homoiconicity]
One of the most commonly cited homoiconic languages is Lisp. Clojure (a modern dialect of Lisp) and Julia are also homoiconic.
Example
The following Lisp S-expression creates a list of 3 elements with values 1, 2, and 3, and is precisely equivalent to the code required to create the object itself.
; => (1 2 3)
More broadly, all Lisp programs are lists (a.k.a. objects which can be manipulated with the Lisp language). Slightly more concretely, the string representation of a Lisp program is valid Lisp data. Passing a hard coded value or passing a Lisp program as input to a Lisp function would behave identically.
An example of non-homoiconicity in JavaScript:
const arr = ; arr.; // => '1,2,3'
Here, the string representation (even if we print it more nicely as
[1, 2, 3]
) is not the same as the code required to create the object (for instance, the variable declaration part). This is a simple example that might fall down on a deeper level, but gets the idea across. -
Stop preening
2022-06-11 23:13
Preening is the act of working on low-impact, high-visibility tasks (202204091039 Impact vs effort model of task value) that get you recognition without actual achievement. This is a viable strategy for short term maximization but won’t help long term (202109251140 Play long term-games).1
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
-
Stop chasing ghosts
2022-06-11 23:12
Don’t judge your current situations like previous ones. Come at everything with fresh energy.1
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
-
Work on what matters
2022-06-11 23:10
Make the most out of your time.
Hamming has a good quote about this in 202205092134 The Art of Doing Science and Engineering.
To the extent you can choose, work on the problems that you think will be important.[^hamming2020]
[...] how to do great things. Among the important properties to have is the belief you can do important things. If you do not work on important problems, how can you expect to do important work?[^hamming2020]
Working on what matters is important because the only viable long term bet on your career is to focus on work that matters, do projects that develop you, and steer towards companies that value genuine experience. (202109251140 Play long term-games)
- Avoid snacking — 202204091039 Impact vs effort model of task value and 202106241531 Eisenhower matrix of task value
- 202206112313 Stop preening
- 202206112312 Stop chasing ghosts
What does matter?
This section was written specifically with the responsibilities of a 202206112233 Staff-plus engineer in mind, but is generally adaptable to other situations as well.[^larson2021staff]
Companies operate in eternal iterative elimination tournaments
- Existential issues — nothing else matters if your company stops existing. Note that this isn’t the most efficient place for effort but it should be swarmed on by everyone.
-
Staff right-hand archetype
2022-06-11 23:00
A right-hand staff archetype extends the reach of an executive by leaning on the executive’s scope and authority. These are typically found in complex organizations and provide extra leadership bandwidth for these large scale situations. Right Hands are the rarest of the archetypes since they are usually only found in large, complex organizations.1
Problems that the Right Hand deals with are never purely technical and usually involve an intersection of business, technology, people, culture, and process. They often dive into fires and edit approaches, align people, delegate things effectively, and get things moving again. They only work on absolutely essential problems, but they’re always putting out the next fire as soon as one has been solved.
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
-
Staff solver archetype
2022-06-11 22:59
A solver staff archetype digs deep on specific problem areas of any complexity in order to find a path forward. Some solvers focus on specific areas for long periods of time whereas others bounce around, helping out with whatever is most important guided by organizational leadership.1
Solvers typically don’t deal as much with organizational wrangling, instead working on known (or known unknown) issues. There can be a sense of transience though that must be handled delicately so that teams left to maintain “solved” systems don’t feel slighted.
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
-
Staff architect archetype
2022-06-11 22:55
An architect staff archetype is responsible for the direction, quality, and approach within an area. They leverage in-depth technical knowledge and organization level leadership to satisfy user needs and org objectives.1
For a domain to warrant an Architect role, it must both be complex and enduringly central to the company’s success. Some companies like architects to be deep in the code and others don’t want them to write any code at all. Typically architects are effective with areas of exceptional complexity or large amounts of tech debt.
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
-
Staff tech-lead archetype
2022-06-11 22:52
A tech-lead staff archetype guides the approach and execution of a single particular team. Sometimes they partner across teams and are occasionally part of a Tech Lead Manager role or similar to that role but with less people management responsibilities.1
These are the most common of staff engineers. They do a lot of coordination and team process. They set roadmaps and work with product managers. They delegate more over time to grow others and their impact. They code less over time and acknowledge that when they code less, their team is growing more. They are still the vision behind the team’s direction though and step in to unblock and build alignment when needed.
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
-
Senior engineer
2022-06-11 22:36
Defining what makes an engineer a “senior engineer” is a murky task. There will always be differences from one company to another, but there are some general patterns that most people agree on.
Skill
- Achieved mostly independent ability to solve any task given.
- Knows when they need to involve others for things that they don’t have the skills for or believe should be group efforts
Responsibilities
-
Staff-plus engineer
2022-06-11 22:33
Staff engineering is a complex topic. As nebulous as it can be to get promoted to a 202206112236 Senior engineer role, it’s considerably harder to move into staff-plus roles. Whereas the definition varies a bit from company to company for senior engineering, the definition or even existence of staff-plus roles is completely irregular across the industry. Will Larson wrote an excellent book, Staff Engineer: Leadership Beyond the Management Track[^larson2021staff] on what it means to be a staff-plus engineer. This structure note and its children mostly come from that resource, but also other citations where noted. That book is also (mostly) publicly available at staffeng.com.
[!important] Being a staff engineer is not just a role. It’s the intersection of the role, your behaviors, your impact, and the organization’s recognition of all those things.
The value of the title
- Bypass informal gauges of seniority (especially useful for underrepresented groups)
- Facilitating access to “the room”
- Increase current and career earnings
- Access to interesting work
- Different rather than better
Archetypes
-
Zen in the face of programming
2022-06-11 21:25
There's a hill that we climb through our career as programmers.
We start at the bottom where everything is difficult, foreign, and new. We have all the energy, enthusiasm, and patience in the world.
We climb, learn, and grow strong. We enjoy climbing. We get better at it. We ascend at an increasing pace.
But then, we start to lose steam. We no longer have the enthusiasm for the climb that we once did. We want to get to the top at long last. We want the code to be good, complete, perfect. If only we could do that rewrite. If only everyone could write less buggy code.
I know best, I've been climbing for years, let me get to the top already!
We lose faith. We stumble. We despair at the infinitude of the climb in front of us. Surely there is no end. Surely there's no point to it all. The climb breaks us.
And yet, when we're broken, we find the truth — there is no top — there's always one more step. We find that the climb is the purpose. With revelation comes renewed joy and a peaceful, sustainable way to continue the climb.
We find joy in sending other climbers lifelines. We find joy in looking around and coming to know the people below, next to, and above us on the climb.
-
Friedrich Nietzsche
2022-06-09 08:53
German philosopher (philologist by training) whose works centered around themes of 202206051528 Moral Philosophy and the history of morality.
On the genealogy of morals
Comprised of 3 essays, this is perhaps the most well known work of Nietzsche.[^nietzsche1887]
The first essay centers on the history of morality. Nietzsche contends (through some philological argumentation) that “good and bad” is not the same as “good and evil”.
”Good or bad” is a delineation between “good = aristocratic = beautiful = happy = loved by the gods = strong = vital” and “bad = common = plebeian = stupid = lacking”. The “knightly-aristocratic” caste are good insomuch as they have noble qualities whereas the “bad” people were simply people who lacked those qualities. It’s not a moral judgment in itself, it’s a descriptive categorization of humans.
“Good and evil” then comes from a “priestly” caste at a later date. The purpose of this new distinction is to reverse the judgment and to assign moral weight to it. The priestly caste creates a world in which the strong, dominant, rich, powerful are evil for using those traits (Nietzsche precisely sees no issue in “Man” wielding his strength and dominating others) and the new “good” are the downtrodden, meek, subservient people who require things like neighborliness, timidity, humility to survive against the “blonde beasts”. This results in the Judeo-Christian tradition and (according to Nietzsche) a self-abnegating inward focus of the mind and instincts. Instead of being strong, vital, active, and forgetful[^1] of wrongs done to us, we become cruel, resentful, vengeful people who spend our time thinking about the abuses of others and competing to be the most “debased” type of human.
-
Overton window
2022-06-05 22:03
Named for its inventor, Joseph Overton, an Overton window is the range of “acceptability” a political idea has at any given time.1
Some ideas’ windows move over time. For example same-sex marriage used to be unthinkable and now is politically possible and recognized by the law of the land.
This concept has an interesting application to 202206051528 Moral Philosophy. The political scientist James C. Scott contends that small trangressions against the law (for instance jaywalking) are necessary exercises for us to routinely do in order to be able to later act morally when called upon to overthrow laws that are unjust.
Another intersection with moral philosophy is that we may accidentally shift our thinking about the wrongness of small transgressions over time resulting in our willful ignorance that they are still wrong. We must not let our window slip, but rather continually acknowledge that there are times and places where minor wrongs are harmless.
A great example of this are the many American sports teams with names and mascots that are racist against indigenous people.
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Moral desert
2022-06-05 22:02
Pronounced "dessert", coming from "deserve".
The concept in philosophy of "getting what you deserve" based on your actions. In the vein of karma or the final judgement of St. Peter.
Claims about desert are familiar and frequent in ordinary non-philosophical conversation. We say that a hard-working student who produces work of high quality deserves a high grade; that a vicious criminal deserves a harsh penalty; that someone who has suffered a series of misfortunes deserves some good luck for a change.1
-
Feldman, F., & Skow, B. (2020). Desert. In E. N. Zalta (Ed.), The Stanford Encyclopedia of Philosophy (Winter 2020). Metaphysics Research Lab, Stanford University. https://plato.stanford.edu/archives/win2020/entries/desert/ ↩
-
-
RGM development
2022-06-05 16:39
Rube-Goldberg Development is a term I’ve come up with to describe the trial and error development that poorly crafted systems often force upon us or result in.
In RGM development, we build one step at a time, requiring perfect synchronicity between each moving piece and acquiring that synchronicity only through tedious trial and error. Then, we add another step to the chain or pile.
This works to a point, but a) is tedious, time consuming, and error prone and b) will completely fall down when faced with change.
Imagine a Rube Goldberg machine built with a specific marble that will run its length. If we swap that marble for a different one with different weight, drag, or coefficient of friction, the machine won’t work. The only option is to rework the whole machine for the new constraints, going through the whole trial and error process again.
Similarly if you wanted something more drastic like a second machine or one that works with a bowling ball, it’s almost pointless to talk about similarities with our machine because there will be many more differences than things that work.
Avoid RGM development because it results in brittle, rigid, and unreliable systems, wasted effort, and inevitable large-scale changes or rewrites in order to reclaim the system (202109251102 Reclaiming software systems). But also be 202206112125 Zen in the face of programming because even the best written 202205131318 Software only supports one order of magnitude.
-
Deontology
2022-06-05 15:30
Deontology is the study of duties or obligations. In relation to 202206051528 Moral Philosophy, deontology ascribes morality to the intention of the act, or sometimes, the act in itself, not the outcomes. It is the adherence to the duty to act in a moral way that makes the action moral. This stands in stark contrast to 202206051524 Consequentialism, though interestingly enough, formulations of our duties, maxima, and imperatives may often have consequentialist underpinnings (e.g. save the most lives possible).[^schur2022] Deontology's guide about which actions we take also differs from the 202206050755 Virtue ethics's guide of what kind of person we should try to be.
One of the greatest examples of deontology in moral philosophy is 202109071212 Immanuel Kant’s categorical imperative.
The word deontology derives from the Greek words for duty (deon) and science (or study) of (logos). In contemporary moral philosophy, deontology is one of those kinds of normative theories regarding which choices are morally required, forbidden, or permitted. In other words, deontology falls within the domain of moral theories that guide and assess our choices of what we ought to do (deontic theories), in contrast to those that guide and assess what kind of person we are and should be (aretaic [virtue] theories). And within the domain of moral theories that assess our choices, deontologists — those who subscribe to deontological theories of morality — stand in opposition to consequentialists.[^alexander2021]
-
Moral Philosophy
2022-06-05 15:28
One of the big questions of all human kind that has been prevalent in 202109071211 Philosophy since ancient times. What it means to be moral, and similarly but slightly differently, what it means to act ethically.
There are 3 main schools of thought in the western tradition of moral philosophy:1
202206052202 Moral desert is a related concept of "what people deserve".
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Utilitarianism
2022-06-05 15:26
A more specific subset of 202206051524 Consequentialism, though frequently used interchangeably with that term1. Classic utilitarians are x202206111658 Jeremy Bentham and x202206111659 John Stuart Mills. Utilitarianism differs from consequentialism as a whole by selecting "utility" — defined classically as human goodness and well-being — as the desired consequence to maximize.
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Consequentialism
2022-06-05 15:24
Nearly identical but more precisely a superset of 202206051526 Utilitarianism. These are often used interchangeably in lay terms. One of the three main western schools of thought in 202206051528 Moral Philosophy, consequentialism defines right action in terms of its consequences.1 The saying "the ends justify the means" can be interpreted in a consequentialist way.
Prominent classical consequentialists (and more specifically utilitarians) are x202206111658 Jeremy Bentham and x202206111659 John Stuart Mills.
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Eudaimonia
2022-06-05 08:10
Ancient Greek word that can be translated as “Happiness” or “right living” or (my personal favorite) “flourishing”.
The term is important because of its use in 202206050754 Aristotle‘s 202206050755 Virtue ethics as the telos (or end purpose) of a person.
A critical distinction to make here is that this “happiness” is distinct from “pleasure”. As Michael Schur puts it,
It’s hard for me to imagine a greater happiness than watching a basketball game eating a sleeve of Nutter Butters, but am I flourishing when I do that? Is that my maximum possible level of fulfillment?1
So we must remember that we’re talking about the kind of happiness that must involve rational thought and virtues of character, not just what feels good in the moment.
It’s a sense of completeness that flows through us when we are nailing every aspect of being human.1
-
Virtue ethics
2022-06-05 07:55
Virtue ethics defines ethical behavior as that which facilitates the fulfillment of a person’s telos of 202206050810 Eudaimonia through the attainment and proportioning of different virtues.
202206050754 Aristotle is the father of virtue ethics and developed the subject in his work Nichomachean Ethics.
More simply put, in order to explain what makes a person good, Aristotle defines
- Which qualities a good person ought to have
- In which amounts
- Whether every person has the capacity for those qualities
- How we acquire them
- What it will look (or feel) like when we actually have them[^schur2022]
Virtue ethics differs from 202206051530 Deontology by guiding us to try and be a specific type of person while deontological ethics guide us on which actions and choices we should make.
Virtue ethics also differs from 202206051524 Consequentialism by having less concern for the ends and more concern for the means than a pure consequentialist ethic would.
Virtue ethics [...] emphasizes the virtues, or moral character, in contrast to the approach that emphasizes duties or rules (deontology) or that emphasizes the consequences of actions (consequentialism).[^hursthouse2022]
-
Aristotle
2022-06-05 07:54
Ancient Greek natural-philosopher and intellectual father of nearly all western civilization and thought.
Philosophy
-
A Career
2022-05-23 13:12
What does it take to have a long and prosperous career? What is success? What is happiness?
Entire careers in themselves
Strategy
- 202304041047 Do significant things with your life
- 202304041619 Keep the whole in mind
- 202205231130 Knowing when to leave
- 202304041100 Learn, don't memorize
- 202109060825 My next level
- 202206122047 Career checkup template
- 202109251140 Play long term-games
- 202106221713 Seven habits of highly effective people
- 202206112312 Stop chasing ghosts
- 202206112313 Stop preening
- 202110231433 Think week
- 202109081301 You'll never get what you don't ask for
- 202206112310 Work on what matters
Philosophy
- 202110212231 Differentiate between self-doubt and idea-doubt
- 202109060816 Do your own thinking
- 202112180923 Don't fear failing, fear failing to try
- 202109251152 How much is enough
- 202112291821 The things we own end up owning us
-
Knowing when to leave
2022-05-23 11:30
How do we know when it's time to leave a job?
Signs to watch for
Growth
- You're no longer growing personally
- You're no longer growing professionally
- There are no opportunities for career growth
- You're underutilizing your skills or being underutilized
- You can’t picture yourself there long-term
Purpose
- You're not passionate about what you're doing
- Your values aren't aligned with your organization
Achievement
- You're perpetually procrastinating
- Your job is negatively affecting your confidence. E.g. you start struggling to 202110212231 Differentiate between self-doubt and idea-doubt.
- You already achieved what you set out to achieve
Burnout
- Everything feels overwhelming
- You need better work-life balance
- You feel exhausted, burnt-out, or dread working
- You actively look for ways to avoid your job
Toxicity
- It’s causing you to develop bad habits
- You wouldn’t want your friends to work there
- You're learning coping mechanisms instead of skills
- There are major issues with your boss
- Your workplace/environment is unhealthy
- Your ethics are being compromised
-
The Last Lecture
2022-05-19 13:14
- People only tell you what you're doing wrong if they still care about you. If they've stopped telling you what you're doing wrong, it means they've given up on you.
- Experience is what you get when you didn't get what you want
- Wait long enough and people will impress you. (Am I too cynical?)
- I don't know but
(one of my star people is|you're)
excited so let me learn more. Tell me more.
Randy Pausch last lecture
-
Learning Rust
A Quick Lesson in Ownership
2022-05-15 00:00
I'm learning rust
A note on format
This is a little stream of consciousness post about my experience working through the official intro to rust book. There's not much point to it other than to help me evaluate how I feel working with the language.
Getting going
I started out by installing
rustup
, but immediately hit a problem. I already had a version of rust installed on my system. It was an old one installed through homebrew. Nevermind that, I just needed to uninstall the brew version and install a newer one via the recommended approach.Next, I installed
rust-analyzer
making sure to grab the VS Code extension which (at the time of writing this) is the recommended language server even though the RLS extension has many more downloads. There's been some sort of maintenance issue or something. I didn't look into it too much, but this is the community direction right now.I found that
rust-analyzer
only works when you have a wholecargo
project as the root of your workspace in VS Code though. It's a bummer that we can't have non-root rust projects and still get the benefit of the language server and all it's hover/intellisense/type goodies. I think there's a way to make this work with arust-project.json
file, but I didn't want to get sidetracked before even getting started. -
Software only supports one order of magnitude
2022-05-13 13:18
Most implemented systems are only designed to support one or two orders of magnitude of growth from the current load. Even systems that were designed for more growth typically run into this problem anyway since knowing the specifics of the future is nearly impossible (202204031033 Abstractions and future-coding are actively harmful).[^larson2016magnitude]
Perhaps contrary to intuition, the fact that the systems don't support more than that means that they were designed well in the first place. They achieved the goals of what they needed to do, didn't try to solve problems that couldn't be predicted, and were efficient solutions to the previous constraints rather than being over-designed.
So, if your systems' usage are doubling every 6 months, you cross an order of magnitude every 18 months. Things that were trivial or afterthoughts at one point can become the focus of whole teams of people and require deep, plateauing investment to use and adapt. You'll have to rewrite or re-implement all of your systems twice every three years. These rewrites are risky and can contend with each other for resources, but they need to be done since 202205111310 Migrations are the only solution to tech debt.
-
Use values as the boundary
2022-05-12 10:23
Using values as the boundaries of your classes/objects/functions/services or w/e is important in testing because it gives you isolation for free.
This is a fairly functional approach. The idea is that there's not this class that has dependencies on a different thing that it calls inside of it. There is simply a passing of values in and out of the thing that does work on it.
For testing, we want a functional core with many decisions/paths, with none or few dependencies. These are easy to isolate and unit test. Then we want a shell that brings the dependencies together, but has very few decisions/paths. These are then the candidates for integration tests.
Values become messages. If values are messages, you get concurrency for free because you have a message passing system. Values afford shifting boundaries.
E.g. via the actor model
actor Sweeper User.all.each { ExpiredUsers.push(user) } die end actor ExpiredUsers user = pop late = user.active? && user.paid_at < 1.month.ago BillingProblemNotification.push(user) if late end actor BillingProblemNotification UserMailer.billing_problem(pop) end
-
Migrations are the only solution to tech debt
2022-05-11 13:10
Migrations are both essential and frustratingly frequent as your codebase ages and your business grows: most 202205131318 Software only supports one order of magnitude before becoming ineffective, so rapid growth makes them a way of life.
In fact, if your software survives an order of magnitude increase, it may have been over-designed in the first place. Add to that the simple fact that they are usually the only available avenue to make meaningful progress on technical debt1 and it follows that we have to know how to do them well.
So how are we going to deal with these inevitabilities?
-
Larson, W. (2018, April 15). Migrations: The sole scalable fix to tech debt. https://lethain.com/migrations/ ↩
-
-
Debugging migrations
2022-05-11 13:03
Given that 202205111310 Migrations are the only solution to tech debt, we need to make sure they proceed productively from start to finish. If your migration is struggling, ask yourself some key questions:1
- Where are people getting stuck in the migration process?
- Are people not starting the migration?
- What cohorts are and aren't migrating successfully
- For teams that aren't migrating, what are they doing instead? How is that going? Should we re-examine our migration path?
- For teams who are migrating, where is the migration bottleneck and what would resolve it?
-
Larson, W. (2022, May 5). Your migration probably isn’t failing due to insufficient staffing. https://lethain.com/migration-isnt-failing-due-to-lack-of-staffing/ ↩
-
The Art of Doing Science and Engineering
2022-05-09 21:34
An excellent book by Richard Hamming on doing science, 202203210833 Systems thinking, 202208131327 System design, and having 202205231312 A Career.[^hamming2020]
- 202207271527 An order of magnitude of change produces new effects
- To the extent you can choose, work on the problems that you think will be important (202206112310 Work on what matters).
- 202207271530 Expertise is required to create useful simulations
- 202207271958 Stability or instability dominates a system
- 202207272000 Garbage in, garbage out
- 202208211340 Users can affect the validity of simulations
- 202208211331 Simpson's paradox
- 202208211352 There is no shortcut to learning
- 202208211358 Hawthorne effect
- 202208211404 Learning to follow and learning to lead
- 202208211426 Work with people who know they don't know
- 202211031026 The unreasonable effectiveness of mathematics
- 202211030958 Creative accomplishments happen over time
- 202110251122 Analogy is a highly effective communication method
- 202304031221 Breadth of knowledge fuels analogy
- 202308271108 Construct hooks for future knowledge
- 202304041100 Learn, don't memorize
-
Firmitas, utilitas, venustas
2022-05-04 11:05
Strength, Utility, Beauty.
202205041102 Vitruvius declared that all buildings should have these three characteristics in his work De Architectura. This concept was widely adopted in Roman architecture.
-
Vitruvius
2022-05-04 11:02
Vitruvius was a Roman architect who lived from c. 80-70 BCE – c. 15 BCE in the first century BCE. He is best known for his writing De Architectura which included the idea that all buildings should have three attributes 202205041105 Firmitas, utilitas, venustas. These principles were widely adopted and shaped the course of Roman architecture. This discussion of perfect proportions in architecture and the human body led to the famous Renaissance drawing of the Vitruvian Man by Leonardo da Vinci.
-
Evolutionary approach to software design
2022-05-03 14:35
An evolutionary approach to software design and development is simply the acceptance that we can't know what we'll need in the future.
Instead of trying to pin these decisions down and hit some specific goal in the far future which we'll likely miss (202204031033 Abstractions and future-coding are actively harmful), we build a system that allows for flexibility (202205031219 Agility is not equal to speed) and reliability through change (202205031449 Optimize for change).
There are many versions of an evolutionary or iterative approach to software design and development. One of the most popular over the past decade has been the Agile methodology. At their core, these approaches are simply different ways of iterating and evolving to our changing circumstances.
-
Design stamina hypothesis
2022-05-03 14:10
We should ask ourselves a critical question:
Is it worth the effort to design software well?[^fowler2007]
Most, if not all, people would advocate for good design if asked directly. Why then do so many people create poor designs in practice?
Typically the answer is that we're taking some shortcuts to reduce quality to gain some sort of speed. Maybe it's to hit a deadline, maybe it's to bring a product to market, or maybe it's just that we don't feel like spending the time to do something properly right now.
No matter what, there's a hidden assumption that good design is slower and bad design is faster. We apparently have to trade off speed for design and just tolerate spending that time on design for some reason.
Even though this is the tacit assumption behind our everyday behaviors. I think it is wrong. Consider the following pseudo-graph from Martin Fowler.
[^fowler2007]
We see that there's a simple relationship that tracks productivity as it relates to cumulative functionality and time.
As a hypothesis, the graph states that there's an initial tradeoff of speed for design. It's slower to get started in a well-designed way because we have to think through our designs or our 202205031435 Evolutionary approach to software design. As we continue through time and cumulative functionality, we see that this tradeoff flips and becomes more pronounced. The further we go, the more payoff there is for a good design.
-
OODA loop of action
2022-05-03 12:47
Developed by USAF Colonel John Boyd, the OODA loop is a cyclic method for decision making. The steps are designed to be carried out repeatedly in overlapping, differently sized feedback and feed-forward loops.
The eponymous steps are
- Observe — Gather information from a range of sources
- Orient — Understand where we are and where we want to be
- Decide — Develop a plan of action
- Act — Carry out the plan
flowchart TD OBSERVE --->|feed-forward|ORIENT ORIENT --->|feed-forward|DECIDE DECIDE --->|feed-forward|ACT ORIENT -->|feedback|OBSERVE DECIDE -->|feedback|OBSERVE ACT -->|feedback|OBSERVE subgraph OBSERVE direction RL o((observations)) o1([unfolding\ncircumstances]) --> o o2([outside\ninformation]) --> o o3([unfolding interaction\nwith environment]) --> o o4([implicit guidance\nand control]) --> o end subgraph ORIENT end subgraph DECIDE end subgraph ACT end
The loop has been adapted for business uses under different names. One such popular name is the Plan-Do-Check-Act (PDCA) Cycle.
-
Agility is not equal to speed
2022-05-03 12:19
To be agile is to be able to move quickly and easily. The key differentiation between agility and speed is the ease with which we can move from point to point, without regard for direction or momentum.
Going at a high speed — by definition — means that we're not concerned with direction. Even including direction and talking about velocity then brings in the consequence of not being able to change direction easily at high velocity because of momentum.
Being agile, on the other hand, means we're able to change direction when needed.
-
Feedback is for changing behavior
2022-05-02 19:56
The sole purpose of feedback is to drive a specific change in behavior.
This statement needs no further explanation, but let's drive the point home with a specific corollary.
If you need to deliver feedback, but the individual has something distressing and distraction going on, don't give the feedback at all.
this is the ask stage of feedback delivery #thread
First of all, the feedback will be less effective or counterproductive since the person is distracted.
More importantly though, there's no need for the feedback to be delivered whatsoever given the purpose is to drive behavior change.
Take the two possible outcomes for not giving the feedback:
- You don't give the feedback and the behavior continues. By definition this gives us another opportunity to give the feedback in better circumstances.
- You don't give the feedback and the behavior stops. Our goal is achieved, there's no need for the feedback at all.
-
Digital streams vs gardens
2022-05-02 17:01
Gardens are timeless, heterarchical, and defined by topological relations.
202109060835 Knowledge is constructed, 202109060845 Knowledge is a heterarchy
Streams are ephemeral and linear, defined by serial flow (202205021249 Stock and flow of knowledge).
-
Stock and flow
2022-05-02 12:52
The fundamental observation of systems thinking is that the links between events are often more subtle than they appear.[^larson2018systems]
Big changes appear to happen in the moment but there is usually a slow accumulation of small changes that lead to that moment.
Static values or accumulations are called stocks. They are how changes are stored over time. Stocks are the elements of the system that you can see, feel, count, or measure at a given time.[^meadows2011]
Changes to the stocks are called flows.[^meadows2011] These are rates of change. They can be inflows or outflows.
System dynamics are the relationships between different stocks and flows. For example, the rate of water pouring into a tub can be less than, equal to, or greater than the rate of water draining from the tub. This system dynamic can result in different long term outcomes like overflowing, equilibrium, or emptying.[^meadows2011]
Keep in mind that stocks take time to change because flows (as units over time) require time to flow. As such stocks often act as delays or buffers in systems. They also produce lag in indication. Additionally, they allow the inflow and outflow rates to be different and temporarily out of balance. This creates feedback processes by which we monitor the inflows and outflows to keep a stock at some acceptable value.[^meadows2011]
-
Stock and flow of knowledge
2022-05-02 12:49
The 202203210833 Systems thinking approach of 202205021252 Stock and flow can be applied to how 202109060836 Knowledge should accumulate and 202109060835 Knowledge is constructed.
Stock and flow of knowledge can be used to describe media — and more broadly knowledge creation and communication — in the 21st century.
Flow is the feed. It’s the posts and the tweets. It’s the stream of daily and sub-daily updates that reminds people you exist.
Stock is the durable stuff. It’s the content you produce that’s as interesting in two months (or two years) as it is today. It’s what people discover via search. It’s what spreads slowly but surely, building fans over time.[^sloan2010]
Flow is more popular than stock in our current society. Flow is the fast stream of information, linear and ephemeral. Stock is the garden of knowledge, timeless and topological (202205021701 Digital streams vs gardens).
Though flow is fleeting, it's vital to the creation and maintenance of our stocks of knowledge. We can only increase a stock by constructing new knowledge and we can only construct new knowledge by encountering new information. Therefore a constant stream of new information is required for constant knowledge creation.
-
Making a Fitbit Sense Watch Face
Time for a Better Watch
2022-05-01 00:00
There are a lot of good first- and third-party watch faces out there for the Fitbit Sense, but none of them are exactly what I want.
Motivation
There are a lot of good first- and third-party watch faces out there for the Fitbit Sense, but none of them are exactly what I want. So instead of putting up with something slightly sub-optimal, I'm taking a look at what it takes to develop my own. Being a programmer is great isn't it?
This post is still a work in progress, but as I've said, I'm working on showing off more works in progress.
-
Criteria for durable knowledge storage
2022-04-30 14:10
There are two criteria for knowledge storage to be durable:
First, The knowledge must be able to evolve over time so it doesn't go stale. Information may be permanent, but 202109060835 Knowledge is constructed and context dependent. Thus knowledge must evolve (202109060836 Knowledge should accumulate) and be continually re-examined in order to be accurate and valuable.
Second, the intent of the knowledge must be understood (202304041100 Learn, don't memorize). If I say that "
X
is always true", then unless I'm speaking about some abstract preposition, I must be able to understand "always true" in some sort of context.For example, if I say that "we should always use HTTP only secure cookies for storing our authentication tokens", then there's an implicit time, location, technology, group of people, and more associated with this statement. We can imagine a different scenario or new technology that invalidates this piece of knowledge.
Therefore, we need some ability to understand the intention behind a piece of knowledge so that we can retrieve and use it in an appropriate (intended) context.
-
Teams should own critical knowledge
2022-04-30 14:06
Given that 202110231440 Knowledge is the backbone of a product organization, we need some mechanism to store that knowledge in a durable way.
Although 202110231449 Externalization of knowledge is an important step in the usefulness of accumulated knowledge, it alone is not enough for that knowledge to be considered durably stored (as I'm sure anyone who's read an old company knowledge-base can plainly see).
Rather, teams are the only long-term, durable storage location for critical organizational knowledge because they satisfy the 202204301410 Criteria for durable knowledge storage by abstracting individuals (202202011405 Teams abstract individuals over time).
Teams satisfy the evolutionary criteria by continually doing new and different things. Their group knowledge must evolve to the ever-changing circumstances of their environment. Thus the knowledge they hold will continually be subjected to re-examination, re-evaluation, and change.
They also satisfy the intentionality criteria by passing the intention behind choices to new members as well as the context in which the decision was made.
Note that even though this is a vital role for teams to play in an organization, we rarely give it the attention it deserves. The ability for teams to be a durable storage for knowledge does not always mean that they do it well in practice.
-
Single responsibility
2022-04-29 15:12
There should never be more than one reason for a class to change.1
-
Wikipedia contributors. (2022). SOLID. In Wikipedia. https://en.wikipedia.org/w/index.php?title=SOLID&oldid=1069309351 ↩
-
-
Model, view, controller architecture
2022-04-28 11:40
The model, view, controller architecture (commonly referred to as MVC) is a way of organizing web applications into different layers of technical concerns.
- The model layer interacts with the database and represents data.
- The view layer renders models and data into a presentation format (e.g. HTML).
- The controller layer interacts with network requests and responses.
-
Computation, storage, and representation are the basis of computing
2022-04-28 11:33
Modern computation can be described as the creation and management of three fundamental aspects.
- Evaluation — our ability to operate on data
- Storage — our ability to transfer data across space or time
- Representation — our ability to communicate data (e.g. visually or audibly)
All software systems — no matter how complex — can categorize their constituent pieces as one of these three actions.
An example:
In a simple, traditional 202204281140 Model, view, controller architecture, the model is responsible for storage, the controller is responsible for evaluation, and view is responsible for representation. This is obviously a simplification, but we could just get more specific and granular about which code is doing what and we'd see that the idea holds in the general case.
-
Code that changes together should live together
2022-04-27 23:07
A simple concept that drives good code organization and ensures we’re abiding by the principles that 202204272308 Modules should be highly cohesive and 202204272309 Modules should be loosely coupled.
If changing one piece of code requires another piece of code to change:
- They should be in the same module or else they would have low cohesion and high coupling.
- They would require less mental bandwidth to understand if they were physically near each other in the filesystem.
- We will be less likely to forget to update one piece when updating the other if they’re near each other and part of the same module.
-
Create internal APIs on top of dependencies
2022-04-27 22:56
When we use a dependency — whether first- or third-party — widely in our code, we should wrap that dependency in a simple to use, internal API which becomes the only way our app can use that functionality.
This is sometimes called the strangler pattern, but that term is also sometimes used for a different situation.
There are many benefits of doing this.
- When the dependency changes, there’s only one integration point. With well written tests, this makes dependency upgrades much easier.
- If we want to change out the dependency (a.k.a. the functionality implementation) for a different one, we only need to change the integration point. Our app-code consuming the internal API doesn’t need to change.
- We can change, adjust, modify, and iterate on an internal API much faster and more flexibly than we can for dependencies. Likewise, if the dependency API changes, we’re not required to go along with a new pattern that might be more cumbersome for our internal use-case.
-
SOLID design principles
2022-04-27 22:44
The SOLID mnemonic are five design principles for object oriented programming. They ideas were first introduced by Robert C. Martin in his 2000 paper Design Principles and Design Patterns.
- 202204291512 Single responsibility — There should never be more than one reason for a class to change.
- 202204272242 Open-closed — Software entities should be open for extension but closed for modification.
- 202204291513 Liskov substitution — Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
- 202204291514 Interface segregation — Many client-specific interfaces are better than one general-purpose interface.
- 202204291515 Dependency inversion — Depend upon abstractions, not concretions.
-
Open-closed
2022-04-27 22:42
The open/closed principle of the SOLID framework for software development.
references
-
The fastest code is no code
2022-04-27 22:19
It’s impossible for any line of code, no matter how fast and well written to be as performant as no line of code. There are two points here.
From a performance perspective, we obviously only want to do the work that’s absolutely essential. We want to optimize the source code and execution paths to be as minimal as possible.
From a philosophical perspective, we want our code to be simple and minimal, although there’s more leniency in this point than the performance one. Less code written is less code we have to read and less we have to understand: minimizing the amount of code minimizes what we have to reason about and maintain. Importantly though, we also want to make that code maximally understandable. We want to follow 202203221620 The golden rule of programming and value simplicity and understanding over minimizing code.
-
Write code that's easy to delete, not extend
2022-04-26 21:14
Instead of building re-usable software we should try to build disposable software.[^figg2016]
Writing code comes at the cost of maintaining and changing that code. After all, 202204272219 The fastest code is no code and if we don’t have any code to begin with, we don’t have to maintain, extend, or delete code. The actual cost of maintaining that code can be astronomical (202204031033 Abstractions and future-coding are actively harmful)
We should be striving to minimize our code which includes deleting code that is no longer serving its purpose or has had so many requirement changes that it’s no longer recognizable as what it set out to be.
We should be writing code that’s disposable and cheap to replace. It’s easier to replace code than sort through dependencies and modify systems.
It’s usually easier to delete one big mess of code than to try and delete multiple smaller interleaved mistakes. It’s especially true that we don’t know how to split our code before building it and that it’s easier to deploy one mistake than 20 smaller ones (202204272239 Monorepos make all the wrong trade offs).
In order to write easily disposable code, we need to repeat ourselves over adding dependencies (202204262054 Prefer duplication over the wrong abstraction). We need to layer our code so that APIs don’t cause sweeping changes (202204272256 Create internal APIs on top of dependencies). We need to isolate hard to write or likely to change (202204272307 Code that changes together should live together) parts from the rest of the code and each other. We need to allow some changes at runtime and swappable implementations. We need to be able to write new code next to old code without modifying it (202204272242 Open-closed).
-
Prefer duplication over the wrong abstraction
2022-04-26 20:54
Notes from Dan Abramov's talk The Wet Codebase[^abramov2019]
Start with two modules
flowchart BT a((a)) b((b))
Abstract
flowchart BT a((a)) b((b)) c((c)) a-->c b-->c
Awesome, we’re reusing it and everything. But then something comes along and there’s a slight difference.
flowchart BT a((a)) b((b)) c((c+)) d((d)) a-->c b-->c d-->c
but then there’s bug in
c+
that requires a special case forb
’s use-case.flowchart BT a((a)) b((b)) c((c+*)) d((d)) a-->c b-->c d-->c
And then another slightly different one from
a
flowchart BT a((a)) b((b)) c((c+**)) d((d)) a-->c b-->c d-->c
So we pull those cases out and parameterize the call sites in
a
,b
, andd
.flowchart BT a_((a_)) a*((a*)) b_((b_)) b*((b*)) c((c+__)) d_((d_)) d*((d*)) a_-->a* a*-->c b_-->b* b*-->c d_-->d* d*-->c
Later, after small fixes over time, logging, minor changes, you end up somewhere like this.
flowchart BT a_((a_)) [Continue reading](/notes/202204262054)
-
Impact vs effort model of task value
2022-04-09 10:39
The impact vs effort model of task value is a simple two axis graph that's split into quadrants.
Along one axis we have the value/impact of a task from low to high. Along the other we have the effort it takes to complete that task from low to high.
The quadrants then break down as follows:
- Pit of despair — low impact, high effort tasks. There's nothing good about a low value task that's incredibly difficult and time consuming. It's our job to stay out of this quadrant at all cost. The good news is that it's typically easy to detect these pits and avoid them.
- Snacks — low effort, low impact tasks. Tempting to indulge in because they're quick to build, but they don't offer much value and amount to busy-work. This is an easy and insidious quadrant to get trapped in. Many many organizations reward performative work #thread in this quadrant.
- Quick wins — low effort, high impact tasks. These are the best things to work on. The only downside is that a mature organization will soon run low on items here and need to fill their time with tasks in other quadrants.
- Deep work — high effort, high impact tasks. These are what we should be filling our time with when the low effort high value tasks are dried up. Instead of drifting to "snacks", we should deepen our efforts, dig in, and apply ourselves to long-term, valuable work. It can be hard to get buy-in for this type of work because many people favor short-term games, but as we know, we should be trying to 202109251140 Play long term-games
-
Value reciprocity in the insurance industry
2022-04-05 10:48
This is a social ecosystem structured around reciprocity of value. The way that people earn social connections and trust as good actors in this ecosystem is by providing value to their connections. This is the whole ball game.[^wikipedia2021reciprocity]
Reciprocity in market-based societies
David Graeber argues that balanced gift exchange and market exchange have more in common than normally assumed. Since both are balanced, the social relationship created through the sense of debt and obligation is constantly in danger of being ended by the return gift/exchange. He thinks it better to contrast "open" and "closed" reciprocity. Open reciprocity "keeps no accounts because it implies a relation of permanent mutual commitment." This open reciprocity is closed off precisely when it is balanced. Thought of in this way, we can see the relationship as a matter of degree, more or less open or closed. Closed reciprocity of gifts is most like market exchange. It is competitive, individualistic and may border on barter.[^graeber2001]
Comes down on the substantivist side of the formalist-substantivist debate arguing for a study of how humans make a living in a social and natural environment.
-
Abstractions and future-coding are actively harmful
2022-04-03 10:33
Abstractions and future coding are the single greatest cause of convoluted, complex, unintelligible, inflexible, and unusable code.
“Saving typing” is the most inane excuse for any piece of code to exist. It’s completely divorced from any measure of why that code is good or bad.
Future coding is gambling and dictated by random chance.1
-
Sylvan, S. (2013, August 16). The Perils of Future-Coding [Blog]. A Random Walk Through Geek-Space. https://www.sebastiansylvan.com/post/the-perils-of-future-coding/ ↩
-
-
Architecture Decision Records
2022-04-02 12:18
An Architecture Decision Record (ADR) is a document that captures a decision, including the context of how the decision was made and the consequences of adopting the decision.[^blake2020]
While the name implies that these would be used for mainly architecture level decisions, many people advocate for using them for nearly any decision, no matter how mundane.[^blake2020][^perkins2020] The purpose of recording as much as possible is to facilitate the 202110231449 Externalization of knowledge for software projects and product organizations. (202110231440 Knowledge is the backbone of a product organization)
ADRs are beneficial because they enable persistence and transfer of knowledge. They’re a great example of the 202110231445 The SECI model of organizational knowledge in action. They take 202110231457 Tacit knowledge and transform it into 202110231459 Explicit knowledge
ADRs can be used proactively to propose changes, or retroactively to record decisions that were already made.
My experience with ADRs has been split across two levels of use.
- Organization-wide — Valuable to an extent, but can be used poorly to push things that shouldn’t be approved under the guise of seeking wide consensus. The important thing for these to work are having good, competent coworkers and/or to have people who are not afraid to actively dissent in a widely public forum. They can be an invitation for people to engage in costly bike-shedding or an indispensable log of the collective mind of a group. Which side of this your group falls on is hard to tell and requires some radical candor to identify.
-
Trust, loyalty, and advocacy over addiction
2022-04-01 10:28
The goal of a product organization should be to build products that create trust, loyalty, and advocacy instead of addiction.
-
Tuckman's stages of group development
2022-03-24 14:37
A model of group development proposed by Bruce Tuckman in 1965 consisting of four stages.1 Tuckman contends that all of these stages are necessary and inevitable in order for teams to grow, face challenges, and deliver results.
- Forming — the creation of the team and its purpose.
- Storming — the stage where the team starts to find problems and figure out how they're going to interact. This leads to conflicting opinions, roles, and interactions.
- Norming — the conflicts in the storming phase are worked out into social norms, rules, or processes for interacting productively.
- Performing — when group norms and roles are established and the team is focusing on achieving common goals.
-
Tuckman, B. W. (1965). Developmental sequence in small groups. Psychological Bulletin, 63(6), 384–399. https://doi.org/10.1037/h0022100 ↩
-
Do more with less
2022-03-24 14:28
The greatest leaders are inspiring (202107240951 Visionary leadership style) and performance obsessed (202203241152 Ask for more from your people). In order to become one of these leaders — or more simply report to one — we need to have a similar mindset.
It's a direct logical conclusion that the best leaders are the ones that can do more with less resources. Inspiration drives alignment and engagement, streamlining efficiency, and getting the most out of the team members.
Another aspect of this is that it's our responsibility to our team as leaders to help them grow, become the best version of theirselves, and reward them for that excellence. We can't do that if we're constantly asking for more resources, splitting our time, investing in new and different avenues.
For example, hiring another team member means less compensation or promotions for everyone.
-
The four states of a team
2022-03-24 11:59
It’s hard and slow work, but stay the path to the end. Prioritize one team at a time.[^larson2019]
Falling Behind
- Description — Every week the backlog gets longer, the team is working super hard and not making progress, morale is low, and there’s vocal dissatisfaction from users.
- Fixing and Supporting — Hire net new people. Support by setting expectations with users and stakeholders. Find easy wins to inject optimism.
Treading Water
- Description — Can get critical work done but can’t pay down debt or start new major projects. Morale is a bit better but users know help won’t come when needed.
- Fixing and Supporting — Consolidate effort to finish more things and reduce WIP until the team can start repaying debt. Transfer people from personal view of productivity to team view.
Repaying Debt
- Description — Beginning to snowball when debt is payed down enabling more debt to be payed down.
- Fixing and Supporting — Add time. Your team is working. Find space for them to allow it to continue to work. Try to find overlap with user needs. Prevent backsliding.
Innovating
- Description — Debt is sustainably low, morale is high, and the majority of work is satisfying user needs.
-
Progression of a team
2022-03-24 11:54
A team is an organization. An organization is — eponymously — organic. This means that teams grow and change over time as the individuals and relationships comprising the team change and grow.
There's two frameworks for this that I've found particularly useful.
-
Ask for more from your people
2022-03-24 11:52
There's a point in the 202203241154 Progression of a team where they transition from getting started to actually getting things done. At that point the team needs to push harder to become a 202109251035 High performing teams.
It's important for a leader to ask for more from their people. That transition moment is when leaders should be raising the bar for everyone.
Independent of the team evolution and productivity, growth can only happen when we take on new challenges. It's a leader's responsibility (202104291947 Our purpose as leaders is to serve others) to help their team members learn and grow.
Lastly, this aligns with a core tenant of good leadership — 202203241428 Do more with less. It's always better to be a small high performing team full of excellent members than a large team of average people. The only way to consistently have a team of excellent members is for leaders to continuously push for more excellence and give them the power to deliver on it.
-
Overcoming poor performance of a peer
2022-03-24 11:27
It is possible to fail in an organization primarily because we want to hold others to a higher standard than our organization's management is willing to enforce.
The basic pattern of one of these scenarios goes like this. We're trying to do our job effectively, but can't due to the low performance of a peer. We escalate our problem to our manager, but they transform the issue into one about interpersonal conflict or relationships instead of addressing the performance issue of the other individual. This (avoidant) transformation pushes the responsibility back onto us and if we persevere and insist on driving accountability for the peer, we block our own progress, becoming "hard to work with", without accomplishing anything.
Typically this scenario is not because the manager lacks the knowledge that there is an issue. It's more likely the manager knows about the problem but is unwilling or unable to address it directly.
There are two approaches for dealing with this scenario:[^larson2022peer]
- Have a direct discussion but frame it by asking your manager why they are comfortable maintaining the status quo. This can be uncomfortable for you and them, so be careful. If this is successful, it'll still be a slow change anyway.
-
Leading from vision
2022-03-23 16:47
How does one lead from a vision? A challenging thing to be sure.
Some of the greatest leaders of all time have mastered this 202107240951 Visionary leadership style to unbelievable effect.
Particularly when leading from vision, 202104291528 Leaders have to accept a slower feedback loop, 202104291529 Repeat the message in order to be heard, 202104291527 Live in the ambiguity, and inspire others to 202211021054 Yearn for the vast and endless sea. 202304112220 Selling ideas requires effort.
It's important that individuals understand the end goal and can autonomously act in order to move themselves and those around them toward it. It's easier to make these localized decisions if you 202304051001 Use a simple heuristic to guide gradual adoption.
-
Affecting long-term change
2022-03-23 16:46
Affecting long-term change is one of the most challenging things that a leader can do.
For one, the feedback loop about a long-term change comes at a glacial pace (202104291528 Leaders have to accept a slower feedback loop).
Next, there's a constant need to 202104291529 Repeat the message in order to be heard. For long-term changes, this can literally span years of repeating the same message. In practice, this repetition requires vision and extreme conviction. We must be visionaries to see the goal and keep it in sight even when the going gets tough. We must have conviction that the goal is worth it; that view from the mountain top will be worth the climb. Having this 202107240951 Visionary leadership style and 202203231647 Leading from vision requires us to be comfortable with 202112201317 The solitude of leadership.
So how can we persevere?
- We need to 202104291527 Live in the ambiguity and allow these slower loops.
- We must be patient with our communication, re-communication, and re-re-communications ad nauseam.
- We need to remove obstacles to make the path as clear as possible (202106241548 Leaders work to remove obstacles).
- We need to 202104292040 Eat the losses.
-
Slow is steady, steady is smooth, smooth is fast
2022-03-22 16:30
Slow is steady, steady is smooth, smooth is fast
This saying originates in the American armed forces.1 The idea is that taking your time to do things right brings consistency, correctness, and ultimately a speed advantage over doing things quickly and poorly.
This saying has broad applications across so many areas but I often find myself thinking about it in a 202109061338 Software Engineering context. In particular it's, similar in a lot of ways to 202203221620 The golden rule of programming, but more about how to achieve that rule in practice.
-
Freeman, M. (2018, January 24). “Slow is smooth, and smooth is fast”—LessWrong. https://www.lesswrong.com/posts/4FZfzqMtwQZES3eqN/slow-is-smooth-and-smooth-is-fast ↩
-
-
The golden rule of programming
2022-03-22 16:20
My golden rule of programming is
Simplicity above all.
Simple is understandable first, maintainable second, changeable last.
Notice that there's nothing here about performance, elegance, abstraction, repetition or anything like that. The only way to write good code is for it to be simple, understandable, maintainable, and changeable.
To be maximally explicit, 202204031033 Abstractions and future-coding are actively harmful. I point this particular piece out because I find that many good developers fall into the fallacy of thinking these things are aiding their productivity and don’t see that they’re eroding the simplicity of their projects day-by-day.
A similar saying that I value and find is relevant when implementing this rule is 202203221630 Slow is steady, steady is smooth, smooth is fast. Remember that 202304031244 There is never time to fix things later, so we need to be patient and do things right from the outset.
-
Naming conventions should use unambiguous delimiters
2022-03-22 16:10
When naming variables, files, etc. we need to delimit words, initialisms, and segments of meaning for people to interpret. Therefore, we should use unambiguous methods to delimit each word. In practice this means casing like
kebab-case
andsnake_case
are objectively simpler and superior to things likecamelCase
.Further explanation
Firstly, acronyms and words. Symbol delimited names are the only way to universally disambiguate words. There's a reason that
CSV
stands for Comma Delimited Values and not Capital-letter Delimited Value. It only takes one example to see this.What do we do when we want to name something like "URL Parser". Our options are
urlParser
,uRLParser
,URLParser
, andUrlParser
. The optionurlParser
isn't so bad, but we also need to solve for when the acronym isn't the first word in the sentence like "parse URL":parseUrl
orparseURL
. It certainly loses even more appeal if the acronym is in the middle:parseUrlParams
andparseURLParams
. And (though the example is getting contrived now I've seen similar and worse in real world code) the final nail in the coffin is "a URL parser":aURLParser
,AURLParser
,AUrlParser
, oraUrlParser
. -
Sunk cost fallacy
2022-03-21 08:45
A sunk cost is one that has been incurred and cannot be recovered. These sunk costs should therefore be irrelevant to decisions about the future because they are irretrievable and unalterably finalized. However, many people in every day life are susceptible to allowing these costs to attach them to a particular future decision.1
For instance, someone who's gambled a lot of money and lost will view that as a reason to keep gambling more money. They might believe that they "have to" get lucky at some point, or that they need to keep gambling to try to recover those costs.
This particular type of fallacious decision making demonstrates the 202201101943 The fundamental irony of many poor decisions.
-
Wikipedia contributors. (2022). Sunk cost. In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=Sunk_cost&oldid=1075514826 ↩
-
-
Systems thinking
2022-03-21 08:33
Thinking of stocks and flows is one of the core tenets of systems thinking.
- 202205021252 Stock and flow
- A knock-on effect of systems thinking with stocks and flows is to find causal chains and be able to do 202110220853 Second-order thinking
- 202205092134 The Art of Doing Science and Engineering discusses systems thinking without using the term.
- 202401291411 Thinking in Systems
Safety measures for systems thinking
- 202203210832 Models are necessarily incomplete
- 202203210831 Models are immutable but reality isn't
- 202203210830 When your model and reality conflict, reality is always right
-
Models are necessarily incomplete
2022-03-21 08:32
Making a model is the process of simplifying reality into a useful reasoning tool. Our goal is not to capture all of reality perfectly (we already have that ability by existing in that reality). Our goal is to be more useful — to cut through the noise — but this is exactly why they’re incomplete and prone to failure or bias.1
Once the model is useful as a simplified description of reality, we can start using it for its purpose. However, the only way to tell if our incomplete models work is by continuously comparing them with messy reality (202203210831 Models are immutable but reality isn't and 202203210830 When your model and reality conflict, reality is always right).
-
Larson, W. (2021, October 7). How to safely think in systems. https://lethain.com/how-to-safely-think-in-systems/ ↩
-
-
Models are immutable but reality isn't
2022-03-21 08:31
Remember that the world is ever changing and our models aren’t. Models say “this is how this works, put some input in and get some output”. They simplify the context and fluidity of reality (202203210832 Models are necessarily incomplete). The context and shifting nature of the real input and output of events are not so clean cut. What once was a sure-fire way to achieve something, might be totally ridiculous today.1
This simple truth implies that 202203210830 When your model and reality conflict, reality is always right and you should adjust your model.
-
Larson, W. (2021, October 7). How to safely think in systems. https://lethain.com/how-to-safely-think-in-systems/ ↩
-
-
When your model and reality conflict, reality is always right
2022-03-21 08:30
Attachment to our models of reality is a trap. We spend too much time distracted by what we think is the case when we should be engaging directly with what reality is teaching us. Knowing that 202203210832 Models are necessarily incomplete, we should be easily persuaded to change and iterate on them.1
It's easy to get stuck in some sort of failure mode regarding 202109251155 Desire vs expected outcome in decision making or the 202203210845 Sunk cost fallacy.
202203210831 Models are immutable but reality isn't, even the best models might become outdated.
In any case, reality is our teacher and guide to a better model. 202304102010 Interactions with reality drive innovation.
-
Larson, W. (2021, October 7). How to safely think in systems. https://lethain.com/how-to-safely-think-in-systems/ ↩
-
-
Teams abstract individuals over time
2022-02-01 14:05
Ideally, teams hold knowledge, distribute work, and amplify members' efforts. They do this by making the specific individual replaceable over time.
While each individual is critical to a team at a specific moment in time, a generic individual is not critical to team over a period of time. This is a good example of 202104291540 Emergence because this property does not exist in the particulars, only in the sum of their interactions.
The team as a whole is responsible for the creation and later 202110231449 Externalization of knowledge. When one person leaves, the whole of that team’s knowledge doesn’t leave with them and can be passed on to new members.
The team as a whole allows for individual variations in workload, knowledge, and expertise. Teams amortize ups and downs and average out the flow of work in and out of the team while allowing individuals to be human, learn, and grow, take time off, engage and disengage, and be passionate about different things.
The team amplifies individual efforts in the same way. Different perspectives, knowledge, and experience allow individuals to do more through mutual support than they could do individually.
A valuable corollary to this abstraction is that 202204301406 Teams should own critical knowledge.
-
The fundamental irony of many poor decisions
2022-01-10 19:43
If we can choose to do things (like getting more sleep) that are objectively better than the alternative (being more tired and less healthy for little or no benefit), then why don't we do those things?
It's completely within our power and control to make better choices and be the people that we want to be.
Maybe one reason we make these types of bad decisions is 202109251155 Desire vs expected outcome in decision making. Another probable piece is that immediacy/present bias and hyperbolic discounting. #thread
-
The things we own end up owning us
2021-12-29 18:21
He who possesses is possessed.[^nietzsche1887]
Important note about this Nietzsche quote: he said that this is the mindset of philosophers who strive for the "ascetic ideal". The third essay (of which this is a part) calls into question the entire value of that ideal entirely. He's not advocating for this idea per se, but also not suggesting that it's untrue.
The things you own end up owning you. It’s only after you lose everything that you’re free to do anything.[^palahniuk1996]
What matters isn’t what a person has or doesn’t have; it is what he or she are afraid of losing. [...] [T]hose who have more to lose are more fragile.[^taleb2017]
Objects, material possessions, or anything we feel ownership over consistently tether our lives, minds, and emotions to them.
This can be viewed as a good thing in some regards but the sentiment is much more often negative. We should strive to become unchained from objects so that we can live our lives and experience the world from a place of freedom. This freedom is physical freedom, yes, but also a freedom of the mind — a freedom from the shackles of closed mindsets. We are free to learn and see things for what they are rather than how they fit in our constructed world of chains.
-
My bucket list
2021-12-22 19:53
- Sky dive
- Ski the Alps
- Ski Tahoe
- Travel to
- Switzerland
- Germany
- Carribbean
- Scandinavia / Iceland
- British Isles
- France
- Italy
- Lake Como
- Greece
- Mexico
- Egypt
- Bhutan
- Australia
- New Zealand
- South Pacific Islands
- Hawaii
- Alaska
- Patagonia
- Africa
- China
- Japan
- India
- Tibet
- Cities
- DC
- NYC
- Amsterdam
- London
- Tokyo
- Paris
- Madrid/Barcelona
- Rio de Janeiro
- Cancun
- San Francisco
- Seattle
- LA
- Honolulu
- Rome
- Athens
- Alexandria/Cairo
- Venice
- Dubai
- Vegas
- Jerusalem
- Space
- LEO
- Moon
- Mars
- Saturn
- National Parks
- Banff
- Denali
- Yosemite
- Redwood
- Grand Canyon
- Zion
- Bryce Canyon
- Yellowstone
- Grand Tetons
- Badlands
- Mount Rushmore
- Ha long bay
- See the northern (southern) lights
-
The solitude of leadership
2021-12-20 13:17
People think leaders are individuals with others looking to them for direction. People think solitude is something like Thoreau, alone at Walden Pond. What could solitude have to do with leadership?
Leadership is the qualities of character and mind that will make you fit to command a platoon or a company, a battalion or a corporation, a foundation, a department, a government.
Solitude is the ability to be alone with your thoughts.
Solitude is therefore one of the most important necessities of true leadership.
On the mistaken idea of making it to the top means you're a leader
Many people can be energetic, accomplished, smart, or ferociously ambitious, but is that enough to make them leaders? No. These types of things are encouraged and developed in our generation of world-class hoop jumpers — they're "excellent sheep". Many institutions that talk about leadership are really talking about this. They're talking about educating people to make big names for themselves with impressive titles that they can brag about. They're talking about training people to climb the greasy pole of whatever hierarchy they decide to attach themselves to. But this idea is wrong and dangerous.
-
Three points on parenting
2021-12-20 13:14
- Imagine if we raised our children such that they weren’t perpetually stressed out.
- Imagine if we raised our children such that they got the sleep they need.
- Imagine if we raised our children such that they were able to introspect and work with their emotions and knew how alive and passionate and joyful they could be.
Asking ourselves questions like these can help point out 202201101943 The fundamental irony of many poor decisions.
-
Explore, expand, extract
2021-12-18 14:48
Similar to 202108261302 Prototype, Expand, Consolidate, Explore, Expand, Extract is a three phase 202109061338 Software Engineering practice. This practice has been popularized by Microsoft and Facebook.[^beck2019]
The explore phase is loosely structured if structured at all. The goal is to find cool things, and gain organic traction for those cool ideas. This phase is also low-cost and low-risk for organizations because of the small investment, ease of change, and willingness to abandon failures. This phase should throw caution to the wind and explore even unlikely solutions to increase the likelihood of finding something novel and valuable (202408060133 Caution and perfectionism hurt progress).
The purpose of the expand phase is to take the biggest winners from the explore phase and scale them from POCs to production products. During this phase, we often find out what it really is through research and widespread feedback. Things that go through this phase are big wins or failures because of the large investment and desire to see it come to fruition.
The extract phase is all about extracting maximum value out of a solution that’s already working well in production. This phase concerns itself with things like KPIs, performance, unit economics, and ROI for reducing costs. Wins can be big here, but there are maintenance and operating costs as well. There is also a possibility of downside by not allowing more time for exploration when people are tied to the existing products.
-
Psychological safety is the top indicator for group performance
2021-12-18 09:33
Individual skills are not what matters. What matters is the interaction. Small behaviors — not measurable skills — make all the difference.
In a study of groups of differing skill levels all trying to accomplish the same task, groups succeeded not because they were smarter or better, but because they were safer. The only valid correlation between performance and behavior is whether the group was safe and connected.1
We make groups feel safe through belonging cues. These are small behaviors that add up to the statement “You’re safe, you belong here”.
This has been demonstrated in other sources as well, including the famous study from Google.2
A very similar but different angle on this is that 202107291132 Trust is a requirement for higher-level cognitive functions. That angle shows that a minimal amount of this metric is a requirement for base function, whereas this shows that it can be generalized as a continuous correlation to performance.
-
Coyle, D. (2019). The culture code: The secrets of highly successful groups. Random House Business Books. ↩
-
Rozovsky, J. (2015, November 17). Project Aristotle. Re:Work. https://rework.withgoogle.com/print/guides/5721312655835136/ ↩
-
-
Don't fear failing, fear failing to try
2021-12-18 09:23
We shouldn’t be afraid to fail, we should be afraid of failing to try. The most common regret are the chances not taken in life, not the times we try and fail. In fact, the greatest creators in history have more failures than others because they try the most. The more output you put out, the more likely you are to come up with even a single masterpiece.1
-
Grant, A. & TED. (2016, April 26). The surprising habits of original thinkers. https://www.youtube.com/watch?v=fxbCHn6gE3U ↩
-
-
Task scheduling is a fuzzy process
2021-11-09 10:28
Some tasks are bounded on time. We don’t do the dishes every day at exactly 8:00 PM, we do it after we’re done making new dishes and before bed.
Some tasks are done relative to other constraints. We don’t mow if it’s raining or we mow early when we know it might rain when we’d normally do it. It’s front-loaded to not go over, so we allow sooner openings.
This will be relevant in making systems and AI that can act autonomously and accomplish variable, competing tasks.
These can best be described as systems of constraints. Likely we can make a system of equations that describe a range of acceptable times that things can be done, and then choose times within that span. This would allow for layered sophistication.
For instance, with the dishes, we know it has to be done after we're done making dishes, but before bed. We can then add more soft requirements to prefer when no one else is in the kitchen, but if that's not possible, it will still do it regardless of the person in the kitchen. We can see how this can be progressively enhanced via learning methods to create gradients and optimal maxima in n-dimensional space from the n-dimensional system of constraint equations.
-
Bloom's taxonomy of actions
2021-10-26 09:25
One of the three sections of 202110260923 Bloom's taxonomy of educational objectives. The taxonomy of action focuses on the psycho-motor (action-based) domain of development.
Skills in the psycho-motor domain describe the ability to physically manipulate a tool or instrument like a hand or a hammer. Psycho-motor objectives usually focus on change and/or development in behavior and skills.
Perception
The ability to use sensory cues to guide motor activity. This ranges from sensory stimulation, through cue selection, to translation.
Set
The readiness to act. This includes mental, physical, and emotional readiness.
Guided response
The early stages of learning a complex skill that includes imitation and trial and error. Practice makes perfect here. This section is akin to mastery of skills used in 202109090946 Kind learning environments.
Mechanism
The intermediate stage of learning a complex skill where learned responses have become habitual and the movements can be performed with confidence and proficiency.
Complex overt response
Skillful performance of motor actions that involve complex movement patterns. Proficiency is indicated at this stage through accuracy, coordination, and efficiency of energy expenditure. This category includes performance without hesitation and automatic performance.
-
Bloom's taxonomy of emotion
2021-10-26 09:24
One of the three sections of 202110260923 Bloom's taxonomy of educational objectives. The taxonomy of emotion focuses on the affective (emotion-based) domain of development.
This domain describes the way people react emotionally and their ability to empathize.
Receiving
The simplest, lowest level of passively paying attention. Without this base level, no learning can occur. This level is about the person's memory and recognition as well as their emotional response.
Responding
The next level of emotional involvement is the act of responding. The person actively participates in the learning process instead of merely receiving it. There is some sort of reaction.
Valuing
The person attaches a value to an object, phenomenon, or piece of information. They associates a value or some values to the knowledge they acquired. This stage shows that they not only hear and respond, but can understand and appreciate the learning process.
Organizing
This stage shows that the person can put together different values, information, and ideas, and can accommodate them within their own schema. The person is comparing, relating and elaborating on what has been learned.
Characterizing
-
Bloom's taxonomy
2021-10-26 09:23
Benjamin Bloom created a system for classifying educational objectives across a series of conferences from 1949 to 1953.1 His system includes three sections:
- 202107282144 Bloom's taxonomy of knowledge
- 202110260924 Bloom's taxonomy of emotion
- 202110260925 Bloom's taxonomy of actions
-
Wikipedia contributors. (2021). Bloom’s taxonomy. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Bloom%27s_taxonomy&oldid=1048998186 ↩
-
Weaknesses of platform teams
2021-10-25 11:48
Contrasts with 202110251148 Weaknesses of platform teams.
- Platforms are less likely to solve subjective or nuanced problems well. The concrete use cases and implementations that are needed to solve real-world problems can't be addressed by a team whose objective is building a general purpose platform that can solve many problems.1
- Context-related optimization should live close to the context. Optimizing in difficult situations may require understanding the exact, concrete case. Again, platform teams are better at maintaining general levels of competency than highly specialized instances.1
- Having a platform team may negatively affect your users. A team created to solve all problems may de-prioritize a real-world use case for a subset of users. There may also be situations that need to be generalized for a platform that are simply contradictory. In these instances, someone will lose out.1
-
Ballona, D. (2021, February 15). Composition for teams: Platform and application pattern. Dballona. https://dballona.com/en/composition-for-teams-platform-and-application-pattern/ ↩ ↩2 ↩3
-
Strengths of platform teams
2021-10-25 11:47
Contrasts with 202110251148 Weaknesses of platform teams.
- Thinking of infrastructure as part of the product. Looking at cost and efficiency and downtime are all things that platform teams excel at.1
- Building out capabilities and general solutions for other teams. Think of a platform team as building a toolbox instead of showing developers which tools to use for all problems.1
- Instilling a culture of rigor around research. Platform teams have to be careful with assuming that data and research can be applied to the entire platform instead of just being valid for that section of users. Generating insight that applies across the entire platform can be hard or impossible. Platform teams can help their organization's culture by being good at working in these stringent conditions.1
-
Ballona, D. (2021, February 15). Composition for teams: Platform and application pattern. Dballona. https://dballona.com/en/composition-for-teams-platform-and-application-pattern/ ↩ ↩2 ↩3
-
Analogy is a highly effective communication method
2021-10-25 11:22
Analogies are highly effective at communicating meaning because they relate the meaning of our message in terms that the recipient can understand. Analogies are even more effective if we can communicate to a recipient in a domain that they deeply understand.
On the other hand, analogies may suffer from loss of nuance. In reality though, analogy is best used as a linking, synthesizing, or jumping off point, rather than the end word on the technical details of an idea.
As a tool of thought, analogies are highly effective methods of "communicating between idea domains". By operating at a slightly "lossy" level of communication and idea chunking, we can more easily find connections even if they're not perfect. Sometimes analogies like these can lead to remarkable breakthroughs and Eureka! moments.[^epstein2019][^hamming2020]
For instance, 202211031026 The unreasonable effectiveness of mathematics shows that even when mathematics fail to exactly model reality in all its messiness, it still is an excellent analogy for reality.
Because 202304031221 Breadth of knowledge fuels analogy, it's important to develop a broad, general knowledge of many different domains to become highly effective thinkers and communicators.
-
Self-reference
2021-10-23 15:17
In language, self-reference is any sort of statement that refers to itself or its own referent. For example "This sentence is not seven words long" is a sentence that refers to itself. Other things can be self-referential if they contain copies of themselves within themselves, such as images.1
Perhaps more interesting is the philosophical and intellectual forms of self-reference and the paradoxes that can arise from them. Many of these types of paradoxes are semantic, set-theoretic, or epistemic in nature.
Here are some examples:
- Is it possible for an omnipotent being to create an object that it could not lift?
- "This sentence is true."
- Gödel's incompleteness theorem and the halting problem.
Self reference
The ancient Ouroboros is a snake or dragon that continually eats its own tail in a circle, symbolizing self-reference.
-
Bolander, T. (2017). Self-Reference. In E. N. Zalta (Ed.), The Stanford Encyclopedia of Philosophy (Fall 2017). Metaphysics Research Lab, Stanford University. https://plato.stanford.edu/archives/fall2017/entries/self-reference/ ↩
-
Feedforward loop
2021-10-23 15:16
A feedforward loop is a system that can take corrective action before an action is taken. This is opposed to a 202110231515 Feedback loop where corrective action is taken from the output of the process for the next iteration.
graph LR input --> |deviation|controller controller --> process process --> output
-
Feedback loop
2021-10-23 15:15
A feedback loop is a system which takes some input, produces some output and that output is then fed back into the system as the next input.
graph LR input --> controller controller --> process process --> output output --> |deviation|controller
In 202203210833 Systems thinking, this is defined as a process where a a change in a stock (202205021252 Stock and flow) affects the flows into or out of that same stock. More precisely,
A feedback loop is a closed chain of causal connections from a stock, through a set of decisions or rules or physical laws or actions that are dependent on the level of the stock and back again through a flow to change the stock.[^meadows2011]
Feedback loops can be stabilizing (or balancing) if they act to drive the stock back to a goal value, or destabilizing (or reinforcing/runaway/amplifying/self-multiplying/snowballing/spiraling) if they continue to drive a stock further in the same direction the more/less if it there is.
Note that doubling time is roughly $70 \div rate$ e.g. If you earn 7% interest it will take roughly 10 years to double the initial amount (i.e. $70 \div 7 = 10$).
Ask yourself,
If $A$ causes $B$, is it also possible that $B$ causes $A$?
-
Explicit knowledge
2021-10-23 14:59
Explicit knowledge is what people know for a fact and can point at specific documentation of that knowledge.1 When you ask someone for advice and they point to a reference document or share some artifact that can answer your question, they're relying on explicit knowledge.
In contrast, 202110231457 Tacit knowledge is not commemorated externally and only lives in the mind of an individual.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
-
Tacit knowledge
2021-10-23 14:57
Tacit knowledge is what people understand in their own minds. It is not commemorated anywhere permanent.1 When you ask someone for advice and they speak to you from experience and what they know off the top of their head, they're relying on their tacit knowledge. 202408021018 Intuition and instinct are implicit knowledge.
In contrast, 202110231459 Explicit knowledge is well defined and more lasting. Since 202110231440 Knowledge is the backbone of a product organization, it's often a good idea for organizations to turn the tacit knowledge of their individuals into explicit knowledge.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
-
Internalization of knowledge
2021-10-23 14:51
Internalizing knowledge is the process of truly understanding a piece of knowledge. This is the point where the external piece of knowledge — whether it's explicit or tacit — becomes an internal piece of knowledge and freely known as 202110231457 Tacit knowledge for an individual or organization (though this doesn't preclude the idea that it is also 202110231459 Explicit knowledge).1
Since this is the point where tacit knowledge is created, we can restart the 202110231445 The SECI model of organizational knowledge and create a new loop to build on it.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
-
Combination of knowledge
2021-10-23 14:50
Combination of knowledge is the process of taking newly created or externalized knowledge and connecting it to other areas of knowledge or output. This can be a process of synthesis (Hegel dialectic thesis, antithesis, synthesis #thread), where the output is more 202110231459 Explicit knowledge or it can be a process of construction, where the output is building something concrete.1
The combination of knowledge can also result in 202104291540 Emergence of new knowledge since 202109060835 Knowledge is constructed and 202109060836 Knowledge should accumulate over time.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
-
Externalization of knowledge
2021-10-23 14:49
Externalizing information is similar to 202110231448 Socialization of knowledge, but includes doing the hard work to have meaningful interactions that help uncover 202110231457 Tacit knowledge and communicate it. The efficacy of externalizing knowledge can be helped or hindered by the effectiveness of our communication. 202110251122 Analogy is a highly effective communication method.1
202107272242 The Art of using a Zettelkasten is a good examples of the externalization of knowledge. We proactively build a documented, discoverable network of ideas in a Zettelkasten. Similarly, we might build a knowledge base for a company's collective knowledge.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
-
Socialization of knowledge
2021-10-23 14:48
The first step in the 202110231445 The SECI model of organizational knowledge. It is the process of creating knowledge through the interactions among individuals and between individuals and their environments. This step is slightly different than 202110231449 Externalization of knowledge because this is the precursor to actively externalizing the knowledge. We socialize and become aware of 202110231457 Tacit knowledge before we externalize it.1
Think about how individuals are encouraged to share their experiences, skills, mindsets, and approaches to problem solving. Think about how much they express their tacit knowledge. Being a facilitator of knowledge sharing is a high 202106221146 Leverage activity.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
-
The SECI model of organizational knowledge
2021-10-23 14:45
Developed by Ikujiro Nonaka, the SECI model of organizational knowledge describes a repeating loop of four activities that individuals in an organization undertake in order to create (202109060835 Knowledge is constructed), commemorate, and expand upon knowledge.1
- 202110231448 Socialization of knowledge
- 202110231449 Externalization of knowledge
- 202110231450 Combination of knowledge
- 202110231451 Internalization of knowledge
When the loop completes, it starts over again as the input to the next iteration. In this way it can be considered a 202110231515 Feedback loop.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
Knowledge is the backbone of a product organization
2021-10-23 14:40
One of the single most significant contributing factors to the success of a product organization is its collective knowledge.1 There are two kinds of knowledge in an organization:
- 202110231457 Tacit knowledge is what people understand in their own minds. It is not commemorated anywhere permanent.
- 202110231459 Explicit knowledge is commemorated and defined, allowing others to find and share in it.
It's a good idea for organizations to turn the tacit knowledge of their individuals into explicit knowledge so that it lives beyond the tenure of the individual (202202011405 Teams abstract individuals over time and 202204301406 Teams should own critical knowledge).
202110231449 Externalization of knowledge in the 202110231445 The SECI model of organizational knowledge also shows how making knowledge explicit enables it to grow organically.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
Think week
2021-10-23 14:33
Popularized by Bill Gates, a think week is a week spent in solitude, focused on thinking.1
The purpose of a think week is to remove distractions and stimuli that will detract from our ability to think deeply on topics and ideas for an extended period of time. A think week can include books or other information sources but shouldn’t include distractions like social media, TV, and the like.
Seclusion, solitude, peace, quiet, light exercise, simple healthy food, and simple living arrangements focused on the environment are all conducive to effective think weeks.
Similar to, but more deliberate and less frequent that 202304112203 Ten percent time.
-
Runaway Suitcase. (2019, June 18). How to do a Think Week Like Bill Gates. Runaway Suitcase. https://www.reservations.com/blog/resources/think-weeks/ ↩
-
-
Don't stress over releases
2021-10-22 21:22
As it turns out, they didn’t even look at the release [until] a few days later.1
Most stress from deadlines is self-imposed and unwarranted. Tech moves so fast that even the things that are truly mission critical probably won’t be around in a year, two, or five. Don’t let the rush and bustle of the tech world claim your mental well-being.
Be aware of burnout. Ask yourself questions about your stress levels and what you need to take care of (202110220840 Simple stress measurement questions). Use PTO and use it frequently enough to ensure you can actually separate when you’re away.
Would you rather spend extra time trying to get that product out that will quickly be forgotten, or would you rather spend a bit more time with your spouse, kids, pets, learning a new hobby, or life reading a book?1
Live your life!
-
Preston, J. (2021, August 17). Mental health impacts of a Big Tech job. Jake’s Tech. https://oilyraincloud.com/2021/08/16/mental-health-impacts-of-a-big-tech-job/ ↩ ↩2
-
-
Always bet on text
2021-10-22 16:53
Text is the most powerful, useful, effective communication technology ever.[^hoare2014]
- Text is the oldest and most stable communication technology (assuming we call speech a natural phenomenon). You can read text from 5000 years ago and can engrave granite that will outlast the human species.
- Text is the most flexible communication tech. Text can convey ideas with a precisely controlled level of ambiguity and precision, implied context, and elaborated content, unmatched by anything else. It is not a coincidence that all of literature, poetry, history, philosophy, mathematics, logic, programming, engineering, and everything else rely on textual encoding for their ideas.
- Text is the most efficient communication technology. By orders of magnitude.
- Text is the most socially useful communication technology. It works well in 1:1, 1:N, and M:N modes. It can be indexed and searched efficiently, even by hand. It can be translated. It can be produced and consumed at variable speeds. It is asynchronous. It can be compared, diffed, clustered, corrected, summarized and filtered algorithmically. It permits multiparty editing. It permits branching conversations, lurking, annotation, quoting, reviewing, summarizing, structured responses, exegesis, even fan-fic. The breadth, scale and depth of ways people use text is unmatched by anything. There is no equivalent in any other communication technology for the social, communicative, cognitive, and reflective complexity of a library full of books or an internet full of postings. Nothing else comes close. Nothing.
-
CMS editor and developer experience alignment
2021-10-22 16:38
Using a headless CMS with a component based front-end application is one of the core tenets of the Jamstack. Unfortunately though, it's easy for CMS editors and application developers to be at odds with each other on alignment. In order to maintain that alignment we should use one of three strategies for mapping CMS fields to components.[^davis2021]
- Create a transformer near the components. This is easier to maintain and more understandable, but may not scale well in massive apps. It also has the downside of making more calls to the CMS for data, worsening performance.
- Create a top level transformer in your app. This will perform better by making one call, but be more complicated to maintain and test.
- Create a microservice proxy to transform from the CMS(s) that you use. This microservice would be able to have a consistent interface for front-end apps while allowing flexibility on data-sources and formats. The downside is the much higher cost of maintenance, testing, and deployment that the service will have relative to a simple in-app transformer.
We can use these like stepping stones, only moving up a level when your company needs different complexity and performance characteristics.
-
Levinthal's paradox
2021-10-22 10:09
Levinthal's paradox[^wikipedia2021levinthal] is a thought experiment, also constituting a self-reference in the theory of protein folding.
In 1969, Cyrus Levinthal noted that, because of the very large number of degrees of freedom in an unfolded polypeptide chain, the molecule has an astronomical number of possible conformations. For example, a polypeptide of 100 residues will have 99 peptide bonds, and therefore 198 different phi and psi bond angles. If each of these bond angles can be in one of three stable conformations, the protein may mis-fold into a maximum of $3^{198}$ different conformations (including any possible folding redundancy).
Therefore, if a protein were to attain its correctly folded configuration by sequentially sampling all the possible conformations, it would require a time longer than the age of the universe to arrive at its correct native conformation. This is true even if conformations are sampled at rapid (nanosecond or picosecond) rates.
The "paradox" is that most small proteins fold spontaneously on a millisecond or even microsecond time scale. This paradox is central to computational approaches to protein structure prediction. It may imply that there's a specific algorithmic process that's followed that we have not been able to discover as of now.
-
Protein folding
2021-10-22 09:37
Protein folding is the process of determining the 3D shape of a protein from its amino-acid sequence. The 3D shape determines the protein's function and linking the amino acid sequence to the structure therefore links the sequence to the function. This has long been regarded as one of if not the hardest problem known to humanity due in part to 202110221009 Levinthal's paradox.
DeepMind's Breakthrough
DeepMind's program for determining the 3D shapes of proteins stands to transform biology[^callaway2020]
The Google owned AI company DeepMind made a massive leap in 2020 in our ability to predict how protein folding works. DeepMind's AlphaFold outperformed all the competitors by a wide range in the biennial Critical Assessment of Structure Prediction (CASP) contest. One scientist even went so far as to say, "in some sense the problem is solved."
It's a game changer. This will change medicine. It will change research. It will change bioengineering. It will change everything.
— Andrei Lupas, Max Planck Intitute for Development in Biology[^callaway2020]
In many cases, the structure predicted by DeepMind was indistinguishable from the state of the art experimental methods of directly measuring protein shapes.
-
The great stagnation
2021-10-22 09:05
The 202110220859 Utilization adjusted total factor productivity of the US from 1947 through 1972 was 2.1%. Since then it decreased until the dotcom boom in the late 1990s and early 2000s. In 2005 though, the rate plummeted and has been a paltry 0.17% despite a rapid rise in the rate of scientific and theoretical technological progress.1
One lesson to take from this is that science alone isn't enough to end the stagnation. We need science to be applied to goods and services that affect the general public before we'll see a new period of sustained growth.1
One way to understand the forces at play here is to study 202110220853 Second-order thinking and make predictions about what technologies are capable of making an impact on the general public in the next 10 years or so.
-
Dourado, E. (2020, December 31). Notes on technology in the 2020s. Eli Dourado. https://elidourado.com/blog/notes-on-technology-2020s/ ↩ ↩2
-
-
Utilization adjusted total factor productivity
2021-10-22 08:59
Total factor productivity captures how much output can be produced with a diverse but fixed basket of inputs. As technology and institutions improve, TFP goes up. As they deteriorate, it goes down. In the last decade, TFP has deeply stagnated.1
-
Dourado, E. (2022). Total factor productivity. Eli Dourado. https://elidourado.com/tfp/ ↩
-
-
Second-order thinking
2021-10-22 08:53
Second-order thinking is the process of going beyond the immediate impact of a decision or event.
For example, if the USA shifts to renewable energy and electric cars in the 2020s, we'll have no need to be allied with Saudi Arabia anymore. This is a first-order consequence. Going further, we can see that things like a Saudi-Iranian war or general instability in the middle east could come from the dissolution of that alliance. Take it another step — if China and other East Asian cultures aren't able to modernize to renewable energy and electric transport in a similar time-span and the middle east's oil production is destabilized, then their economies could be disrupted. The possibilities in that event are vast and wide-ranging.[^dourado2020]
Here’s the thing about electric cars: they are better than regular cars. They have lower fuel costs. They have fewer moving parts and thus lower maintenance costs. They have higher low-end torque and faster acceleration. If you mainly drive to and from work and have a charger at home, you never have to stop for gas. Electric cars will win because they are better, and the shift will happen suddenly.
A list of specific 202211020929 Second-order thoughts about the 2020s.
-
Remote team management
2021-10-22 08:45
This structure note records my learnings from taking the Coursera How to Manage a Remote Team course.[^murph2020] These notes come from a time before my Zettelkasten and are longer, more verbose, and less atomic than I'd normally like, but I'm just going to leave them as they are. That way, I can link to them and search for their contents without investing the time in breaking them down more.
Managing a team of remote workers presents unique challenges and opportunities:
Communication is Crucial
Embracing Asynchronous Communication
In a world dictated by calendars and schedules, people are conditioned to operate in synchronicity — meaning that they inhabit the same physical or virtual space at the same time. Asynchronous communication is the art of communicating and moving projects forward without the need for collaborators or stakeholders to be available at the same time your message is sent.
In an all-remote setting, mastering asynchronous workflows is vital to avoiding dysfunction and increasing efficiency. The benefits include enabling your team to work effectively across time zones, reducing meetings, and enabling team members to work on a flexible schedule — all of which raise morale and productivity. However, shifting to this way of working requires a lot of large and small adjustments.
-
Simple stress measurement questions
2021-10-22 08:40
Here are a few questions we can ask ourselves and others to measure their level of stress and burnout.1
- How stressed are you right now?
- What is your ideal stress level? Ideal meaning the stress is useful and not debilitating.
- What is your max stress level?
- What behaviors do you see in yourself when you close or at max?
Another similar question can help us identify stressors and guide a path to a more healthy lifestyle.
- Food, exercise, sleep, and time are the most important things. What's keeping me from them?
-
Lopp, M. (2021, June 25). The Hotel Giraffe. Rands in Repose. https://randsinrepose.com/archives/the-hotel-giraffe/ ↩
-
Differentiate between self-doubt and idea-doubt
2021-10-21 22:31
All humans feel fear and doubt when creating. The process can look something like this
- This is awesome
- This is tricky
- This is crap
- I am crap
- This might be ok
- This is awesome
Original thinkers and those that are consistently creative can skip step 4. Instead of saying “I’m crap” we should be saying “the first few drafts are always crap”.1
There are two things at play here.
- We shouldn’t doubt ourselves, we should doubt our ideas. We should test, iterate, think, revise, and build the best thing without being attached to the original idea or taking setbacks personally.
- 202112180923 Don't fear failing, fear failing to try
-
Grant, A. & TED. (2016, April 26). The surprising habits of original thinkers. https://www.youtube.com/watch?v=fxbCHn6gE3U ↩
-
Moderate procrastination facilitates creativity
2021-10-21 22:27
People who procrastinate moderately are much more creative.1 Original thinkers are typically late to the party. They’re not the first people to build something but they are the people who build new and better things. When you procrastinate moderately, you give things time to incubate (202109090947 Idea gardening and 202109091124 Anti-flow state). A lot of great original thinkers are quick to start thinking on things, but slow to finish their thoughts and outputs.
-
Grant, A. & TED. (2016, April 26). The surprising habits of original thinkers. https://www.youtube.com/watch?v=fxbCHn6gE3U ↩
-
-
Humans can't multi-task
2021-10-18 12:47
Humans are notoriously terrible multitaskers. We have no ability to genuinely concentrate on two things at once. Focusing on a single task at a time and fully committing our attention to it is far more productive than trying to do multiple things at once.
Studies show that our performance on tasks completed during multitasking is much lower than when we focus on one at a time. They also show that regular multitasking can decrease your ability to focus over time.1
-
Brain and Spine Team. (2021, March 10). The Science is Clear: Why Multitasking Doesn’t Work. Cleveland Clinic. https://health.clevelandclinic.org/science-clear-multitasking-doesnt-work/ ↩
-
-
Limit WIP to increase throughput
2021-10-18 12:46
Limiting the amount of work in progress can increase the total throughput of the system. 202110181247 Humans can't multi-task in a literal sense of concentrating on two things at once. We also can't multi-task in the sense that trying to switch between two tasks repeatedly slows down our ability to understand and complete those tasks. We are much better off pursuing deep 202109091123 Flow state work.
Taking this one step further, we see that it's better to deeply focus on one thing at a time in order to actually increase our total output.
Another extrapolation is that teams of individuals should reduce their WIP as much as possible, but may be able to sustain multiple threads. The size of the team, the threads of work, and the knowledge/skills of the members likely contribute to the optimal number. Is there a way to estimate this ideal number of threads? #thread
-
Don't tacitly endorse bad behaviors
2021-10-18 12:31
Sometimes it's easier to let a bad behavior continue than have the difficult conversations about stopping it. This is especially the case when the behavior doesn't seem to be too problematic. However, it's equally important in these scenarios to have the conversation and change the behavior.
If we don't change the behavior, then as leaders who are ultimately accountable for our teams, their culture, and their performance, we're implicitly saying that we endorse that behavior. There is no middle ground for the leader.
It's easier to hold your principles 100 percent of the time than it is to hold them 98 percent of the time.1
Tacit endorsement (or rejection) of behaviors is also effective with peers. For instance, it's a viable approach to 202203241127 Overcoming poor performance of a peer.
-
Christensen, C. M. (2010, July 1). How Will You Measure Your Life?. Harvard Business Review. https://hbr.org/2010/07/how-will-you-measure-your-life ↩
-
-
Target praise carefully
2021-10-18 12:15
You can and should praise anyone who does a good job on things, but there are times when using praise in a targeted way can have a greater impact on the team or an individual.
For instance, when 202110181158 Coaching underperformers, we need to make sure that all praise for the good things they do are linked to continual improvement and expressed as a positive step on a longer journey.
When trying to impact the culture and attitude of the team, praising the right actions publicly, in a group setting can signal that you — as their leader and boss — value that behavior and will reward it.
There are other areas that this makes sense as well and it can be a difficult thing to get right all the time, but it's important to be discerning.
-
Invest discretionary time in top performers
2021-10-18 12:05
A 1% increase in their performance amounts to more output than a 1% increase in your bottom performers' outputs.1[^auzenne2011coaching1][^auzenne2011coaching2] By this logic, you should only invest your time in increasing the performance of your top performers.
This does not mean that you shouldn't coach the others and give them feedback. It's a statement of what to do with any discretionary time you have as well as one about maximizing returns on investment in overall team performance. When 202110181158 Coaching underperformers, it's important to understand that there's a level where good enough is fine, but they will need to personally invest more into being a top performer before it makes sense for you to invest more time and effort with them.
Another way of saying this is if 202104291524 Execution is the priority of team management, then the best way to increase execution is to focus on increasing the execution of top performers.
-
Kislik, L. (2020, December 2). Managing an Underperformer Who Thinks They’re Doing Great. Harvard Business Review. https://hbr.org/2020/12/managing-an-underperformer-who-thinks-theyre-doing-great ↩
-
-
Be clear about expectations
2021-10-18 12:03
There is nothing more important in a working relationship than being crystal clear about expectations. If a either person doesn't know what the other expects of them, they cannot succeed. If they can't come to a shared understanding of what the expectations are or should be at all, then there's no hope that anyone will be successful.
In a similar vein, we need to 202106221152 Define success in order to be successful. We need to tell each other what it looks like to be a good working partner and how to succeed in our expectations of each other.
-
Coaching underperformers
2021-10-18 11:58
Underperformers may not realize that they have an inflated sense of their performance. Managers should figure out the cause of their lack of awareness. In the process, they will either uncover what support the underperformer needs or confirm that they just might not be able to do the job and that they should reset expectations accordingly.
This situation is very draining on time and emotions for everyone involved. It's better to fix it right away.
Another insidious risk is that by allowing this to go on, a manager may be tacitly endorsing substandard performance, causing other employees to become demotivated, disengaged, or angry about the situation. (202110181231 Don't tacitly endorse bad behaviors)
Possibilities for alleviating the issue:[^kislik2020]
- 202110181203 Be clear about expectations — This can seem painful, but it's better for everyone in the long run. You have to be super clear on expectations.
- Provide employees with resources and support — If their natural skills are insufficient, they may not even perceive their deficits. It's important to coach, mentor, and get them in a position where they can grow and succeed.
- Determine whether you're willing to continue investing in the individual — If you're not, it's much more practical to reduce your expectations. Do not abandon them, but do not spend more time on then than is required. You should spend your discretionary time on your top performers (202110181205 Invest discretionary time in top performers). This also includes deciding whether they are below the acceptable line or above it.
Good -> great
can be abandoned, butfailing -> ok
cannot. If they're failing and can't improve, it's time to let them go.
-
Run to change ratio of a program
2021-10-11 19:01
The more often a program is run as a ratio of how often it’s changed, the better it is for it to have static typing. Another way of saying this is that code that rarely changes and runs a lot should be statically typed. Code that is changed often (e.g. personal scripts) is better suited for dynamic typing.
This is very similar to saying that when debugging the program and running it are nearer to one-in-the-same activity, the more dynamic it needs to be and the better suited dynamic types are for it.
How much do I agree with this? A counterpoint: static typing makes refactoring (i.e. changing) a program less error-prone and quicker. At the same time, prototyping it to start with is slower. #thread
This ties in with 202107291950 Optimizing requirements and implementations. Specifically, that note is about the optimization of our change rate that we use for the denominator here. This note builds a meaningful metric about the value in making changes relative to its frequency of use.
-
Approximations compose poorly
2021-10-11 11:06
Approximations do not hold up to composition with other approximations. The error of approximation is magnified when we combine them so that the total error becomes egregiously large.
Here's a simple example with basic math
2.00 ~= 1.99 2.00 ^ 2 = 4.00 1.99 ^ 2 = 3.96 2.00 ^ 3 = 8.00 1.99 ^ 3 = 7.88
You can see how the error is growing much larger after combining multiple approximate values.
In programming, this can be devious. We're not always sure where approximations will come in to play (including things like floating point precision problems).
Haskell offers a unique way around this problem with its laziness characteristic. Since things are evaluated lazily, we can specify a representation of infinite precision for our approximations and the precision we need at the end and Haskell will evaluate all our approximations to the necessary precision to get a correct precision in the outcome.1
-
Jelvis, T. (2015, June 17). Thinking with Laziness. Begriffs. https://begriffs.com/posts/2015-06-17-thinking-with-laziness.html ↩
-
-
The quality of your decisions is the currency of leadership
2021-10-05 20:25
Check your work. Ask for help. Slow down.1
As a leader, our reputation and competence comes from our track record on decision making and trust situations. Often we're asked to 202104291526 Make the hard decisions and how we handle that situation ends up being our track record. You don't get an infinite number of chances at these things either. At some point, you'll lose the trust and confidence of the people you work with. That's a place that's very hard to come back from.
So we need to check our work, ask for help, and slow down even when people are screaming that everything is on fire and you're the only one who can make a decision.
-
Lopp, M. (2021, June 25). The Hotel Giraffe. Rands in Repose. https://randsinrepose.com/archives/the-hotel-giraffe/ ↩
-
-
Netflix cultural model
2021-09-27 14:32
Netflix's cultural model is about giving high performers the autonomy to creatively work towards solutions without roadblocks and process to slow them down (202106241548 Leaders work to remove obstacles).
The model is applied in 3 phases, with each phase consisting of the same 3 steps: increasing talent density (A), introducing candor (B), and removing controls (C).[^hastings2020]
This method revolves around The Keeper Test
Who on your team would you fight to keep and how hard would you fight to keep them?
This test is supposed to cut to the heart of the question, "why do we keep mediocre performers on our teams?" and answer it with a resounding, "if you wouldn't fight to keep them, you should remove them now and help them find a place where they can be successful." (202109251035 High performing teams)
Phase 1
- A. Hire high performers
- B. Encourage loads of feedback (202205021956 Feedback is for changing behavior)
- C. Remove vacation, travel, and expense policies
Phase 2
- A. Pay top of market
- B. Emphasize organizational transparency
- C. Remove decision making approvals
Phase 3
- A. Implement the Keeper Test
- B. Create circles of feedback (202110231515 Feedback loop)
-
Black swan risk
2021-09-25 12:00
Black swan risk is the risk of something unlikely, but catastrophically bad happening.1 For example, if we're designing a bridge, a black swan risk scenario could be "what happens if there's a tornado and an earthquake at the same time"?
We must be creative and think outside the box while coming up with black swan risks in order to try and expand our thinking about a situation. Once we've come up with many scenarios like this, we need to take the time to assess their likelihood as a whole, but also whether there are themes or elements of these scenarios that are more likely to happen than the exact scenario. This can be a tool for finding gaps in our more realistic risk assessment.
Thinking like this can let us decide rationally — instead of out of emotion, bias, or ignorance — how much risk we're OK with and what the worst case outcome could be.
-
Wikipedia contributors. (2022). Black swan theory. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Black_swan_theory&oldid=1084569215 ↩
-
-
Desire vs expected outcome in decision making
2021-09-25 11:55
Before doing something, ask yourself two questions:
- If I do this thing, what do I want to happen?
- If I do this thing, what do I expect to happen?
You may be surprised that you're doing something based on what you want but not what is likely.1 We should strive to be rational when we make decisions whose outcomes are important to us. We should be realistic and understand the differences and biases that we bring to the table when we have an investment in a desired outcome.
Obviously, there are things in life that are good to do based on what you want to happen even if it's risky. However, we should be aware of the risk and prepared for what may come if it doesn’t turn out how we want it to.
-
Thorpe, E. (2017, January 24). A Man for All Markets. ↩
-
How much is enough
2021-09-25 11:52
How much is enough for me?
Many people never ask themselves that question and end up always striving for more, never being happy nor actually living their short lives.1
Make your infinitesimal time here on Earth something you enjoy. Use your intelligence, time, and effort to help society and spend time with those you love, learning things, and living.
-
Thorpe, E. (2017, January 24). A Man for All Markets. ↩
-
-
Play long term-games
2021-09-25 11:40
Everything in here is a great #thread to pull on
The days are long but the decades are short.
In a lot of ways, our entire lives are unforgivably short. In other ways, they are long. We have the opportunity in some areas to play long-term games. We should be playing more long-term games and less short-term ones. Long term games take advantage of 202304102048 Compounding Interest.
- Investing is a game of long-term 202304102048 Compounding Interest.
- 202205231312 A Career is a long-term game of pace, people, prestige, profit, and learning.[^larson2019forty][^newport2021]
- Family and friends are a deeply rewarding long-term investment.
- 202304112152 Intellectual investment is like compound interest. Education is a high 202106221146 Leverage long-term game that can feed into other areas of your life.[^thorpe2017] Study math, physics, chemistry, astronomy, probability, chance, risk, reward, uncertainty, humanity and its societies, externality bias.
- Consistent hard work over time will compound to the point that you'll be surprised how much you can achieve (202304102024 Great people have a great deal of drive to do great things).
- The 202308271610 Quarry workers' creed
-
Post-apocalyptic software
2021-09-25 11:25
Software whose evolution has become lost technology, harrowing to operate or extend. It's more of a ritual or art to keep it running.1
If the post-apocalyptic system can be left alone then we should abandon it or allow it to stay in stasis forever. If we need to use it actively or make any changes then it needs to be rewritten or reclaimed (202109251102 Reclaiming software systems).
-
Larson, W. (2019, July 28). Reclaim unreasonable software. Irrational Exuberance. https://lethain.com/reclaim-unreasonable-software/ ↩
-
-
Golden age software
2021-09-25 11:24
This is the best software in the best of circumstances. The team maintaining it is the team who designed and implemented it; they are intimately familiar with its quirks, the problems it was designed to solve (and not to solve), and the constraints it was supposed to run in. This software is still only solving the problems it should in the constraints that it was built for.1
-
Larson, W. (2019, July 28). Reclaim unreasonable software. Irrational Exuberance. https://lethain.com/reclaim-unreasonable-software/ ↩
-
-
Reclaiming software systems
2021-09-25 11:02
Software systems are organic entities. They take on a life of their own over the passage of time under the pressure of external forces. They slowly transition from 202109251124 Golden age software to 202109251125 Post-apocalyptic software.[^larson2019reclaim]
How do we get from golden age software to post-apocalyptic then? At some point we find an elegant extension to the golden system. It's looked at as proof of the system's power and flexibility. But in reality, it's the beginning of the end. It causes the system to be harder to reason about, and eventually becomes impossible. It's better to build systems for the problems they solve and keep them running with simplicity.
Each company is allowed to rewrite exactly once, but afterwards you have to learn how to reclaim your software instead.[^larson2019reclaim]
One option is to rewrite the system. This is expensive, time consuming, and may actually cause problems by losing years worth of sweat and knowledge that's been put into the system.[^spolsky2000] The good news is that rewrites aren't inevitable here, and we can reclaim the system instead.
Reclaiming the system is the project of evolving beliefs into behaviors and properties (202109251100 Verify behaviors and assert properties). We start off by believing that something works like it does. This might be a specific property of "all the DB calls come from ActiveRecord" or something. We turn that belief into a behavior or property that can be tracked and verified or asserted.
-
Verify behaviors and assert properties
2021-09-25 11:00
Software systems should have verifiable behavior and assertable properties. These are vital to the maintainability but moreover the evolvability of a system. Moving behaviors and properties up through the chain of verifiability and assertability is required for 202109251102 Reclaiming software systems.[^larson2019reclaim]
Behaviors
Behaviors are aspects of software that can be validated empirically against a specific environment.
- Observed — behaviors you notice in your logs
- Tracked — behaviors you get informed about, but only after a change to the software is deployed to the environment. Tend to degrade over time without a dedicated org-led program ensuring their upkeep. Architectural change is preceded by a period of fixing regressions in tracked behaviors before the intended change can be made.
- Verified — behaviors you can rely on being consistently true because they can be checked pre-deployment. Three common ways to verify behaviors: E2E tests, fault injection tests, and load/performance tests. Can be annoying to maintain verification status (including needing an attempted deploy), but help us design around them because we can depend on them being true.
-
High performing teams
2021-09-25 10:35
A common term in the current 202104291523 Leadership zeitgeist is "High performing team". What that means exactly is hard to pin down. There are as many definitions as there are managers in the world.
Defining when a team is high performing
- They 202106241525 Synergize. The team works in a way that complements each others efforts.
- The team works on high 202106221146 Leverage projects to compound their returns over time.
- The team has...
- A common purpose (202108191025 Teams exist for a reason)
- Clear roles
- An accepted leadership structure
- Excellent communication
- Solid relationships
- An effective process in place for getting work done well (202104291524 Execution is the priority of team management) and understanding if that work is effective and valuable (202108191029 Measure what you do.
- Participative leadership – using a democratic leadership style that involves and engages team members
- Effective decision-making – using a blend of rational and intuitive decision making methods, depending on that nature of the decision task
- Open and clear communication – ensuring that the team mutually constructs shared meaning, using effective communication methods and channels
-
Highly effective people are leaders
2021-09-25 10:19
As a person grows in effectiveness, there comes a point where they can't scale beyond their individual time and effort. They necessarily have to start collaborating, delegating, and inspiring. To put this another way, there comes a point where they have to lead others in order to be more effective.
The absolute most effective people are excellent leaders.
I believe this correlation only goes one way though. It's certainly possible to be a great leader — depending on your definition of great here — without being highly effective. E.g. you can inspire people and coordinate their efforts on a path that's not effective or is counterproductive. If you take the actual outcomes into account though, maybe we'd say that this mis-leader is not, in fact, a great leader.
-
Idea Gardening
An Organic Process for Developing Thought
2021-09-15 00:00
Idea gardening is the practice of sitting on ideas so that they can germinate on the back burner of your mind.
TODO: remove in favor of the old regular zettel 202109090947 Idea gardening
The Idea Garden
We plant ideas, consciously or not, deep in the depths of our mind. The place is dark, quiet, and damp, heavy with the breath of life.
There they sit in a timeless state, slowly spreading their tendrils, taking root, nourishing themselves on the fertile soil of id.
Sometimes they tangle with other ideas, competing for nourishment or becoming indivisibly fused.
Sometimes they shrink, wither, and decay becoming part of the soil they took root in. Here they'll feed others. Or maybe their seeds will sprout again.
Sometimes they grow in a streak of tenuous height, bursting into the light. If they aren't plucked, their strength wanes and they sink back down to try once more.
And sometimes — very rarely — they grow strong and big. They form pillars between the soil and the sky, connecting deep intuition and emotion to the brilliant light of human intelligence.
This is the harvest of an idea garden and we reap the bounty.
-
Maturity of dependence
2021-09-12 15:50
Dependence means that you need others to get what you need.1 We're naturally in a state of dependence when we're young and can't provide for ourselves. Much of natural life centers around growing up and moving from dependence to the 202109121536 Maturity of independence.
Unfortunately, there are many people who live their entire lives in different states of dependence even if they are grown and seemingly independent. Dependency can come from many places and take many forms. Things like addiction, abusive relationships, and exploitative socioeconomic conditions all involve dependency.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Maturity of independence
2021-09-12 15:36
Independence means you are (mostly) free from external influence and the need for support from others. This level is valuable, but there's a higher level we can aspire to — the 202109121530 Maturity of interdependence.1
The idea of independence is highly valued by most people. This is the area of being in control of your own destiny. Building independence is primarily an act of mastering your 202109121518 Circle of control. This is done through the habits of 202106241529 Be proactive, 202106221744 Begin with the end in mind, and putting 202106241528 First things first. Plenty of effective people live in this level of maturity and never surpass it. Becoming a highly effective person involves pushing through to the next level though.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Maturity of interdependence
2021-09-12 15:30
Interdependence means that you have an attitude of "we": we can cooperate, we can be a good team, we can combine our talents, we can succeed.1
Interdependence is a highly effective mode to operate in because it expands our impact from our limited 202109121518 Circle of control to our considerably larger 202109121516 Circle of influence. Operating interdependently also has the compounding effect of increasing one's circle of influence further.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Circle of control
2021-09-12 15:18
A metaphorical circle posited by Stephen Covey in his book 202106221713 Seven habits of highly effective people.1
This metaphorical circle encompasses all the things in our lives that we have direct power to exert control over. We should focus most of our efforts in this circle because our effort is directly related to what happens. This is a smaller circle than either the 202109121516 Circle of influence or 202109121517 Circle of concern and is a strict subset of those two because anything we can control, we could also have influence over and concerns for.
People struggling with achieving 202109121536 Maturity of independence have yet to master their circle of control. They can achieve mastery here by building the habits 202106241529 Be proactive, 202106221744 Begin with the end in mind, and putting 202106241528 First things first.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Circle of concern
2021-09-12 15:17
A metaphorical circle posited by Stephen Covey in his book 202106221713 Seven habits of highly effective people.[^covey2004]
This circle is a superset of our 202109121517 Circle of concern and 202109121516 Circle of influence. We should seek to minimize the things we allow into our circle of concern.
Anything that we're concerned about, but have no influence or control over, will cause stress and negative pressure on the things that you can influence or control. Identifying what you can and can't affect can drastically empower your actions and allow you to move from a state of 202109121550 Maturity of dependence to 202109121536 Maturity of independence and possibly into 202109121530 Maturity of interdependence.
On the other hand, this circle is something that highly effective people can think about and use to their advantage. For instance, we know that we can't control how cold the winter will be this year, but being interested in the weather patterns and using that concern as a source of information that informs our actions in some way that we can control — such as investing in natural gas that will be used to heat homes — could be beneficial. The goal is to know things in the circle of concern, but not allow them to affect us in negative ways.
-
Circle of influence
2021-09-12 15:16
A metaphorical circle posited by Stephen Covey in his book 202106221713 Seven habits of highly effective people.1
The circle of influence is a superset of the 202109121518 Circle of control and a subset of the 202109121517 Circle of concern. It sits between things that we can control directly and things that we can only be concerned about without affecting. This is the realm of indirect influence and highly effective people.
Highly effective people understand that the things they can control by themselves are limited and that to be highly effective, we need to use the 202109121530 Maturity of interdependence to increase our ability to influence things around us.
Interdependent and highly effective people also know the value of increasing their circle of influence by embodying the habits 202106241529 Be proactive, 202106241527 Think win-win, 202106241526 Seek first to understand, then to be understood, and 202106241525 Synergize.
Mastering indirect influence and interdependence are required skills for becoming a great leader.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Positive History
2021-09-10 08:38
I want to do some research around a positive perspective on history and where we are. I feel that part of the current Zeitgeist is to be extremely cynical and nihilistic about the current world situation and outlook on the future, but I would like to see if there's good cause for that.
Hypothesis: The world is currently the most peaceful and prosperous it's ever been for humankind. Furthermore, it's trending in the right direction.
- Vaclav Smil books and stuff
- https://www.goodreads.com/book/show/34890015-factfulness
- https://www.goodreads.com/book/show/52879286-humankind
- https://www.goodreads.com/book/show/35696171-enlightenment-now
references
-
Notes should be concept-oriented
2021-09-09 11:34
Each of our 202109091129 Evergreen notes should be written about a concept, not about a book, project, or event. This is the only way to ensure that we're able to discover connections across books, projects, events etc. (202109091131 Notes should surprise us) and that our notes will form a web of tightly linked concepts (202109091132 Notes should be densely linked).[^matuschak2017concept]
This also ensures our principle that 202209091130 Notes should be atomic. If we write a single note about a book, we may write more than one concept into that note. Now recollection and linking requires remembering the book and the fact that the concept was in that book, instead of just the concept. If we keep it concept oriented, 202109091133 Notes should associate organically and similar concepts from individual books will still coalesce.
Another benefit of keeping notes concept-oriented is that we can build on our previous work. 202109060836 Knowledge should accumulate, and by ensuring we're noting concepts, we can accumulate our learnings from one book on a concept with other learnings on that same concept. Contrast this to just taking notes per book. In that situation, we never realize the connection between two books talking about the same concept, or if we do, we don't fully investigate the depth and breadth of that relationship — we just remember that they covered similar topics and yet were slightly different. An even more extreme example is two very different books that are related only by one subtle point. Would we notice that point if we weren't keeping our notes concept-oriented?
-
Notes should associate organically
2021-09-09 11:33
We should let note structures emerge organically.[^matuschak2017organic] By refraining from categorizing and sorting notes at the outset, we cultivate 202104291540 Emergence (202109091131 Notes should surprise us) and encourage nuanced, fine-grained relationships between ideas (202109091132 Notes should be densely linked).
The world is not finely hierarchical. As we know, 202109060845 Knowledge is a heterarchy. Neither can we fit things precisely into neat categories. There is overlap and fuzziness in the real world. Any single fact (202209091130 Notes should be atomic and 202109091134 Notes should be concept-oriented) can relate to others in varying ways and with varying strengths. Any attempt at bringing a strict "one-and-only" order to our notes will limit the expressivity of our notes.
Topic clusters emerge by themselves, especially surrounding keywords or tags. The resulting archive fits the way you think because it grew according to your interests. Also, things are labeled in a way especially meaningful to you, not anybody else. This is all about personal information management, so personalization is a must, and increasing idiosyncrasy will likely make things better.[^tietze2015]
-
Notes should be densely linked
2021-09-09 11:32
Pushing ourselves to add lots of links to our 202109091129 Evergreen notes makes us think deeply about the connections that a concept might have (202109091134 Notes should be concept-oriented).[^matuschak2017dense] Since 202209091130 Notes should be atomic, we can also make links across boundaries that might even surprise us (202109091131 Notes should surprise us).
Finding the right links is also valuable. It requires that we re-read old notes and approximate a spaced repetition pattern.
By recording connections manually and intentionally, we build fine-grained associations between our atomic notes. These fine-grained associations allow organic structures to emerge (202109091133 Notes should associate organically). The network of connections that emerges here is arguably more valuable for knowledge accumulation (202109060836 Knowledge should accumulate) and management (202109060845 Knowledge is a heterarchy) than the contents of the notes themselves.
202209091142 Notes are the fundamental unit of knowledge work and manually connecting them amounts to nothing short of interpreting the units and finding patterns. From there, it's trivial to synthesize our multiple interpretations and models into a final thought — for instance, a written work.
-
Notes should surprise us
2021-09-09 11:31
If reading and writing notes doesn't lead to surprises, what's the point?[^matuschak2017surprise]
That question may seem like an innocuous one. Of course there's a point to writing things down so you don't forget them, but we're talking about 202109091129 Evergreen notes here. Remember that 202209091140 Transient notes don't create knowledge.
If we only wanted to understand things in a specific context, there'd be no point to writing notes and keeping them over time. We'd use the idea and then be done with it.
These surprises are the very reason for our principles of note taking.
- 202209091130 Notes should be atomic so that we can see the breadth and depth of our surprises through the connections we make and the connections we don't make.
- 202109091134 Notes should be concept-oriented so that they can be densely linked and show us how a concept can cross our preconceived boundaries of what it relates to.
- 202109091132 Notes should be densely linked so that we see surprising connections that we might have missed otherwise.
- 202109091133 Notes should associate organically so that we're not imposing a structure, instead being surprised by one.
-
Evergreen notes
2021-09-09 11:29
Valuable notes are written and organized to evolve, contribute, and accumulate over time, across projects (202109060836 Knowledge should accumulate). This is different than taking transient notes because 202209091140 Transient notes don't create knowledge.[^khoe2016] 202209091141 The goal of note-taking is not to be better at taking notes, it's to be better at thinking. In order to make notes valuable we need them to be timeless.1
We can make our notes timeless by making sure that they adhere to a few key principles:
- 202209091130 Notes should be atomic
- 202109091131 Notes should surprise us
- 202109091132 Notes should be densely linked
- 202109091133 Notes should associate organically
- 202109091134 Notes should be concept-oriented
202209091142 Notes are the fundamental unit of knowledge work. This practice is similar and different to Niklas Luhmann's 202107272242 The Art of using a Zettelkasten.[^luhmann2021]
-
Matuschak, A. (2017). Evergreen notes. Andyʼs Working Notes. https://notes.andymatuschak.org/z4SDCZQeRo4xFEQ8H4qrSqd68ucpgE6LU155C ↩
-
Andy Matuschak
2021-09-09 11:28
Andy Matuschak is a software engineer who worked on iOS and R&D at Khan Academy. More recently he's working as an independent researcher exploring natively dynamic interfaces and exploratory tools for thinking and learning.
His notes are a great example of a dynamic interface that is quite similar to Obsidian actually. Reading his notes as a reference material has provided plenty of insights that have allowed me to build a structured knowledge management system here. One of the core ideas that's been instrumental to this system is 202109091129 Evergreen notes.
-
Free association of thought
2021-09-09 11:25
Free association of thought is the expression of thoughts without censorship as an aid in gaining access to unconscious processes.1 When we freely associate thoughts, we allow for connections to be made that don't come from conscious rational thought. These can be unconscious connections or just non-obvious ones that we might not have thought of while actively analyzing our thoughts.
Both 202109091124 Anti-flow state and 202109090947 Idea gardening use this method for cultivating ideas and insight.
-
Wikipedia contributors. (2021). Free association (psychology). In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=Free_association_(psychology)&oldid=1027392010 ↩
-
-
Anti-flow state
2021-09-09 11:24
Related to 202109091123 Flow state, this is the mental state characterized by 202109091125 Free association of thought and the planting and harvesting actions of 202109090947 Idea gardening. Whereas in flow state we're intensely focused on the idea we're working on, the anti-flow state requires being absorbed in something other than that idea so the idea can have room to evolve in our subconscious mind.
Anti-flow is essentially an act of discovery. We discover connections that we could not have consciously thought of.[^rands2018antiflow]
Anti-Flow, by definition, is about discovering hidden potential in the strange mental crevices of your mind.[^rands2018antiflow]
Anti-flow is the weaponized inspiration generation. Anything can show up during deep sessions of Anti-Flow from the mundane to the magical.[^rands2018antiflow]
Encouraging an anti-flow state of mind can be done through deliberately, systemically enabling serendipity. There are many ways to encourage the free association of thoughts:
- Exercise.
- Performing mindless tasks like mowing the lawn.
- Performing rituals or meditation to relax and allow our mind to wander.
- The concentrated use of a Zettelkasten workflow (202107272242 The Art of using a Zettelkasten, 202109091131 Notes should surprise us, 202109091133 Notes should associate organically).
-
Flow state
2021-09-09 11:23
A state of mental being characterized by extreme focus, productivity, and the ability to hold and traverse an enormous amount of context in your head. It can be described as being "in the zone" or "completely absorbed" in what you're doing.
The term was first coined by Mihály Csíkszentmihályi in his work Beyond Boredom and Anxiety: Experiencing Flow in Work and Play1 and later popularized in his widely regarded book Flow: The psychology of optimal experience.2
Despite its name, the 202109091124 Anti-flow state is more related to flow state than against it. The difference primarily arises in the activity that one is absorbed in. Anti-flow makes use of an absorption in something other than the idea we care about in order to allow that idea to have room to evolve in our subconscious mind.
-
Idea gardening
2021-09-09 09:47
Idea gardening is the practice of sitting on ideas so that they can germinate in your mind on the back-burner. If the idea is something you're thinking about occasionally over a period of time, you'll find that each time you revisit the idea, there's more there than when you left it. Our minds have a fascinating way of working on things without requiring conscious thought.
Related to 202107272242 The Art of using a Zettelkasten in that a Zettelkasten is a structured, textual way to plant atomic ideas as Zettel and let them grow and expand and link together over time through additions, linkages, and updates.
Idea gardening is half of the 202109091124 Anti-flow state. There's also a 202109091125 Free association of thought aspect that happens in idea gardening, but the anti-flow state is more deliberate time to allow the harvesting of an idea garden.
Idea gardening has been shown to be effective at facilitating creativity and original thought (202211030958 Creative accomplishments happen over time), though also creating a tendency towards moderate procrastination. (202110212227 Moderate procrastination facilitates creativity)
The Idea Garden
We plant ideas, consciously or not, deep in the depths of our mind. The place is dark, quiet, and damp, heavy with the breath of life.
-
Kind learning environments
2021-09-09 09:46
Opposed to 202109090945 Wicked learning environments, kind learning environments are those which patterns recur, are constrained, all the information is available, and feedback is quick and 100% accurate.1
For example, chess, golf, and writing code that compiles are kind learning environments. You perform an action in a constrained rule set and get instant feedback. You recognize patterns and can try again quickly and repeatedly.
-
Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range ↩
-
-
Wicked learning environments
2021-09-09 09:45
Opposed to 202109090946 Kind learning environments, wicked learning environments have few patterns, are unconstrained, have hidden or unknown information, and have slow or inaccurate feedback.1
For example, managing a team of people, running a business, and making long term software design decisions are wicked learning environments.
-
Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range ↩
-
-
Decision paralysis
2021-09-09 09:09
When we're paralyzed while making a decision, we might subconsciously know that there's a vital piece of evidence missing that would weigh into the decision.[^rands2021decide] In these situations, there's not much more conversation that's needed. This is the time for thinking. Go for a long bike ride, sweat, work, and think. Submerge the idea into the depths of your brain where your experience is speaking to you, trying to hint at a solution. Let it take root and grow back into the sunlight (202109090947 Idea gardening).
But maybe, we just need to decide and there isn't anything more to it.[^rands2021decide] Your brain might be hoping for another piece of information where none exists. As leaders, we must 202104291527 Live in the ambiguity and make decisions with imperfect information in 202109090945 Wicked learning environments. Over-analyzing the situation is a form of 202106221150 Procrastination driven by the difficult, stressful, ambiguous, and unstructured nature of these situations (202106221122 Procrastination is triggered by emotional aversions.
Either way, making a decision causes a great sense of relief and a desire to get to work.[^rands2021decide] Often, even if we make the wrong decision it turns out to be more reversible or equal than we build it up to be in our heads. Making any decision can be viewed as forward progress even if we end up feeling like it was the wrong decision.
-
You'll never get what you don't ask for
2021-09-08 13:01
Careers are long term games with compounding payouts (202304102048 Compounding Interest). The surest way to succeed in the long term is to work hard and build what you can as early as you can in your career. (202109251140 Play long term-games)
The simplest way to maximize lifetime earning is to earn more sooner. That is obviously not an easy thing to do, but it is a simple thing. The more that you earn early, the more time that you have to compound that earning into more value.
One real tactical approach for getting more sooner is to ask for it. If you're delivering valuable results, someone will reward you for it — whether that's your current company or a different one.
-
As We May Think
2021-09-08 08:47
#structure #thread #source #new
A seminal essay on machine augmented thinking written by Vannevar Bush in 1945.[^bush1945]
He urges that men of science should turn to the massive task of making more accessibly our bewildering store of knowledge. For years inventions have extended man's physical powers rather than the powers of his mind. [These inventions] are new results, but not the end results, of modern science. Instruments are at hand which will give man access to and command over the inherited knowledge of the ages. The perfection of these pacific instruments should be the first objective of our scientists as they emerge from their war work. Like Emerson's famous address of 1837 on The American Scholar this paper calls for a new relationship between thinking man and the sum of our knowledge.
Consider a future device [...] in which an individual stores all his books, records, and communications, and which is mechanized so that it may be consulted with exceeding speed and flexibility. It is an enlarged intimate supplement to his memory.
Knowledge evolves and endures throughout the life of a race rather than that of an individual
Publication of research has been extended far beyond our present (1945) ability to make real use of the record.
-
Closing calls
2021-09-07 20:35
Offering a closing call will substantially improve your odds of hiring a candidate.1 Not many people will take you up on it, but those that do will be highly engaged in the process.
How to do closing calls
- Offer the call.
- Show up prepared with their background and ready to articulate why you're at the company and why they should join.
- Ask what the candidate wants to talk about before you start talking.
- Tell them why the role addresses their concerns. If it truly doesn't, then it's better to learn that now.
- Clarify next steps and offer more time.
Abbreviated Version
- Ask for their concerns.
- Answer by telling the best version of the truth.
-
Larson, W. (2021, August 26). Closing calls: Tell the best version of the truth. Irrational Exuberance. https://lethain.com/closing-calls/ ↩
-
PARA Method
2021-09-07 16:20
A universal system for organizing digital information.[^forte2017]
Projects
Series of tasks linked to a goal, with a deadline
- Complete app mockup, develop project plan, execute business development campaign, write blog post, finalize product specs, attend conference, etc.
- Goal has to be achieved (completely checked off at some point) and has a deadline
Areas
Spheres of activity with a standard to be maintained over time
- Health, finances, professional development, travel, hobbies, friends, apartment, car, productivity, direct reports, product development, writing, etc.
- Standard to be maintained with an indefinite end date
- Areas for me are hierarchical. All projects must belong to an area and all tasks may belong to a project, but must belong to an area.
Resources
Topics and themes of ongoing interest
- Habit formation, project management, transhumanism, coffee, music, gardening, online marketing, SEO, interior design, architecture, note-taking.
- I use resources as my reference manager. For this reason, transient items like projects, areas, and tasks should reference resources and update them with relevant information that comes out of the doing of the item.
-
Arthur Schopenhauer
2021-09-07 13:31
A German philosopher of 202109071330 Late Modern Philosophy who developed an atheistic metaphysical and ethical system that rejected contemporaneous German idealism. He embraced asceticism, denial of self, and other Indian philosophical stances and is viewed as an exemplar of philosophical pessimism.
Works
- Essays and Aphorisms
- The World as Will and Representation
- Hedgehog's Dilemma (evangelion wisecrack #thread)
Influence
- 202206090853 Friedrich Nietzsche
- Ludwig Wittgenstein
- Erwin Schrödinger
- Albert Einstein
- Carl Jung
- Leo Tolstoy
- Hermann Hesse
- Thomas Mann
- Jorge Luis Borges
- Marcel Proust
-
Late Modern Philosophy
2021-09-07 13:30
Usually considered to begin in 1781 when Gotthold Ephraim Lessing died and 202109071212 Immanuel Kant's Critique of Pure Reason appeared. This continued through the 19th century and saw a divide between Continental (interested in general frameworks of metaphysics) and analytic (focused on issues of epistemology, ethics, law, and politics) philosophic traditions.1
Philosophers
-
Wikipedia contributors. (2022). Western philosophy. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Western_philosophy&oldid=1098280762 ↩
-
-
Ancient Philosophy
2021-09-07 12:29
In the tradition of Western Philosophy, ancient philosophy refers to almost exclusively ancient Greek philosophy. Beginning in the 6th century BC, marking the end of the Greek Dark Ages, Greek philosophy continued through the Hellenistic period and later the period of Roman Greece, ending with the rise Roman Christianity and the transition to the period of Medieval philosophy.1
Periods
- Pre-Socratic
- Classical
- Hellenistic and Roman
Philosophers
Thought Experiments
-
Wikipedia contributors. (2022). Ancient Greek philosophy. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Ancient_Greek_philosophy&oldid=1094833012 ↩
-
Socrates
2021-09-07 12:25
Socrates was a Greek philosopher who lived from 470–399 BCE in Athens. He's credited as the founder of western philosophy and is among the first recorded moral philosophers of the ethical tradition of thought. Though he wrote no texts himself, his teachings were passed down to us through his students — primarily Plato and Xenophon — as dialogues in a question and answer style.
Works
- N/A
Influence
- Western Philosophy
- 202109071229 Ancient Philosophy
- 202206051528 Moral Philosophy
-
The unexamined life is not worth living
2021-09-07 12:23
Wisdom, philosophy, Truth, and a love of wisdom are the most important pursuits above all else. A life without thought — without philosophy — is only a facsimile of a life and thus not worth living.
The titular saying was supposedly said by 202109071225 Socrates during his trial for impiety, at which he chose death over a life that could not engage in examination and philosophy as he believed that such a life would constitute a fate worse than death.1
-
Wikipedia contributors. (2021). The unexamined life is not worth living. In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=The_unexamined_life_is_not_worth_living&oldid=1038431687 ↩
-
-
Age of Enlightenment
2021-09-07 12:19
The age of enlightenment — or simply The Enlightenment — was an intellectual movement that dominated Europe in the 17th and 18th centuries. The enlightenment included a range of ideas centered on the value of human happiness, the pursuit of knowledge obtained by means of reason and the evidence of the senses, and ideals such as liberty, progress, toleration, fraternity, constitutional government, and separation of church and state.1
Philosophers
-
Wikipedia contributors. (2022). Age of Enlightenment. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Age_of_Enlightenment&oldid=1104162837 ↩
-
-
Immanuel Kant
2021-09-07 12:12
A German philosopher, central thinker of the 202109071219 Age of Enlightenment, and one of the most influential philosophers in all of western philosophy.1
Works
- Critique of Pure Reason
- Groundwork of the Metaphysics of Morals
- Metaphysics of Morals
- Critique of Practical Reason
- Critique of the Power of Judgement
Influence
- Kant popularized the phrase 202109060833 Sapere Aude as a motto for the 202109071219 Age of Enlightenment.
- Kant is most famous for his work in 202206051530 Deontology, the Critique of Pure Reason, and his 3 formulations of the x202206051544 Categorical imperative.
-
Immanuel Kant. (2023). In Wikipedia. https://en.wikipedia.org/w/index.php?title=Immanuel_Kant&oldid=1172510977 ↩
-
Philosophy
2021-09-07 12:11
- 202109071229 Ancient Philosophy
- Medieval Philosophy
- Renaissance
- Early Modern, 202109071219 Age of Enlightenment, 17th and 18th century
- 202109071330 Late Modern Philosophy, 19th century
- Contemporary
Major areas of philosophy
-
Software Engineering
2021-09-06 13:38
Maybe this should be a structure note of structure notes only since this is a huge topic that I'd like to really dive deep on. There is also the 202206191300 Computer Science structure note that I’ve split out to dig in to the more technical, theoretical stuff in order to keep this one focused more on the practice of writing software and careers or organizations in this field.
Topics
Documentation
- Co-locate tech docs with the code
- C4 Modeling
Abstraction
- You aren't gonna need it (YAGNI)
- 202204031033 Abstractions and future-coding are actively harmful
- 202204262054 Prefer duplication over the wrong abstraction
- On the spectrum of abstraction[^lou2016]
- Open for extension closed for modification O in SOLID. Means you can add new behavior without modifying any existing code. Always green, always confident in lack of side effects.[^metz2013]
Measurement
- 202304231046 List of SDLC metrics
- 202204272219 The fastest code is no code
- 202109251100 Verify behaviors and assert properties
- Thought experiment. Coding as function, what do the derivative and integral represent? Related to 202107291950 Optimizing requirements and implementations and 202110111901 Run to change ratio of a program.
-
Experiential model of learning
2021-09-06 13:04
A school of pedagogy that focuses on the experiences of students being the driver for the creation of knowledge (202109060835 Knowledge is constructed).1
Experiential models are deeply connected with constructivism and focus on the learner's need to internalize information and construct personal knowledge from their experiences. They also stress the role of a teacher as being one who can facilitate the creation of knowledge in their students without actually being able to directly impart it to them.
A common exemplar of this school of teaching is the 202109061250 See, do, teach model.
-
Wikipedia contributors. (2021). Experiential education. In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=Experiential_education&oldid=1031833310 ↩
-
-
See, do, teach
2021-09-06 12:50
An 202109061304 Experiential model of learning common to medical schools that emphasizes three actions we can take to gain deep knowledge about anything (202109060835 Knowledge is constructed).1
The three eponymous phases emphasize gaining information, internalizing information and turning it into knowledge, and externalizing your knowledge for others through acts of expression that further reinforce your own understanding.
An interesting connection to this model is 202107272242 The Art of using a Zettelkasten. A Zettelkasten gives us the opportunity to "do and teach" after "seeing". We read a book and then internalize the information, processing it into atomic Zettel. The act of writing the Zettel for an audience other than ourselves — even if that's just our future selves — is an act of teaching. writing is important
There are limits to its ability to approximate the full experiential model however. For example, I'll never become a surgeon just by reading and writing about it.
-
Wikipedia contributors. (2021). Experiential education. In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=Experiential_education&oldid=1031833310 ↩
-
-
Heterarchy
2021-09-06 09:04
A heterarchy is an organizational structure that includes unranked and non-hierarchical elements. It can also be used to define structures that are ranked hierarchically, but have the potential to be ranked in different ways.1
Heterarchies can be disjoint from, a subset of, a superset of, or equivalent to hierarchies. There's no mathematical requirement that expresses one in terms of the other nor are they mutually exclusive.
Any two elements in a heterarchy are capable of being linked together in one or more ways. No one way of dividing a heterarchy can ever be all-encompassing and totally encapsulate all the relationships that might exist. In this way, heterarchies resemble forested graphs that may or may not be directed or cyclic.
The requirement of perspective or choice is how we know that 202109060845 Knowledge is a heterarchy and 202109060835 Knowledge is constructed. Each division of our knowledge is partial. Each perspective on the whole invites new connections and divisions.
-
Heterarchy. (2021). In Wikipedia. https://en.wikipedia.org/wiki/Heterarchy ↩
-
-
Knowledge is a heterarchy
2021-09-06 08:45
Knowledge has to be a 202109060904 Heterarchy because 202109060835 Knowledge is constructed — it requires a perspective, a learner, or a choice of framing. No single vantage point of our knowledge can ever be complete. We're required to ask, "how much do I know about this". The questions "how much do I know" or "how much is known" don't even make sense.
The connection between two pieces of information is relative to our choice in perspective. It's also possible for any two pieces of information to be related to each other. These are the core requirements for a heterarchy in general.
Knowing that knowledge is a heterarchy means that we can optimize our knowledge management for this type of structure and make a system that will last and evolve as we learn and grow.
Note that heterarchies do not exclude hierarchies. For instance, a sub-graph of knowledge could very well be hierarchical. Taking basic arithmetic as an example, we learn how to do simple addition and subtraction, then more complicated addition or subtraction, and then build on that to understand multiplication and division.
-
Knowledge should accumulate
2021-09-06 08:36
If we don't turn our learning practices into an ongoing accretive effort, what's the point?
As we learn new things we should be mindful that none of our knowledge exists in a vacuum. We seldom think of all of the unconscious things that we know and how they make learning new things easier (or harder #thread). We also tend to discount the time and effort that has gone into past learning (202208211352 There is no shortcut to learning) instead favoring the idea that it's natural to know certain things. Most people could not specify how and when they created some arbitrary piece of knowledge (202109060835 Knowledge is constructed).
Therefore, we should be mindful of the compounding effort of learning (202304112152 Intellectual investment is like compound interest, 202304102048 Compounding Interest). 202109091133 Notes should associate organically as we build clusters of information and we should allow surprise connections to expand our thinking (202109091131 Notes should surprise us), but we should also put in the conscious effort to expand our areas of knowledge.
It takes effort to 202109060816 Do your own thinking especially as we utilize the 202205021249 Stock and flow of knowledge to accumulate information in a modern 202205021701 Digital streams vs gardens ecosystem.
-
Knowledge is constructed
2021-09-06 08:35
Constructivism and also Constructionism are theories of knowledge that requires there to be a learner for knowledge to exist. Until someone learns information, connects it to things they already know, and internalizes the information in a personal context, knowledge cannot exist.
Supporting arguments
- Having a text or reference at hand does nothing to increase knowledge, we have to create something, do the work, wrestle with the ideas, and engage effortfully to create our own knowledge.
- Research works better one thing at a time. Find a source, process it to completion, then use your newfound knowledge to find another source. If we don't, we run the risk of picking sources that are useless by the time we get around to reading them. Processing to completion includes writing about what you've read. This is where these notes come in. We take transient notes as we're reading and then write our thoughts here or in drafts of actual writing. (Iterative accumulative approach to writing #thread and writing is important #thread)
- Consider that data patterns and descriptions mean nothing on their own. For instance, strongly correlated but spurious patterns may be obviously meaningless.[^vigen2013] Instead, we require a pattern or description (what), an interpretation of that pattern (why), and — critically — to synthesize multiple interpretations, hypotheses, theories, or models into a bigger picture and create something useful or interesting (why why or higher level why). Patterns and interpretations are the main work of our knowledge management system here. Synthesis happens when we write about (or just read and string together all the knowledge we accumulate in the system).
-
Sapere Aude
2021-09-06 08:33
Meaning "Dare to know" or "dare to be wise", sapere aude is a saying originally attributed to to the Roman poet Horace in his Epistularum liber primus (First Book of Letters) from 20 BCE.
Dimidium facti, qui coepit, habet; sapere aude, incipe. ("He who has begun is half done; dare to know; begin!".[^wikipedia2021sapere])
In this epistle, Horace uses the phrase as the moral of a story of a fool who waits for a stream to stop flowing before attempting to cross it. The phrase suggests the value of human endeavor, persistence, and our need for effort to overcome obstacles.
This phrase was popularized in the 18th century when 202109071212 Immanuel Kant used it in his essay Answering the Question: What is Enlightenment? as a motto for the 202109071219 Age of Enlightenment. In the essay, he challenges readers to follow a program of intellectual self-liberation by means of reason while also implying that the majority of people are unfaithful stewards of our forebears' efforts to lift humanity out of ignorance and immaturity.
This piece of philosophical thought is similar to Socrates's popular phrase 202109071223 The unexamined life is not worth living. Both reflect a hopeful belief that the pursuit of wisdom is a noble cause that can uplift individuals and humanity as a whole.
-
My next level
2021-09-06 08:25
I'm 30, what do I want to do by the time I'm 40? 10 years is a long time, but will be here before I know it.
Some candidate ideas that have consumed mind-share before now:
- Continue down the tech leadership path
- Blaze an entrepreneurial trail of my own
- Research and create something completely new
- Write a book
- Are any of these what I want?
- What would it take for me to pick one and follow it relentlessly?
- Is there a way to do more than one in a meaningful way?
The first thing is 202205231130 Knowing when to leave.
- Leave
- Stay
After that our paths diverge:
- If I leave, where do I go, how do I decide, what would I want to work on, what areas would I want to grow in?
- If I stay, what do I want to work on, what areas do I want to grow in, what is my future, what goals do I have?
A note on open-ended work
For much of the ground-breaking work, the challenge lies even in figuring out what to do. Not just how to do it. Breaking things down and checking things off a list day in and day out isn't satisfying looking back on a year's time span or more. If things can be broken down that easily and checked off, it must not be all that interesting.
-
Do your own thinking
2021-09-06 08:16
It's too easy to let other people's thoughts, opinions, and models dominate our own.
202109071331 Arthur Schopenhauer has some great quotes on this topic.
When we read, another person thinks for us: we merely repeat his mental process. In learning to write, the pupil goes over with his pen what the teacher has outlined in pencil: so in reading; the greater part of the work of thought is already done for us. This is why it relieves us to take up a book after being occupied with our own thoughts. And in reading, the mind is, in fact, only the playground of another’s thoughts. So it comes about that if anyone spends almost the whole day in reading, and by way of relaxation devotes the intervals to some thoughtless pastime, he gradually loses the capacity for thinking; just as the man who always rides, at last forgets how to walk. This is the case with many learned persons: they have read themselves stupid.[^schopenhauer1851]
For the more one reads the fewer are the traces left of what one has read; the mind is like a tablet that has been written over and over. Hence it is impossible to reflect; and it is only by reflection that one can assimilate what one has read if one reads straight ahead without pondering over it later, what has been read does not take root, but is for the most part lost. Indeed, it is the same with mental as with bodily food: scarcely the fifth part of what a man takes is assimilated; the remainder passes off in evaporation, respiration, and the like.[^schopenhauer1851]
-
Prototype Expand Consolidate
A Method for Building Maintainable Systems
2021-09-01 00:00
Today we look at an efficient, sustainable engineering loop — prototype, expand, consolidate.
TODO: remove for regular zettel?
The Loop
An efficient, sustainable engineering loop can be describe through the motto prototype, expand, consolidate.[^foote1994] This loop consists of three eponymous phases. This has also been referred to as the Fractal Model of software development lifecycles.
Phases
Prototype
Our primary objectives during the prototyping phase are learning about the problem space and fitting a solution to that. We pick specific portions of the problem space to stake our understanding to and just start building something.
We deliberately don't spend time trying to build perfect understanding and systems during this phase. Doing so is a waste of time because we're inevitably blind to the realities at the end location without walking the path first.
Expand
Our next objective is to expand. Similar to prototyping, we expand our understanding of the problem space and the robustness of our solution. This is the phase where nuance comes in. People find themselves saying "I didn't know that worked like that" or "I didn't know it needed to be able to do that" which causes us to expand our knowledge and systems to incorporate new ideas and functions.
-
Prototype, Expand, Consolidate
2021-08-26 13:02
An efficient, sustainable engineering loop can be describe through the motto prototype, expand, consolidate.[^foote1994] This loop consists of three eponymous phases. This has also been referred to as the Fractal Model of software development lifecycles.
Phases
Prototype
Our primary objectives during the prototyping phase are learning about the problem space and fitting a solution to that. We pick specific portions of the problem space to stake our understanding to and just start building something.
We deliberately don't spend time trying to build perfect understanding and systems during this phase. Doing so is a waste of time because we're inevitably blind to the realities at the end location without walking the path first.
Expand
Our next objective is to expand. Similar to prototyping, we expand our understanding of the problem space and the robustness of our solution. This is the phase where nuance comes in. People find themselves saying "I didn't know that worked like that" or "I didn't know it needed to be able to do that" which causes us to expand our knowledge and systems to incorporate new ideas and functions.
There's another optional objective in this phase though.
-
Measure what you do
2021-08-19 10:29
It's important to measure what you do. This comes into play in all sorts of areas, but is most generally related to productivity and value.
In 202104291523 Leadership, you need to measure what your team does. Remembering that 202108191025 Teams exist for a reason and 202104291524 Execution is the priority of team management, it's clear that you need to be able to say definitively whether the thing your team is doing is the right thing with the right outcome. Remember to 202309011342 Measure output instead of activity.
Regarding 202106221150 Procrastination, measuring what you do can be an effective way to stave off the emotional aversions that trigger procrastination (202106221122 Procrastination is triggered by emotional aversions).
-
Teams exist for a reason
2021-08-19 10:25
Teams only exist because something needs to be done by that specific team. It's clear from this perspective that 202104291524 Execution is the priority of team management because without execution, we could never be addressing or fulfilling the reason that the team exists.
We could always have a new VP tomorrow - and that the VP's first order of business could be asking, "why do you have so many people here and how do I know they are doing the right thing?"1
It's not sufficient to simply 202106221152 Define success for a team though. It's also important to 202108191029 Measure what you do to ensure that your purpose is truly being fulfilled. It's possible for the team to perform excellently while working on the wrong things.
Another reason that teams exist at all is because 202202011405 Teams abstract individuals over time. Our purpose — our raison d'être — isn't important enough if we don't want to safeguard against its failure through personnel changes.
-
Zalewski, M. (2018, February 24). Getting product security engineering right. Lcamtuf’s Blog. https://lcamtuf.blogspot.com/2018/02/getting-product-security-engineering.html ↩
-
-
Block model for maximum capacity
2021-08-03 13:51
The block model for maximum working capacity is as follows:1[^auzenne2014floor2]
- There are small blocks and large blocks that represent tasks, projects, or any responsibility a person has to manage or work on.
- Small blocks take up 1 unit of capacity
- Large blocks take up 5 units of capacity.
- Each person in an organization has a box of maximum capacity equal to 15 regardless of how it's split up. A person could have 15 small blocks or 3 large ones or something in between.
- There are no exceptions or ways to expand that capacity.
- There are only two options for units of work: do or delegate. Nothing can move around or leave the system in any other way. If you do the task, it's in your capacity box. If you delegate it, it travels down a level and is in that person's capacity box.
This model is useful for describing a few phenomena such as how 202108031350 Delegating increases the significance of tasks and where we need to 202106241530 Delegate to the floor.
-
Auzenne, M., & Horstman, M. (2014, October 11). Delegating To The Floor—Part 1. Manager Tools. https://www.manager-tools.com/2014/09/delegating-floor-directs ↩
-
Delegating increases the significance of tasks
2021-08-03 13:50
The 202108031351 Block model for maximum capacity has interesting ramifications on delegating work to direct reports.12
In the block model, each person has the two options: do a task or delegate it. What we don't get immediately from the definition is the corollary that the act of delegating a unit of work increases it from a small block to a large block.
This happens for two reasons:
- If you're told to do something by your boss, it becomes important even if it's not a big deal.
- If your boss is delegating it to you, it's likely a new experience and might require some growth or new skills to accomplish. Therefore it's more difficult, time consuming, or challenging.
Another behavior that the model describes implicitly is how we can 202106241530 Delegate to the floor.
-
Auzenne, M., & Horstman, M. (2014, October 11). Delegating To The Floor—Part 1. Manager Tools. https://www.manager-tools.com/2014/09/delegating-floor-directs ↩
-
Auzenne, M., & Horstman, M. (2014, October 26). Delegating To The Floor—Part 2. Manager Tools. https://www.manager-tools.com/2014/09/delegating-floor-directs-part-2-hall-fame-guidance ↩
-
Designing for Big Screens
An Experiment in Adding More
2021-08-01 00:00
I've always wanted to see what was possible on the web when we use all the space we're given. Today we look at my take on how to add more for those who have the extra real estate.
There's that old, inaccurate saying, "we only use 10% of our brain". As terrible as it is, it's stuck with me over the years for some reason and it popped into my head the other day while working on this site.
I was trying to decide how to handle extra large breakpoints and was settling on containers with a
max-width
so that the content stays centered and predictable. It works well, but when using a ultra-wide screen or ultra-high resolution screen there's a lot of blank space just hanging around. So I started trying to think of a way to make the site more useful for people with all that extra real estate. After all, more and more people are using UHD screens.Note: For the rest of this post, I'm going to use the abbreviation UHD to refer to anything that's got enough screen space to end up in this category where there's usually a lot of blank space. Typically, I'm thinking of screens that are over 1440p. So something more in the 4k range, but not necessarily. A ultra-wide 1080p screen might also be considered UHD in this context just because it has much more horizontal space than a typical 1080p screen.
-
Project structure notes should answer a question
2021-07-29 23:12
Ask a question to start a knowledge project. This could be as simple as focusing your interest to an area worth reading, exploring, and adding to the Zettelkasten. Or this could be something as final as the thesis for an article, essay, paper, blog post etc.
Once you have your question to focus your project, answer it with the standard workflow while making sure to do your thinking inside of the structure note for that project.
Conversely, there are good structure notes that are organizational in nature. They implicitly ask the question "what do we know about this topic?" but they are not "project structure notes" as described here. They aren't about a specific project to learn research, learn, or develop ideas.
-
The context of a link should give you a reason to follow it
2021-07-29 21:36
When linking Zettel in a Zettelkasten, we should include the link in the context of the connection itself. That is to say, connections should be described in the Zettel that is connecting (or forward linking) to another Zettel.
For example, imagine I'm writing about apples and find that there's a striking similarity in how they grow to pears. I want to link from the Zettel about apples to the pear one, but I want to include the reason for the connection.
You could also make connections that are interesting about things that are not related. This concept is somewhat subtle, but there might be a good reason for saying that apples are very different to oranges. That reason should be in the context of the link.
Good
Apples grow in such and such a way that is nearly identical to
[[pears]]
. They have the same x and y, and do the same z.Apples are strikingly different to
[[oranges]]
in almost every way. They taste completely different, are different colors, grow differently. Because of their massive differences, the saying "comparing apples to oranges" is a ubiquitous way to signify two completely dissimilar things.Bad
See
[[pears]]
Contrasts with
[[oranges]]
-
Simple primitives don't guarantee simple constructs
2021-07-29 21:08
Using simple primitives to build a system doesn't guarantee that the end system will be simple. Simple primitives can purposely introduce complexity by being composed to express complex ideas. 202104291540 Emergence can also contribute to the complexity through unknown interactions #thread, 202110231515 Feedback loops and 202110231516 Feedforward loops, and chaos #thread.
Consider the axioms of mathematics. All of mathematics and a huge portion of other applied sciences is built on top of a few simple rules. There's seemingly no limit to the expressivity of those rules.
Corollary
Using complex primitives to build a system does not guarantee that the resulting system will be complex.
Consider the real numbers. A nuanced system with infinities and apparent paradoxes provides us with a way to intuitively express the real world around us. It gives us calculus and other methods that have been effective at building the modern world.
How does this relate to programming system design and the primitives we choose for libraries? There seems to be a bottleneck in efficiency for low level (complex?) primitives that can build complex systems, but a lower ceiling of high level primitives. You're blocked from being fast with low-level, but blocked from even expressing certain things in high-level. #thread
-
Optimizing requirements and implementations
2021-07-29 19:50
There's a saying that says
A small change in requirements should only result in correspondingly small change in implementation.
I believe this is false or — perhaps more precisely — misleading
If we describe the act of implementing requirements as a function $f(reqs) = implementation$, then the key thing to remember is that we know nothing about how this function works and therefore it's our job as developers to choose the characteristics of $f$. We have control over whether we should minimize its rate of change (its derivative $\frac{\delta i}{\delta r}$) or whether we should minimize or maximize understandability, maintenance, simplicity or any other number of characteristics of $f$.
A correlated concept is the 202110111901 Run to change ratio of a program. This note is about the optimization of that change rate, and the other one uses this change rate to build a meaningful metric about the value in making changes relative to its frequency of use.
-
Trust is a requirement for higher-level cognitive functions
2021-07-29 11:32
People cannot perform higher-level cognitive functions in untrusting environments because they're hardwired to think about survival first and foremost.[^brown2019]
These teams were successful not because they were smarter, but because they were safer.[^coyle2019]
As social creatures, our instincts and awareness of danger extend beyond the realm of the purely physical threat. We're equally worried and concerned about social threats because they can result in the same existential threat to our survival as a physical fight. In ancestral times, the approval and support of the tribe was equivalent to survival.
This all combines to show that higher order mental processes like creativity, innovation, or imagination can only be consistently and effectively produced in a safe environment.[^brown2019] Trust is the substrate of our perception of safety. Environments without trust are perceived to be (and actually are) unsafe, and therefore unsuitable for higher-order thinking and knowledge work.
A very similar but different angle on this is that 202112180933 Psychological safety is the top indicator for group performance. The difference is that in this case a minimal amount of trust and safety are required for any higher level cognitive functioning to take place. It's not obvious that this can be extended to using the amount of trust and safety to measure the level of performance. It could just as likely have been a stair-step function of whether trust exists or doesn't, not a correlation of increased performance with increased trust.
-
Bloom's taxonomy of knowledge
2021-07-28 21:44
One of the three sections of 202110260923 Bloom's taxonomy of educational objectives. The taxonomy of knowledge focuses on the cognitive (knowledge-based) domain of development.[^wikipedia2021bloom]
All knowledge is built on prior knowledge, so I shouldn't worry about feeling like I'm only creating a collection of other people ideas. I can apply bloom's taxonomy to these ideas you've collected.[^nick2021]
Remember
Knowledge involves remembering facts, terms, basic concepts, or answers without necessarily understanding what they mean. One can remember specifics (terms or facts), ways and means of dealing with specifics (conventions, trends, categories), or universals and abstractions (principles, generalizations, theories, or structures).
Example: "Name three common varieties of apple."
Understand
We then have to demonstrate an understanding of the facts and ideas by organizing, summarizing, translating, generalizing, giving descriptions, or stating main ideas.
Example: "Summarize the identifying characteristics of a Golden Delicious and a Granny Smith apple."
Apply
After understanding comes application. We use our acquired knowledge to solve problems in new situations. We should be able to use our prior knowledge to solve problems, identify connections and relationships, and understand how the knowledge does or does not apply in this new situation.
-
Data-first pipe design
2021-07-27 23:07
Contrasts with 202107272306 Data-last pipe design.
Background
With data-last being the standard convention of most functional languages, why would we want to adopt a different data-first approach? The motivation comes from type inferences and compilers.
In OCaml, type inference works from left to right, top to bottom.[^chavarri2019] If we start a list with one type, then adding another item after the first will give us a type error.
let ints = ^^^ Error: This expression has type string but an expression was expected of type int
It’s easy to see that this will come into play with a data-last approach. The data object has the type that matters to us as programmers who are manipulating them. The functions are written to accept a known data object type and work on them. This causes confusion because it’s a reversal of the error messaging we receive.[^chavarri2019]
let words = let res = map ^^^^^ Error: This expression has type list but an expression was expected of type list Type string is not compatible with type int
This error is telling us that the authority of the typing is the function of the list.[^chavarri2019] Besides being conceptually backwards — which is a subjective point — there’s an objective issue here as well. It feels as if the type inference should be able to “override” this error because we’ve already nailed down the type of
words
in the line above themap
. -
Data-last pipe design
2021-07-27 23:06
Contrasts with 202107272307 Data-first pipe design.
Background
To start, the basic idea here is that the “data” or “object” is passed as the last parameter to a function. Consider the standard library
List.map
function from OCaml.[^chavarri2019]let numbers = ; (* numbers is the "data" and the last parameter *) let listTwo = map;
Data-last pipe design is common in functional languages because of currying #thread and partial application #thread.
Let’s take the example from above and break it up taking advantage of currying and partial application.[^chavarri2019]
let addOneToList = map; let listA = ; let listB = addOneToList;
It’s obvious in this example why data-last makes sense. Partially applying the function gives us a new function that we can reuse on different data objects. This is a powerful (de)composition #thread mechanism and the style of programming building up composed functions without specifying their parameters is called point-free programming #thread. Point-free programming is only possibly because of currying and partial application.
Functional languages supported currying by default and therefore naturally gravitated towards data-last conventions.
-
The Art of using a Zettelkasten
2021-07-27 22:42
Using a Zettelkasten is more of an art than a science. It's a personal relationship with an extension of your knowledge. Above all, it's important to just consistently work and think in this system to get the most out of it.
Personal preferences
- 202109091129 Evergreen notes
- 202107272238 When to write a new Zettel
- 202107292312 Project structure notes should answer a question
- 202107292136 The context of a link should give you a reason to follow it
- 202109091133 Notes should associate organically
- 202109091131 Notes should surprise us
- Use a reference manager. The references in the manager should only be ones that have been read and processed, ready to be cited in Zettel as I write them as the last step to processing a source. Don't clutter the reference manager with things I would like to read some day.
- Use a plain text editor and files. This makes everything much more cross-compatible and future proof.
Workflow
There are categories of things that I do regularly, and my Zettelkasten has a specific single place in a broader workflow. It's important to understand how we think and how the processes we use to do that thinking and synthesizing affect your ultimate knowledge (202109080847 As We May Think).
-
When to write a new Zettel
2021-07-27 22:38
When should I write a new note vs adding or changing an existing note or set of notes? The answer is to break this down into three categories:
- When you don't have any existing notes that relate to the topic, write a new note.
- When your note is considerably different than existing notes on the general topic, write a new note and be sure to link correctly.
- When your note matches existing notes, modify them. Note that this use of "modify" includes re-structuring, creating, deleting, updating, linking, or anything else.
-
Synergist leadership style
2021-07-24 09:54
Unlike the 202107240951 Visionary leadership style, 202107240952 Operator leadership style, and 202107240953 Processor leadership style whose patterns are based on their individual preferences and behavior, the synergist is primarily motivated and focused on what is best for the organization they are part of.1 They detach their personal desires and collect information from any source available to form high level direction for their team.
To manage a synergist, make sure that they aren't taking too much time to weigh up their sources. Push them to take action when necessary and contribute a personal judgment when integrating their final direction from their sources.
Natural synergists are rare, but people with the natural tendencies of the other styles can learn to be a synergist when necessary.
-
McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0 ↩
-
-
Processor leadership style
2021-07-24 09:53
Processors are risk averse and skeptical. They thrive on systems and processes with well defined rules, boundaries, and responsibilities. Processors are analytic and prefer to use data when making decisions instead of relying on intuition or experimentation. Because of their analytic mind, they bring an objective, consistent, and scalable approach to the team.1
Processors have some drawbacks as well. They tend to overthink, overanalyze, and get stuck in analysis paralysis. They resist risk and change and can be frustrated during times where action needs to be taken before all the facts are available.
To lead a processor, build a tight relationship with them and respect their need for data and order. Make sure to listen to their opinions but challenge them to take action, give credit where it's do (both to them and others in the organization), and avoid hyperbole and emotional decision making. To see them succeed, make sure they have clear goals, priorities, and clarity in their work and purpose.
Examples: Charles Coffin (GE), Gordon Brown (UK Prime Minister).
-
McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0 ↩
-
-
Operator leadership style
2021-07-24 09:52
In contrast to the 202107240951 Visionary leadership style who like to start new projects, Operators are most interested in finishing projects. Operators are great improvisers and can achieve the desired outcome from varied and difficult situations. Operators prefer being given clear direction even though they tend to be highly capable of motivating other people. Operators are extremely task focused which has its value and drawbacks. Operators' bias towards action can be valuable as a voice for reducing unnecessary overhead and processes.1
Operators have trouble delegating and often rely on their team to follow their lead instead. They will often work outside the system if necessary to accomplish tasks. Operators can be seen as aggressive, ruthless mavericks that aren't good team players.
They shouldn't be micromanaged and can be defensive and conflict prone. To better manage an operator, provide clear direction and autonomy and help them with prioritization and delgation.
Examples: Sam Walton, John D. Rockefeller, and Steve Ballmer.
-
McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0 ↩
-
-
Visionary leadership style
2021-07-24 09:51
Visionaries are most comfortable with long-term, high-level, strategic initiatives. They thrive by 202203231647 Leading from vision. They embrace change and risk and need to be exposed to both in order to be satisfied and useful. Visionaries are often charismatic, great communicators, and enjoy building a small, loyal, tight-knit team. They alternate between periods of high creativity and output and periods where they change focus to recharge and generate more ideas for their next creative burst.1
On the downside, visionaries need to be launching new large, grand ideas and their shifting focus combined with ability to hold multiple viewpoints on the same subject can be exhausting and confusing for others. Their teammates often find their boredom with details and their tendencies to alternating extremes of commitment frustrating.
Visionaries use their vision, courage, and ability to simplify complex ideas to motivate others to execute. They need variety, accountability, and frequent check-ins to make sure they stay on track and aren't distracted by their own innate curiosity and boredom.
Examples: Thomas Edison, Steve Jobs, Tony Blair, and Jack Welch (GE)
-
McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0 ↩
-
-
Working in Public
A Way To Be More Open
2021-07-15 00:00
Finished things don't spring up out of the ground in their final state — people have to work hard on them. This is my way of pulling back the curtain on how I work.
Working in public is the idea that we should all share more of our work in progress. Finished things don't spring up out of the ground in their final state — people have to work hard on them. So working in public is an attempt to show that hard work. Or at least the time and effort that go into things, even if it's just a slow burn over some period of time.
Why would I want to work in public?
This is my way of pulling back the curtain on how I work. It's something that I feel is important and wish that there was more of on the internet.
The internet is such a big, corporate, impersonal, hate-filled mess, but there was a time when it wasn't and it could be cozy again. I consider mkalvas.com to be my version of a cozy little digital garden, safe from the ads, tracking, and noise of the rest of it. I don't know if anyone visits this site and I don't really care.
Another reason to work in public is that I believe that writing (more broadly doing) provides a final generative step in knowledge creation and retention). So anything that I can do to lower the barrier and promote more writing (code and words) is a good thing. One simple thing that can lower that barrier is to allow myself to be more comfortable with unfinished, unpolished things. I find that saying "this isn't done enough to go on the site" results in less doing in the first place.
-
Unifying My Domain
A Question of Scope
2021-07-01 00:00
Bringing all my projects under one roof.
I've been working a lot of small projects lately, learning some cool things, and wanting to write about it all. At the same time, I want to host the projects so I can link to them and show them off.
So I started updating my old site so that I could use it for hosting these projects, but then thought better of it. Instead of blogging on my blog, putting my portfolio on my homepage, and other things on other sites and domains, I'm just going to put it all in one place.
I think this approach is a good idea for a few other reasons too:
- All the code will live in one place so I'll be much more likely to maintain it and keep evolving it over time to be the tool that I want it to be.
- Building things is quicker and easier because I don't have to bootstrap a new project every time.
- I can easily expose all of my ongoing work to the world.
- There's no question about where something new should live.
On the other hand, there are some downsides:
- The project will get big.
- I'll be constrained by the tech and framework I chose here. It'll be more difficult to show off something like a Haskell project.
- Rewrites are tricky to do well. Though I have a leg up here because I'm the demanding stakeholder as well as the developer and customer.
-
Leaders work to remove obstacles
2021-06-24 15:48
One of the most important thing that a leader can do for their team is to remove obstacles to their success. Anything that gets in the way of the members' abilities to perform at the peak of their potential is a damper on the output and creativity of the team. Since 202104291947 Our purpose as leaders is to serve others, we can do many things to remove obstacles for the team.
Common obstacles we can remove:
- Not knowing what the end goal is or how we'll know if we achieved it. 202106221151 Define done and 202106221152 Define success to avoid this.
- Being unsure, afraid, or hesitant to make decisions and take action. We can take responsibility and hold on to the accountability for decisions and actions of the team (202104291526 Make the hard decisions). This frees members to be their best and perform creative work from a place of safety (202107291132 Trust is a requirement for higher-level cognitive functions).
- Requiring all work to pass through the leader. It's a common pitfall for leaders to either not trust their team's work or try to be an expert at everything the team does. Because of that, the team is slowed, blocked, and ultimately shown that the leader doesn't trust them. We avoid this by acknowledging and embodying the core tenet that 202104291525 It's not a leader's job to be the best at everything.
-
Eisenhower matrix of task value
2021-06-24 15:31
The Eisenhower matrix is a tool that can be used to prioritize tasks based on its urgency and importance. It takes a leader's perspective and includes the concept of being able to delegate urgent, unimportant tasks. People who have no one to delegate will always have the option to 202106241530 Delegate to the floor, but won't have the ability to delegate tasks that must be done.
In this method, we define what is urgent or not and what is important or not. If something is urgent and important, we should do that first. This is followed by important but not urgent, urgent but not important, and lastly neither important nor urgent.
Ideally, we'd never personally do things that are outside the first, most important, quadrant. Those quadrants can be planned, delegated, and eliminated respectively. Note that planning to do something later will eventually promote the task to urgent and important: a.k.a. needing to be done by ourselves or someone else.
Delegating is more subtle because in a perfect world, you'd take something that's not important or urgent to you and delegate it to someone whose goals and interests align so that this task would be both important and urgent for them. The goal is not to delegate in order to pawn off bad tasks to others. Those sorts of things should be eliminated if possible. Delegating thus becomes an act of finding ways to empower people to pursue their goals and entrusting them with something that you also find at least in some way important or urgent.
-
Delegate to the floor
2021-06-24 15:30
In the 202108031351 Block model for maximum capacity, work that flows from the top down in an organization is delegated from level to level. We know that 202108031350 Delegating increases the significance of tasks, but one thing that's unclear from the model is how anything ever leaves the system. We obviously can't have infinite work piling up and never leaving.
Considering the model tells us there are only two options for tasks — do or delegate — we find one solution to balancing the flows in and out (202203210833 Systems thinking) is the obvious. Do the task. This is good for one off items. We do the task and it goes away. It's no longer taking up bandwidth and we can pick up something new.
This obviously doesn't solve the problem for ongoing or repeated tasks though. If ongoing and repeated tasks are never able to leave the system, wouldn't we still end up with an overflow of work for the available capacity?
This is where delegating to the floor comes in. We delegate to the floor when we simply decide we're not going to do something. By not doing certain things, we remove them from our capacity and create an exit flow for the system.[^auzenne2014floor1][^auzenne2014floor2]
-
Be proactive
2021-06-24 15:29
Being proactive amounts to taking responsibility for your actions. Mediate your responses to events and take the initiative to respond positively and improve the situation. This is where his concepts of 202109121518 Circle of control, 202109121516 Circle of influence, and 202109121517 Circle of concern are introduced.1 Being proactive amounts avoiding allowing pressure from concerns you can neither control nor influence to negatively impact what you can control and influence.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
First things first
2021-06-24 15:28
Putting first things first requires us to examine our priorities objectively. One method for objectively evaluating our priorities is the 202106241531 Eisenhower matrix of task value. Another is the 202204091039 Impact vs effort model of task value.
Without repeating the contents of that Zettel, we should note that there are opportunities in these systems and in the general habit of putting first things first to both do things ourselves and help other people achieve their goals by aligning our interests and acting interdependently.
Another way that Covey interprets this habit is about ensuring that your behavior matches your principles and that what you say matches what you do.1 In this way, first things are your principles and putting them first amounts to doing things in accordance with those even if it's inconvenient or difficult.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Think win-win
2021-06-24 15:27
One of the 202106221713 Seven habits of highly effective people that can move people out of the 202109121536 Maturity of independence and into the 202109121530 Maturity of interdependence.1
Thinking win-win includes genuine feelings that mutually beneficial solutions and agreements are possible and favorable to ones that maximally benefit ourselves.1
Valuing and respecting others are the core of this habit. Notice that this is distinct from being nice or a pushover. Instead it's a principled way for humans to interact and collaborate.
-
Seek first to understand, then to be understood
2021-06-24 15:26
One of the 202106221713 Seven habits of highly effective people that can move people out of the 202109121536 Maturity of independence and into the 202109121530 Maturity of interdependence.1
Understanding people, fully, empathically listening to them, and being open to being influenced by them can cause them to reciprocate that behavior towards you. Without this trust and cooperation, we cannot build meaningful relationships and cooperation.
This habit borrows from Greek Philosophy. Ethos, pathos, and logos: your character, your relationships, and lastly your reasoning. The order is important. #thread
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Synergize
2021-06-24 15:25
One of the 202106221713 Seven habits of highly effective people that can move people out of the 202109121536 Maturity of independence and into the 202109121530 Maturity of interdependence.1
By combining the strengths of people through positive teamwork, we can harness 202106221146 Leverage and 202104291540 Emergence to achieve outcomes that no individual could have done alone.
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Sharpen the saw and grow
2021-06-24 15:24
One final habit from 202106221713 Seven habits of highly effective people that is ubiquitous to all aspects of life and each of the habits in their own right. Sharpening the saw and growing is all about trying to continuously improve ourselves.1
We should strive to balance and renew our resources, energy, and health to create a sustainable, long-term, highly effective lifestyle. Ways we can do this are exercising, meditation or yoga, reading, and community involvement.1
Sharpening the saw is a form of a positive 202110231516 Feedforward loop where each action enables us to compound our further efforts in personal improvement. This loop consists of three basic components: learn, commit, and do. Continuing along this upward spiral will propel one further along a path of personal freedom, security, wisdom, and power.1
Ernest Hemingway once said,
There is nothing noble in being superior to your fellow man. True nobility is being superior to your former self.
-
Begin with the end in mind
2021-06-22 17:44
Do not just act. Think first. Before we act, we should act in our minds. Is this how I think it will go? Is that how I want it to go? Are those the consequences that we wish for?
This habit applies to all areas of life.
In business, it usually means that we should set a goal and stay true to measuring ourselves against those outcomes as we work. Are the projects we're undertaking helping us reach that outcome?
In life, we should envision the type of future that we want to have so that we can plan and work towards it. We must act based on principles and constantly review our mission: am I who I want to be right now, what is my opinion on how my current life aligns with my principles, how do I want to be remembered?1
-
Covey, S. R. (2004). The 7 habits of highly effective people: Restoring the character ethic (Rev. ed.). Free Press. ↩
-
-
Seven habits of highly effective people
2021-06-22 17:13
The seven habits of highly effective people are described in the eponymous book by Stephen R. Covey.[^covey2004] Covey discusses how people can see the same things and have different perspectives. He also discusses how maturity is a continuum that can be describes as moving from dependence to independence to interdependence.
An observation: 202109251019 Highly effective people are leaders.
Circles of Influence
Maturity Continuum
- 202109121550 Maturity of dependence
- 202109121536 Maturity of independence
- 202109121530 Maturity of interdependence
The Seven Habits
Habits for building independence
- 202106241529 Be proactive
- 202106221744 Begin with the end in mind
- 202106241528 First things first (Covey uses the 202106241531 Eisenhower matrix of task value as an example of how to define what should be put first)
Habits for interdependence
- 202106241527 Think win-win
- 202106241526 Seek first to understand, then to be understood
- 202106241525 Synergize
Habits for continual improvement
-
The four types of leaders
2021-06-22 17:12
There's a theory that categorizes leaders into at least one of four archetypes.1 There can be overlap among these and we can work at being better in areas that aren't natural for us, but we all have at least one of them that comes without as much effort as the others.
As with other personality categorization frameworks, the value of putting ourselves in these categories is not to define what we will or must do, rather to give us insight into our behaviors. We can augment our strengths and mitigate our weaknesses only if we're aware of them.
Which of these types do I fall most naturally into?
I think I’m most naturally a visionary style leader with a need to improve my operator skills.
The Four Types
- 202107240951 Visionary leadership style
- 202107240952 Operator leadership style
- 202107240953 Processor leadership style
- 202107240954 Synergist leadership style
-
McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0 ↩
-
Define success
2021-06-22 11:52
202106221744 Begin with the end in mind and be sure to define success at the outset of a project or task. This is important for determining when to be done with a task and whether you succeeded in the ultimate goal that was supposed to be accomplished.
Having a clear definition of the goal and what it looks like to successfully fulfill it is the only way that we can keep on track while also allowing for our projects to be organic enough where we can adapt to changing information. Without a definition of success, we can trick ourselves into thinking we're accomplishing things while missing the point entirely. We can also trick ourselves into not valuing what we've accomplished or even get completely side tracked (failing to keep 202106241528 First things first) and forget about what we set out to do.
This differs from 202106221151 Define done because done is the fallback for success — it happens whether we succeed or not. Success requires measurement but done can be as simple as a deadline.
-
Define done
2021-06-22 11:51
Defining what it means to be done with a project or task is crucial.
Here, done includes all outcomes including successes, neutral ones, and failures. We need to have a clear picture of when to stop working. Depending on the outcome, that can range from celebrating a win to cutting losses.
We must 202106221744 Begin with the end in mind in order to be successful in the long term even if we’re not successful in this specific task. We have to be able to consistently make progress even if that’s learning what avenues are not valid by exploring them and failing.
Defining what it means to be done can help with 202106221150 Procrastination because 202106221122 Procrastination is triggered by emotional aversions like ambiguity and lack of structure. Having a clear definitions removes those aversions from the situation.
This differs from 202106221152 Define success because done is the fallback for success — it happens whether we succeed or not. Success requires measurement but done can be as simple as a deadline.
-
Leverage
2021-06-22 11:46
- 202106221150 Procrastination kills leverage by keeping our actions focused on easy, small tasks instead of challenging meaningful ones.
- 202304102048 Compounding Interest/returns are some of the highest leverage things that we can interact with. #thread
-
Procrastination is triggered by emotional aversions
2021-06-22 11:22
To accomplish a task we must go through the stages of inception, planning, action, and termination. We decide to do something, plan out how to do it, do it, and decide when it's done. We sabotage our progress through these stages because of emotional aversions.[^cunff2021]
One strategy that's particularly effective against most of these aversions is to 202108191029 Measure what you do. By measuring your progress, and building measurements into the tasks, we can see that we are in fact making progress and accomplishing something.
Eight Aversions
- Boring — It's not intellectually stimulating enough and we're just not interested in doing it.
- Frustrating — For example, you may be using a tool that is difficult and inefficient and get frustrated with it. This could cause you to stop doing it or not start doing similar tasks in the future.
- Difficult — Challenging tasks take time and effort so we often work on simpler things first and put off the big tasks. This can be a killer of 202106221146 Leverage causing us to stay stuck on a treadmill of repeatable low-value tasks.
- Stressful — Stress is a huge emotional aversion. There are strong psycho-physiological consequences of experiencing stress. Stress typically delays our starting of the task and often is met with a less stressful reality once the task is being done.
-
Rewrites Are (Almost) Never the Answer
A Difference Between Desire and Reality
2021-06-01 00:00
Rewrites are tricky to get right. Despite how often we're drawn to them, they're almost never the right solution.
As a developer, my first reaction when getting into a legacy codebase is almost always to bulldoze and rewrite it. Unfortunately, rewriting code is commonly a huge mistake for software companies.
If you've been around long enough, you've probably read the classic article by Joel Spolsky, a founder and ex-CEO of StackOverflow where he names rewrites the "single worst strategic mistake that any software company can make." In this article he walks through a dot-com era rewrite by Netscape that was such a bad idea, it can track directly to the downfall of the company.
As developers, want to do rewrites because we get our excitement from building things that we can call our own — grand, shiny towers of our Legos that we can point to and say, "I did that." But according to Spolsky, there's more to it.
There's a subtle reason that programmers always want to throw away the code and start over. The reason is that they think the old code is a mess. And here is the interesting observation: they are probably wrong. The reason that they think the old code is a mess is because of a cardinal, fundamental law of programming:
-
The Silent Majority of Engineering
A Bit of Perspective
2021-05-01 00:00
Most engineers aren't using all the new shiny tools. Most are quietly coming to work every day, writing code in tried and true ways, and getting things done.
I once heard a quote about software engineers. It went something like this:
Most engineers aren't using all the new shiny tools. Most are quietly coming to work every day, writing code in tried and true ways, and getting things done.
The sentiment has stuck with me. It's something that we don't think about all the time as developers.
There's always something new and interesting to learn and try out. There are never ending amounts of opinions and preferences, ergonomics and design.
It's good to keep up to date. It's good to be a lifelong learner.
But what happens when we need to get something done reliably and predictably?
We don't use all the new shiny tools.
We quietly come to work every day, write code in tried and true ways, and get things done.
-
Eat the losses
2021-04-29 20:40
Sometimes, being a leader means suffering for the team.
This relates to the fact that 202104291525 It's not a leader's job to be the best at everything. When we 202104291526 Make the hard decisions there will be times when we collect information from our team (who are the experts) and they will turn out to be wrong.
A bad leader will blame the team, the expert, or the information, but ultimately, it's the leader's responsibility to eat the loss. We should try to level up our teams and their abilities of course, but more importantly we need to unify the team around the healing, learning, and growing.
Be careful of ego. It will try to push you to make sure that everyone knows you were right or that you understand or that things are fine. Don't let it win. Remember that 202104291947 Our purpose as leaders is to serve others.
Concerning handling problems that need to go away:
- Acknowledge the thing
- Acknowledge why it's a problem
- Acknowledge your role in it
- Address what will happen next
- Follow through consistently
- Allow people (not leaders) to vent and grieve. This means that the leaders suffer in private for the benefit of the organization. Pouring out your grief about it creates less space for theirs because of your positional authority.
-
Our purpose as leaders is to serve others
2021-04-29 19:47
Contrary to the traditional approach to leadership which puts the company and the mission above all else, servant leadership focuses on employees and customers. Instead of employees working to serve a leader, the leader works to serve their employees and teams work to serve their customers.
Being a servant leader means that we share power, put the needs of our teams and employees first, and help people develop personally and professionally as highly as possible. It also means that we 202104291526 Make the hard decisions and follow up by taking on risk and 202104292040 Eat the losses when needed. It means suffering for the team sometimes.
Interesting thought: At first glance it looks like the principle that 202104291524 Execution is the priority of team management is at odds with being a servant leader. If we look closely though, it's clear that these are actually fundamentally tied together. True high performance execution requires this substrate of employee support in order to be possible. (202107291132 Trust is a requirement for higher-level cognitive functions and 202112180933 Psychological safety is the top indicator for group performance)
-
Emergence
2021-04-29 15:40
The combining of data, events, or constituent parts can produce effects that are not in the details. The sum of the parts is not equal to the whole.
A similar but opposite effect is when the combining of data obscures effects in the details. This and emergence are illustrated by 202208211331 Simpson's paradox.
Prerequisite conditions for emergence
- Group dynamics and sociological phenomena are sufficiently complex to create emergent properties of the whole compared to the individual parts. (202104291527 Live in the ambiguity)
- 202107292108 Simple primitives don't guarantee simple constructs, so complexity of primitives can't be used as a bell-weather for identifying emergent systems.
- 202110231515 Feedback loop, 202110231516 Feedforward loop, and 202110231517 Self-reference are common sources of emergence.
Outcomes of emergence
- Sometimes 202402201204 Resilient, self-organizing systems will generate hierarchies and furthermore 202402241722 Hierarchies enable iterative progress. This property is emergent from simple laws.
-
Repeat the message in order to be heard
2021-04-29 15:29
There's a saying that goes
For a message to be transmitted effectively it has to at least be communicated in 3 different ways and said 3 times each way.
There's another saying that says
You need to say something 7 times for someone to hear it once and they need to hear it 7 times for them to understand it.
A huge portion of responsibility as leaders is to collect information, 202104291526 Make the hard decisions, and then follow through on them. Since 202104291525 It's not a leader's job to be the best at everything, we're not the people who are carrying out the actions that come out of the decision. In order to keep everyone aligned and successful, it's critical that everyone knows the message behind the decision.
Everyone working on the project or direction should be able to answer the question "what is the vision and strategy for this project?" on the spot. It should be so ingrained in their heads that they can make the expert decisions that they're supposed to without needing to ask the leader about each one. The only way they can do that is if they know that message and that mission deeply. The only way to get people to know that message deeply is to keep repeating the message about where we're going and why (202203231647 Leading from vision). It's much easier for people to make the right decisions when you 202304051001 Use a simple heuristic to guide gradual adoption.
-
Leaders have to accept a slower feedback loop
2021-04-29 15:28
As a leader's scope of responsibility increases, the ambiguity and difficulty of making decisions based on tight feedback loops increases. Leaders therefore have to learn how to 202104291527 Live in the ambiguity and 202104291526 Make the hard decisions based on slower feedback loops.
As a developer, we see instantaneous feedback when coding. More broadly, we see quick research and decision making feedback loops on a small scale. If I don't know how to do something, I research, try something, and immediately know if it's working or not.
As a leader, our feedback loops are based on long term team health and execution. We set a direction, 202104291529 Repeat the message in order to be heard ad nauseam, and then have to wait. We have to see if people are taking up the vision or strategy and laying down concrete steps in the right direction. It takes time for the movement to happen and it takes time for us to see if that movement is amounting to what we thought it would.
This doesn't mean that we shouldn't try and measure our feedback loops at all. On the contrary it's critical to 202108191029 Measure what you do and have faith that these measurements are accurate so that the long periods of time we spend tuning them are well spent.
-
Live in the ambiguity
2021-04-29 15:27
Great people can tolerate ambiguity; they can both believe and disbelieve at the same time.[^hamming2020]
Living in ambiguity is a skill that every leader should master. It becomes increasingly important as the scope of your responsibilities involves higher level decisions and information. 202104291525 It's not a leader's job to be the best at everything.
Ambiguity is abundant in the world of broad directional decision making. There's no such thing as certainty. 202104291528 Leaders have to accept a slower feedback loop. We need to be able to build reasonable mental models, act on them, and accumulate more information to continue steering the ship. Ambiguity is no excuse for not being able to 202108191029 Measure what you do.
In order to 202104291526 Make the hard decisions, we need to be comfortable knowing that these decisions are hard because of the ambiguity of our position. We have competing information, context, and goals vying to win out. There are only shades of grey working here. Don't fall into the trap of letting this ambiguity cause 202109090909 Decision paralysis.
Just as biology is a field about 202104291540 Emergence where the simple, predictive, mechanistic laws of physics create something unpredictable and greater than its pieces, leadership is a field where we can no longer follow cause and effect in a functionalist manner. Emergence is at play in the real world situations we see every day.
-
Make the hard decisions
2021-04-29 15:26
Possibly one of the most important tasks for a leader is to make the hard decisions. Leaders collect information from a wide area of context and take on the risk of setting the direction based on that information.
Experience has taught me that generally a decisive boss is better than a waffling one — you know where you stand and can get on with the work that needs to be done![^hamming2020]
It's particularly easy to give in to 202109090909 Decision paralysis when facing a hard decision.
[Remember that] the decision you made is entirely yours, and while the work preceding a hard decision can feel like an immense and endless chore, decisions and their subsequent consequences are, in fact, a privilege of leadership.[^rands2021decide]
Making the hard decisions comes at a heavy cost and the ultimate responsibility for these decisions rests on our shoulders. Sometimes this means that we need to shut up and own the bad results. How we 202104292040 Eat the losses is critical for setting the cultural tone for your team.
Another pitfall of making the hard decisions is getting an inflated sense of ego about our importance. Just because we're responsible for collecting information and setting a direction does not mean that we're the sole arbiter of what is right. We must remember that 202104291947 Our purpose as leaders is to serve others.
-
It's not a leader's job to be the best at everything
2021-04-29 15:25
Not only is it impossible for leaders to know everything about the things that happen under them, it's more importantly not their job to know them. There's no failure in not being an expert in everything going on.
A CEO certainly isn't expected to know how to do all the various engineering, design, marketing, sales, legal, finance, and other functions of their business. It's the same for other leaders at different levels. It can be challenging, but ultimately 202104291947 Our purpose as leaders is to serve others and facilitate success, not to be the ultimate authority and expert on all matters. Leaders 202104291527 Live in the ambiguity and 202104291526 Make the hard decisions in order to bring everyone across the finish line together.
This skill becomes increasingly important as we increase our scope of responsibility. Again, our CEO example shows that it's simple common sense that this is a critical skill for executives. How then do we occasionally fail to see that it's just as important to start developing that skill even as a new manager?
-
Execution is the priority of team management
2021-04-29 15:24
Above all else, a team has to execute well. If this isn't happening then nothing else matters. After all, 202108191025 Teams exist for a reason and the reason for having the team at all is to build something greater than the individuals. 202104291947 Our purpose as leaders is to serve others in order to make that happen.
It’s important not to construe this to mean that we value execution over things like culture, health, and happiness. In fact the opposite is true. Real thriving and high performance execution can only happen when we build a team with high psychological safety and implicit trust.
In order to keep the team moving forward and executing well, we often have to absorb discomfort for the team. Sometimes, we have to 202104291526 Make the hard decisions. Sometimes, we have to 202104291527 Live in the ambiguity of people processes and remember that 202104291528 Leaders have to accept a slower feedback loop. Sometimes we have to remember that we can't control everything and that 202104291525 It's not a leader's job to be the best at everything.
On failing to execute
If the team fails to execute, it's still the leader's responsibility to 202104292040 Eat the losses. There is important grieving, learning, and growing to be done during this. But serving the team through these scenarios means that we absorb the bad, allow the motivating to have an impact, and highlight the good.
-
Leadership
2021-04-29 15:23
- 202203231646 Affecting long-term change
- 202203241152 Ask for more from your people
- 202110181203 Be clear about expectations
- 202110181158 Coaching underperformers
- 202109090909 Decision paralysis
- 202203241428 Do more with less
- 202110181231 Don't tacitly endorse bad behaviors
- 202104292040 Eat the losses
- 202104291524 Execution is the priority of team management
- 202205021956 Feedback is for changing behavior
- 202407010952 Freedom and Responsibility
- 202208211358 Hawthorne effect
- 202110181205 Invest discretionary time in top performers
- 202104291527 Live in the ambiguity
- 202104291528 Leaders have to accept a slower feedback loop
- 202106241548 Leaders work to remove obstacles
- 202203231647 Leading from vision
- 202104291526 Make the hard decisions
- 202108191029 Measure what you do
- 202205031247 OODA loop of action
- 202206171206 Delivery Performance vs Value Delivery
- 202110052025 The quality of your decisions is the currency of leadership
- 202110220845 Remote team management
- 202104291529 Repeat the message in order to be heard
- 202110181215 Target praise carefully
-
The Entry Point
2021-04-29 15:22
#new #thread #source #structure #wip
This is the main entry point into my knowledge graph. At the risk of being prescriptive about categories and connections, a single top-level entry point is useful to maximize discoverability. If you're looking for other things I do, check out my home page.
The lofty goal of this project is to contain all of my knowledge. I hope this will be a lifelong project where I can learn, collect, and create a record of my thoughts in a simple, plain-text format that should never become obsolete.
Workflow
This will change drastically over time, but in an effort to keep myself organized, here's my process.
- Find a source of information
- Create a #source note with solid citations (managed in Zotero) for taking notes while consuming the source.
- Create, link, and manage the Zettel and my Zettelkasten.
For more information on the why and how of using a Zettelkasten, see 202107272242 The Art of using a Zettelkasten.
Tags
- The #structure tag is used for structure notes. These are hubs of Zettel that are connected under some sort of idea. They help with discoverability and maintenance of the Zettelkasten as a whole.
- The #source tag is a single Zettel to organize the notes I take while working through some source material. Each Zettel that's a #source is also a #structure Zettel. For example, I take notes while reading a book in a Zettel that's named for the book's title and tag it with the #source tag. These notes aren't technically needed if we do a good job citing sources, but it's helpful during the initial reading and note taking for long-form content that requires multiple sessions.
-
The Only Correct Way to Organize Code
A Joking Rant About Keeping Code Neat
2020-09-01 00:00
Why we need a system for code organization and what that system should look like.
Highway to the Danger Zone
Though the pattern is full and it will definitely get me in trouble, I'm going to metaphorically buzz the tower by putting some pretty strong opinions out there today about file naming and code organization. So buckle up Goose, and don't hit that eject button.
First off, file naming. The correct answer here is
kebab-aka-hyphen-case
which is all lowercase and hyphen delimited. No exceptions, and no, your community standards aren't a good enough reason to change this one as we'll see in a minute. Looking at youComponentName.jsx
👀 .Second, code organization. The only correct answer is
folder-by-feature
as opposed tofolder-by-random-devs-logic
orfolder-by-tech
. We'll take an organic trip through all three of these systems and see where we end up.Either of these alone is enough to spark a holy war among devs, but unlike tabs vs spaces, I think there's good enough objective reasons to pick one over the others. Let's take a look.
File Naming
I don't want to spend too much time on this topic because it's much less important to a team of developers than having a consistent system for creating, finding, and maintaining the actual functionality of your product through its source code. Still, you can see how it's in the same vein and deserves an honorable mention.
-
2019 Work Reads
A Slew of Short Book Reviews
2020-07-01 00:00
My professional reads from last year, rated and reviewed.
Overview
I like to read. I read a lot about a lot of things, but I would say that I devote maybe 40% of my reading time to things that I'd consider “professionally oriented”. These are books, articles, blog posts, white papers, etc. that I probably wouldn't read if I didn't have a job. They aren't all directly related to my job, but they all make me better in some way.
So here's a list of professional books I read in 2019 (roughly in chronological order) along with a rating out of five possible stars and the two second summary of why you should or shouldn't read them. Spoiler — they weren't all winners.
Clean Code
by Robert “Uncle Bob” Martin
Rating: 3/5
A slightly dated look at how code can be simple and maintainable. There are some good gems that can be extracted for programmers of any language or experience level. A bit long to read all the way through and considerably better in paper format as opposed to e-book because of the code blocks. Definitely worth a look if you're a day-to-day coder.
-
Gestalt Principles of Design
A Crash Course on the Whole
2020-06-15 00:00
Today we're looking at 'die Gestalt', the result of early 20th century studies in psychology that described how humans perceive the world, and how it can help us make outstanding user interfaces.
Gestalt Psychology
Gestalt (ɡəˈʃtælt) feminine noun: 1. An organized whole that is perceived as more than the sum of its parts.
Around the turn of the century, German and Austrian psychologists were investigating the human mind's ability to perceive the world around it. Even though we're confronted with a world filled with exceptions and strange sights, we can somehow sort it all out. How do we come to form a meaningful, consistent perception of reality based on the chaotic conditions around us?
The prevailing conclusion of this school of psychology is that when perceiving the world, the mind sees eine Gestalt — or a "global whole" — instead of a collection of individual parts. The mind also has the ability to organize these wholes into even larger wholes. For instance, the mind can recognize a hat or a person as a whole object instead of a collection of lines and curves, but our mind can also perceive a larger whole of a person wearing a hat instead of seeing two smaller unrelated objects near each other. According to one of the founders of Gestalt psychology, Kurt Koffka,
-
Revamping My Blog
A New Coat of Paint
2020-06-01 00:00
You may have noticed that the blog got a new look and feel recently. The changes weren't purely cosmetic though. Let's take a look at how I migrated from a Bootstrap and PHP based blog to React, Next.js, and Styled Components.
Motivation
It's probably not a surprise to most people that I'd want to switch from a PHP based blog to something a little more modern, but honestly — and perhaps controversially — I think PHP is still an amazing solution for simple use cases like mine. No, the shininess of tech isn't a good enough reason on its own for me to rebuild the blog from the ground up. So what reasons were there for updating things and switching tech?
Criteria
- Ease of Maintenance — My blog was running like a dream for years on a crazy simple setup, so any solution that I went with was going to have to at least match it in terms of maintenance effort.
- Ease of Writing — There was quite a bit to be desired in the old setup. I was using a rich text editor that was hard to get well formed rich text data out of. It was also really difficult to use on mobile. Wanting to use a simpler format (like markdown files) and the ability to use a plain text editor was a big reason to make a switch.
- Performance — My old setup was slow for a host of reasons. I was running PHP and MySQL on the same old machine sitting underneath my printer. The thing was ancient when I acquired it longer ago than I care to admit. It would be nice if I could take advantage of something out there that did lightning fast static site edge cached delivery.
-
CodeMash 2020 - Review
A More Formal Report on a Conference
2020-04-01 00:00
A review of the sessions I attended, what I learned, and how I liked the overall experience of CodeMash 2020.
Short Post
I said in my live blog post from CodeMash that I was going to do a follow up to the conference and review the experience. Since there were other people at Beam interested in writing about their experiences too, we decided to pool our effort as a team and write a single post for the Beam Engineering Blog. Because it was co-authored by other Beamers on Beam time, I'm not sure if I should cross-post it in its entirety. Instead, here's a link to the finished product, Yet Another CodeMash Blog Post. Go check it out.
On a final note, if you're on the fence about CodeMash, I'd strongly recommend going. I had a great time and would definitely go back in the future.
-
CodeMash 2020 - Live
An Informal Report on a Conference
2020-01-08 00:00
Live blogging from CodeMash 2020
Welcome to CodeMash
This is my first time attending CodeMash. I had some content about PASS SQL Summit (the only other big tech conference I've been to) when I attended back in 2016 but that all got "lost" when I overhauled my servers/blog/websites. I say "lost" but I still have a backup of all of that data somewhere. It's all compressed down into cold block storage in a backup of backups. It'd be an interesting project to try and do a restore of that version of my stuff. I don't know if I actually could remember how to get it all going again. If that's the case, what's the point in keeping the old backups? I suppose I could still get that data even if it's not on a functioning server. I could grab the text from those old posts and add them here or something. But I digress...
I'm really looking forward to all the sessions here. This is also going to be a new experience for me. I was the only person I knew at SQL Summit, whereas there are at least 30 Beamers here. It should be fun having people to go to talks and sit at meals with. Although, SQL Summit pushed me to do those things with people I didn't know and make the most of it. There's probably good and bad to both situations. I'm glad I'll be able to experience both of them.
-
What React and Kubernetes Teach Us About Resilient Code
A Similarity Among Widely Different Tech
2019-11-15 00:00
A brief intro to control theory and declarative programming
This post was initially published as part of the Beam Engineering Blog here and cross posted here on my blog.
Two Concepts
Here at Beam, we're on a quest to make our technology work for everyone. As part of this quest and as a need stemming from our hyper-growth, my development team is shifting our focus away from feature development toward platform technology and developer experience.
On the infrastructure side, we've been working on a CLI tool for our devs that will let them easily manage infrastructure from the command line. They can spin up entire AWS environments and deploy code from multiple repositories with a single command — no more waiting on other developers for testing and staging environments to be free, and no more inconsistency between production and testing environments. The quest for consistency led us to containerization, and our quest for easy infrastructure management led us to infrastructure as code. Our containers and infrastructure then lead us to a need for better orchestration of those containers. We needed tools that would make the often complex task of deploying, integrating, scaling, and managing services simple and routine — enter Kubernetes.
-
Development Estimates
A Different Take on a Contentious Practice
2018-10-01 00:00
How to get value from development estimates and why I've learned to love them.
Working as a programmer, I can't count the number of times that I've heard colleagues complaining about development estimates. Some of the complaints are simply grumblings of people who aren't generally cooperative. There's not much you can say to these people to change their minds. Other complaints are valid reasons that a lot of estimates aren't valuable or realistic. Here are 5 common mistakes that I see and what you can do to avoid them.
A Story
Let's start with an all too familiar story.
TechCo needs to develop a new product that will fit in with their offerings.
Jane the manager asks John the developer how long it will take to build the product and how much it will cost.
John says he'll think about it and get back to Jane. The next week during their weekly developers' meeting, John gives Jane an estimate that he thinks is reasonable.
Jane gives John's info to upper management who make a decision to go ahead with the project.
Months later when the project is about to meet its deadline, John, Jane, and upper management realize it's not going to be done on time and start trying to figure out what happened. Upper management puts pressure on Jane to make John finish on time. Jane pushes John hard to finish on time. John ends up finishing on time after putting in an 80 hour week. John is burnt out, Jane is glad to have upper management off her back, and upper management are happy the product went out on time.
-
Piping Code With GitLab CI
A Simple Way to Make Your Life Easier
2018-09-01 00:00
I finally got around to adding continuous integration pipelines to my personal projects.
What is Continuous Integration?
At its most basic, continuous integration (CI) is the practice of frequently merging developers' code changes into a mainline code repository. In recent years, the concept of continuous integration has taken on a life of its own and been expanded to include other aspects of development. For instance, almost anyone referring to continuous integration is under the assumption that the frequent merging will be automated. There have also been expansions of the idea such as continuous deployment (CD) where the code is not only automatically merged into mainline branches, but also built, tested, and deployed. By automating all of these simple repetitive tasks, developers can stop spending time on manual integrations and deployment processes and spend more time coding.
GitLab CI
For various reasons that are far outside the scope of this post, I host my personal code on an on-premises GitLab server. GitLab has hundreds of amazing features to take advantage and one of the nicest of them all is their CI/CD pipelines. GitLab has all of the automation and task running capabilities of other separate solutions built in.
-
Cloud Native Computing
A New Way to Build
2018-08-01 00:00
First Salesforce revolutionized IT with SaaS, then other service platforms extended those ideas for the full stack. Cloud Native Development is here to stay.
Eons ago, people developed enterprise software as standalone packages that were delivered to companies who then painstakingly installed and updated them. Often installation or upgrade projects could take over a year to complete. The software ran on servers that cost hundreds of thousands of dollars and were physically located at the company's headquarters. To the younger readers, I know this is sounding like some sort of nightmarish hellscape, but I promise that it really happened.
Software as a Service
In 1999 at the beginning of recorded history, a man named Marc Benioff founded a company called Salesforce that saw a better way forward. The goal was to provide a better experience and value to their consumers — enter the software as a service model (SaaS). SaaS aimed to improve on enterprise software delivery in a few key areas.
First, it decided on a subscription pricing structure so that customers were only paying for the features they were using. It also lowered the barrier to adoption and let users land on a platform for lower cost. The idea was that after the users landed, the quality of the product and the variety of features would incentivize them to increase their usage and feature adoption on a higher subscription tier.
-
Architecting a More Modern System
A Look at Microservices
2018-07-01 00:00
Making the move from one monolithic service to many microservices can be a complicated process. Here are some reasons why we decided to make the move anyway.
We have a need for external businesses to be able to embed parts of our apps into their front ends, connect with our APIs, and not bother the third parties with implementation or data handling details. We also don't want to have to maintain too many different solutions and technologies, so if possible the solution should overlap with our own internal needs.
The Solution
Microservice architecture to the rescue, but what really does that mean besides being a marketing buzzword? I'm going to cover three core ideas of microservices: decoupling, distribution, and technology agnosticism.
Decoupling
The obvious result of turning one application or service into many is that the resulting services are less tightly tied together. For people who aren't developers, it might not be obvious why services that are less reliant on each other might be better than the alternative.
As in all things, programmers deal with side effects of their actions, or more precisely, the actions of their code. Without getting into too many details, programming side effects can be nasty. There are a whole host of frameworks, technologies, and design patterns that are specifically built to avoid unwanted side effects. Microservice architecture isn't built with that sole goal in mind but it does help us mitigate side effects by requiring our service to have well-defined interfaces for interacting with other services. Basically, when turning one application into many that act as one, we need to take the time to define how they talk to each other including any security and permissions that exist as part of those interactions. We now have a single point of failure for these interactions. It also means that one service can't accidentally do something with another service that it's not supposed to. It's much easier to test our services' internal logic, test their interactions with other services, and even test adding new external services before they even exist. Decoupling leads to more secure, predictable, testable, and fault-tolerant systems.
-
First Reactions to React
A Review of Building My First React App
2018-06-01 00:00
We're moving our corporate site in house and I thought it would be the perfect time to try out a new javascript framework.
There are plenty of good javascript frameworks out there right now; among the most popular are Vue.js, Angular, and React. (Yes, I'm aware that React is a library not a framework, but for the sake of this article, I'm going to set that aside.) There's also a ton of posts and articles that can help you understand the differences between them if you're not familiar. Breaking down all the reasons we chose React over the other two would be a whole post in itself. Maybe I'll write something comparing the frameworks and our opinions on their features in the future. For now, it's enough to say that we took a hard look at all three of these and we felt that React was the best choice for our specific situation.
Diving In
We're using webpack for build tooling, a React front-end, and a C# .NET Core API backend. Getting started was the most challenging part of the whole process with the majority of the issues coming from the webpack configuration. I only ever used gulp before and we wanted to switch to webpack so that we could more easily bundle and ship specific components to third-party API consumers. I'm sure that someone more experienced with webpack could have gotten up and running in much less time than it took me, but it's always nice to have the opportunity to learn a new tool. Besides my personal inexperience, there were some versioning issues between the .NET world and the NPM world that we needed to resolve. We also added to our own headaches by using a slightly wonky legacy environment setup (that's hopefully going away shortly) and by having some external requirements from businesses we partner with. With all of the preliminaries out of the way, we could finally get coding.
-
Lightning Talks
A Great Way to Teach and Learn
2018-05-15 00:00
Lightning talks are a great way to share knowledge in your organization. Here's how to get started and get everyone to love them.
A Lightning Talk is a short 5-10 minute presentation on any topic followed by about 5 minutes of open Q&A. A common format for a lightning talk is 6 minutes for presenting and 4 minutes for Q&A. The goal of a lightning talk is always to share knowledge, but can also be to convince people of the benefits of something or to take a particular action. Basically, lightning talks are lightning-fast knowledge sharing.
What's the Benefit?
Ok, so we know what a lightning talk is, but what's the point of doing them? There are plenty of obvious benefits and some that aren't so obvious. The important thing is that everyone who participates, from the speaker to the audience to the organization all benefit. It's an all-around win-win situation.
Share Knowledge
The IT industry is a knowledge industry and the vast majority of us who work in IT are knowledge workers. It's our job to gain, handle, and use information and it's impossible to be an effective knowledge worker without the ability to share that knowledge with others. We all gain insights and learn new things on a regular basis as we work on our projects. It's important that the knowledge gained is passed on to everyone even if they're working on a different part of the project or team.
-
Shades of Self
A Look at Who We Are
2018-05-01 00:00
A rambling, philosophical look at how we exist as distinctly separate individuals in different situations.
I was in an unusual debate at work the other day. I took a stance that was odd for me which led to some introspection. Why did I debate for a position that I wouldn't typically support? I felt that I was disingenuous or dishonest towards my co-workers, but is that true? Is it possible for me to maintain different perspectives on the same subject depending on the context of the debate? If so, can I do that without being self-serving or hypocritical?
I believe that it's not only possible to maintain these different levels of self without being unethical, but also that most people probably do it every day without even realizing it. I've identified five different levels of my self that I express based on where I am, what I'm doing, and who I'm with. In my head, I picture these as a pyramid where the topmost level is the most restricted, manicured, public version of ourselves and the bottom is the most personal, intimate version.
Professional Public
We start at the top of the pyramid with our most carefully crafted public identities. This is the persona that we show during an interview or formal meeting. I like to call it the Professional Public self. It's the level that we feel most comfortable with the world seeing. It's where we put the information that we want people to see and know about us: our professional accomplishments and things we're proud of.
-
Cleaning Out the Skeletons
An Effort to Put My Best Foot Forward
2016-12-01 00:00
Growing up at the start of social media has its downsides. Today I talk about cleaning up my online presence.
Cultivating a professional online presence is something that I've been casually working towards this year. In fact, I mentioned in a previous post that one of the main reasons that I started this blog was to further that goal.
In my mind, there are two important steps along the way to building something I'm proud of: cleaning out low-quality content from the past and adding new high-quality content going forward.
Out With the Old
Now begins the painstaking task of combing through every old post, tweet, status update, etc. that I've ever posted. If you've ever been a teenager, you probably know the kind of things that I'm sweeping under the rug here: teen angst, vaguely subtextual nonsense, humble brags, and any of the other cardinal sins of social media.
I've never publicly acknowledged it before, but for a while in college, I was lost. I didn't know what I wanted with my life, I wasn't happy with myself or the things I was doing. I felt depressed and anxious every day. I put a lot of my worth in other people. Many of my core values and perceptions of the world were changing for the better and I was experiencing growing pains. As you can imagine, I posted some things that I'm not proud of. I also posted a lot of things that bring back painful memories as I look back on them today.
-
My Brand New Blog
An Exercise in Futility?
2016-10-28 00:00
Maybe it's the infinite hubris of a millennial or maybe its just that I doubt anyone will actually read this, but I found a few reasons to convince myself to do it anyway.
I thought about that question a lot before building this. Most blogs are out of date, under-maintained, new year's resolution-esque things that wither and die after a few entries. Why create something that has a high likelihood of being abandoned? Beyond that, how could I possibly think that anything I have to say is worth writing about? Maybe it's the infinite hubris of a millennial or maybe its just that I doubt anyone will actually read this, but I found a few reasons to convince myself to do it anyway.
I'm Already Writing Anyway
I've been in the habit of keeping a journal for a long time. I keep it for a lot of reasons: it helps me think aloud, it helps me recap my days, weeks, months, years, it teaches me about myself, it gives me perspective on why things did or didn't break my way. However, a journal, at least how I write mine, doesn't work well for giving a single topic more attention. I still write about topics that interest me, but diving in and exploring those topics fully isn't something that fits in a medium whose primary purpose is to record and reflect. A blog, on the other hand, is the perfect medium to write in-depth on a single topic. A blog also gives me the flexibility to write about any topic that's currently interesting me.
-
Tech — Work — Ramblings
2016-10-27 00:00
#structure #microblog #tech #ramblings #work #blog
This page serves as a simple index of all my blog posts. This list should be roughly equivalent to searching for the #blog tag.
If you're looking for my shorter #microblog posts, see 202208270000 Microblog.
- 202208010000 Making a Rust Roguelike
- 202206171206 Delivery Performance vs Value Delivery
- 202205150000 Learning Rust
- 202205010000 Making a Fitbit Sense Watch Face
- 202109150000 Idea Gardening
- 202109010000 Prototype Expand Consolidate
- 202108010000 Designing for Big Screens
- 202107150000 Working in Public
- 202107010000 Unifying My Domain
- 202106010000 Rewrites Are (Almost) Never the Answer
- 202105010000 The Silent Majority of Engineering
- 202009010000 The Only Correct Way to Organize Code
- 202007010000 2019 Work Reads
- 202006150000 Gestalt Principles of Design
- 202006010000 Revamping My Blog
- 202004010000 CodeMash 2020 - Review
- 202001080000 CodeMash 2020 - Live
- 201911150000 What React and Kubernetes Teach Us About Resilient Code
- 201810010000 Development Estimates
- 201809010000 Piping Code With GitLab CI
- 201808010000 Cloud Native Computing
- 201807010000 Architecting a More Modern System