TechWorkRamblings

by Mike Kalvas

Results: 180

  • Liskov substitution

    2022-04-29 15:13

    #new #wip

    #wip #new

    content


    references

  • Interface segregation

    2022-04-29 15:14

    #wip #new

    content


    references

  • Dependency inversion

    2022-04-29 15:15

    #wip #new

    content


    references

  • Write less code

    2022-04-27 23:26

    #wip #new

    content


  • Optimize for change

    2022-05-03 14:49

    #wip #new

    content


    references

  • Modules should be highly cohesive

    2022-04-27 23:08

    #wip #new

    content


    references

  • Modules should be loosely coupled

    2022-04-27 23:09

    #wip #new

    content


    references

  • Monorepos make all the wrong trade offs

    2022-04-27 22:39

    #new #wip

    content


    references

  • Open-closed

    2022-04-27 22:42

    #new #wip

    The open/closed principle of the SOLID framework for software development.


    references

  • The philosophy of water

    2023-04-21 20:16

    #wip #new

    Water is life. Connection to humanity through water and rain. The smell of the earth after a warm rain.


  • 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:

    1. When you don't have any existing notes that relate to the topic, write a new note.
    2. When your note is considerably different than existing notes on the general topic, write a new note and be sure to link correctly.
    3. When your note matches existing notes, modify them. Note that this use of "modify" includes re-structuring, creating, deleting, updating, linking, or anything else.

    when-to-start-a-new-zettel.png

  • Single responsibility

    2022-04-29 15:12

    #wip #new

    There should never be more than one reason for a class to change.1


    1. Wikipedia contributors. (2022). SOLID. In Wikipedia. https://en.wikipedia.org/w/index.php?title=SOLID&oldid=1069309351

  • Normalization of deviance

    2022-09-18 20:13

    #new #wip

    • 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

    https://danluu.com/wat/

  • Use a simple heuristic to guide gradual adoption

    2023-04-05 10:01

    #wip #new

    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

  • Write a failing test for bugs

    2023-12-09 15:34

    #new

    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


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 91). Addison-Wesley.

  • Rescuing a failing project

    2023-10-30 11:05

    #wip #new

    Cure the lack of momentum and feedback.

    1. Add some (very few for now) tests even if they verifies a bug continues to be a bug.
    2. Set up CI/CD that tests and pushes always.
    3. Continue to add tests
    4. If it hurts, do it more and automate it more.

    Crafting Code Podcast Ep. 2

  • Your language limits your world

    2023-12-09 15:20

    #new

    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


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 59). Addison-Wesley.

  • Start at square one when debugging

    2023-12-09 15:31

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 89). Addison-Wesley.

  • 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


    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

  • Senior engineer

    2022-06-11 22:36

    #structure #new #wip

    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


  • There are no final architectures

    2023-12-09 15:09

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 48). Addison-Wesley.

  • Digital streams vs gardens

    2022-05-02 17:01

    #new #wip

    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).


  • Broken window theory

    2023-08-28 23:41

    #new

    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.


    1. Kelling, G. L., & Wilson, J. Q. (1982, March 1). Broken Windows. The Atlantic. https://www.theatlantic.com/magazine/archive/1982/03/broken-windows/304465/

  • The Software Craftsman

    2023-12-09 13:23

    #source #wip #new #structure

    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


  • The Last Lecture

    2022-05-19 13:14

    #wip #new

    • 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

  • Physical systems cannot grow infinitely

    2024-02-24 15:45

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 103, 59). Chelsea Green Pub. 2

  • Beauty will save the world

    2022-08-22 16:35

    #wip #new

    Beauty will save the world.1


    1. Dostoyevsky, F., McDuff, D., & Todd, W. M. (2004). The idiot. Penguin Books. (Original work published 1868)

  • All systems thinking is a simplification

    2024-01-29 15:54

    #wip #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 18). Chelsea Green Pub.

  • Important trade-offs have u-curve optimizations

    2023-09-02 16:20

    #new

    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


    1. Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 35). Celeritas Publishing.

  • Know what's good enough

    2023-12-09 14:13

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 11-12). Addison-Wesley.

  • Systems thinking benefits all thought

    2024-01-29 14:41

    #new #wip

    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

    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 6–7). Chelsea Green Pub.

  • Limiting factor

    2024-02-25 11:59

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 101). Chelsea Green Pub. 2

  • MVPs should be vertical slices

    2023-12-09 15:17

    #new

    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


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 50-55). Addison-Wesley.

  • The principle of shifting dominance

    2024-02-17 15:12

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 44). Chelsea Green Pub.

  • Problem-generating systems have to be restructured to be fixed

    2024-02-25 14:30

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 111–112). Chelsea Green Pub.

  • A renewable stock constrained by another renewable stock

    2024-02-24 15:50

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 60). Chelsea Green Pub.

  • Resilient systems

    2024-02-20 12:02

    #wip #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 76–78). Chelsea Green Pub.

  • Delays are ubiquitous

    2024-02-25 12:24

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 10. Chelsea Green Pub.

  • Have a single source of truth for invariants

    2023-12-09 14:34

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 31). Addison-Wesley.

  • The tragedy of the commons

    2024-02-25 14:49

    #wip #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 116–121). Chelsea Green Pub.

  • The Myth of Sisyphus

    2024-06-13 17:15

    #source #new #wip #structure

    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


    1. 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.

  • Be the exemplar of change

    2023-12-09 14:00

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 9). Addison-Wesley.

  • Feedback can only affect future behavior

    2024-02-17 14:55

    #new #wip

    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)


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 39). Chelsea Green Pub.

  • A stock with one reinforcing loop and one balancing loop

    2024-02-17 15:07

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 42). Chelsea Green Pub.

  • Quantify your cost of delay

    2023-09-01 13:33

    #new #wip #thread

    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)


    1. Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 31). Celeritas Publishing. 2

  • Reality is often nonlinear

    2024-02-24 18:21

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 91–93). Chelsea Green Pub.

  • Eliminate effects between unrelated things

    2023-12-09 14:40

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 39). Addison-Wesley.

  • You don’t do Agile

    2023-12-16 13:43

    #new

    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.


    1. Mancuso, S. (2015). The software craftsman: Professionalism, pragmatism, pride (pp. 11). Prentice Hall.

  • The purpose of the parts may not be the purpose of the whole

    2024-01-29 14:58

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 16). Chelsea Green Pub.

  • Boundaries don't exist in the real world

    2024-02-24 18:23

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 95–99). Chelsea Green Pub. 2

  • One stock with delays

    2024-02-24 15:30

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 51–58). Chelsea Green Pub.

  • Stability and resilience are not the same thing

    2024-02-24 16:58

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 76–78). Chelsea Green Pub.

  • There is no such thing as sacred code

    2023-12-09 15:11

    #new

    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.


  • One stock with two competing balancing loops

    2024-02-17 14:39

    #new

    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
    

    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 36). Chelsea Green Pub.

  • Definition of system

    2024-01-29 14:25

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 2–3). Chelsea Green Pub. 2

  • Rely on what you control

    2023-12-09 14:45

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 42). Addison-Wesley.

  • Encapsulate at the boundary

    2023-12-09 14:49

    #new

    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


  • Define metric to value transfer functions using sensitivity analysis

    2023-09-01 13:27

    #new

    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


    1. Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 30). Celeritas Publishing.

  • Reality has bounded rationality

    2024-02-25 12:32

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 105–106). Chelsea Green Pub.

  • Self-organizing systems

    2024-02-20 12:03

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 79). Chelsea Green Pub. 2

  • A renewable stock constrained by a non-renewable stock

    2024-02-24 15:36

    #new

    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


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 60). Chelsea Green Pub.

  • Migrations are the only solution to tech debt

    2022-05-11 13:10

    #wip #new

    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?


    1. Larson, W. (2018, April 15). Migrations: The sole scalable fix to tech debt. https://lethain.com/migrations/

  • Get good with your tools

    2023-12-09 15:26

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 73, 81). Addison-Wesley.

  • Be a jack of all trades

    2023-08-27 10:55

    #new #thread

    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


    1. Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range

  • Stop starting, start finishing

    2023-10-24 15:10

    #thread #new

    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


    1. Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range

  • The primary goal in product development is to make good economic decisions

    2023-09-01 13:12

    #new

    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?


    1. Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 28). Celeritas Publishing.

  • Be a realistic critical thinker

    2023-08-27 10:47

    #new

    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


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xxi). Addison-Wesley.

  • Ask questions to assess the validity of a model

    2024-02-17 15:20

    #wip #new

    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?

    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 45–47). Chelsea Green Pub.

  • Resilient, self-organizing systems will generate hierarchies

    2024-02-20 12:04

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 83–85). Chelsea Green Pub.

  • Think horses, not zebras

    2023-12-10 18:39

    #thread #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 95). Addison-Wesley.

  • Hierarchies enable iterative progress

    2024-02-24 17:22

    #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp.82–83). Chelsea Green Pub.

  • 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."

    Continue reading

  • We need more information for complex decision making

    2023-09-01 13:22

    #new

    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


    1. Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 29). Celeritas Publishing.

  • Software Craftsmanship

    2023-12-16 14:42

    #thread #new

    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.

    Continue reading

  • Measure output instead of activity

    2023-09-01 13:42

    #new

    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.


  • Make reversible decisions quickly

    2023-12-09 15:03

    #new

    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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 48). Addison-Wesley.

  • Everything we think we know about reality is a model

    2024-02-20 15:26

    #thread #new

    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.


    1. Meadows, D. H., & Wright, D. (2011). Thinking in systems: A primer (Nachdr.) (pp. 87). Chelsea Green Pub.

  • Limiting factors can change

    2024-02-25 12:02

    #wip #new

    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.


  • Hofstadter's Law

    2024-02-25 12:13

    #thread #new

    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


    1. Hofstadter, D. R. (20). Gödel, Escher, Bach: An eternal golden braid (20th-anniversary ed.) (pp. 152). Basic Books.

  • Policy-resistant systems

    2024-02-25 14:34

    #new

    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.

    Continue reading

  • The Silent Majority of Engineering

    A Bit of Perspective

    2021-05-01 00:00

    #ramblings #tech #blog #work

    Most engineers aren't using all the <mark>new</mark> 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.

  • Sturgeon's Law

    2023-12-20 14:32

    #new

    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.

    Continue reading

  • 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.

    1. Find a source of information
    2. Create a #source note with solid citations (managed in Zotero) for taking notes while consuming the source.
    3. 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.

    Continue reading

  • 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

    #source #wip #new

    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.

    Continue reading

  • Revamping My Blog

    A <mark>New</mark> Coat of Paint

    2020-06-01 00:00

    #blog #tech

    You may have noticed that the blog got a <mark>new</mark> 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.

    Fat marker sketches of new blog page designs

    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

    1. 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.
    2. 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.
    3. 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.

    Continue reading

  • My Brand New Blog

    An Exercise in Futility?

    2016-10-28 00:00

    #ramblings #blog

    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.

    Continue reading

  • Freedom and Responsibility

    2024-07-01 09:52

    #wip #new

    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.

    Continue reading

  • Types, and why you should care

    2022-06-28 14:49

    #wip #new #source

    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

    Continue reading

  • Curriculum design for software engineering

    2022-06-28 20:18

    #wip #new #source #thread

    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

    1. 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
    1. Elective courses
    • Not equitable. Hugely biased (currently) to white and asian males, failures and achievement gap #thread lead to further disparity.

    Continue reading

  • 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.

    Continue reading

  • The Pragmatic Programmer

    2023-07-24 10:42

    #wip #structure #new #source

    Book Website

    Intro

    Chapter 1

    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)

    Continue reading

  • Category Theory in Life

    2022-07-18 19:46

    #new #source #wip

    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

    Continue reading

  • Cloud Native Computing

    A <mark>New</mark> Way to Build

    2018-08-01 00:00

    #blog #tech

    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.

    Continue reading

  • Prototype, Expand, Consolidate

    2021-08-26 13:02

    #thread

    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.

    Continue reading

  • 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.

    Continue reading

  • Prototype Expand Consolidate

    A Method for Building Maintainable Systems

    2021-09-01 00:00

    #tech #blog #work

    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.

    Continue reading

  • 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.

    Continue reading

  • Cleaning Out the Skeletons

    An Effort to Put My Best Foot Forward

    2016-12-01 00:00

    #blog #ramblings

    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.

    Continue reading

  • 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.

    Continue reading

  • 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.


    1. 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

    2. Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range

  • Knowledge should accumulate

    2021-09-06 08:36

    #thread

    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.

    Continue reading

  • 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:

    1. If you're told to do something by your boss, it becomes important even if it's not a big deal.
    2. 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.


    1. 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

    2. 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

  • First Reactions to React

    A Review of Building My First React App

    2018-06-01 00:00

    #blog #work #tech

    We're moving our corporate site in house and I thought it would be the perfect time to try out a <mark>new</mark> 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.

    Continue reading

  • 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.

    Continue reading

  • 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.


    1. VanderMeer, Jeff. Annihilation. First Edition. Southern Reach Trilogy 1. (pp. 6). New York: Farrar, Straus and Giroux, 2014.

  • 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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. xx). Addison-Wesley.

  • 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.


    1. Grant, A. & TED. (2016, April 26). The surprising habits of original thinkers. https://www.youtube.com/watch?v=fxbCHn6gE3U

  • 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.
    

    1


    1. Larkin, P. (2003). Collected poems (A. Thwaite, Ed.; [New ed.], 2. pr). Marvell Press.

  • 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)
    
  • Combination of knowledge

    2021-10-23 14:50

    #thread

    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.


    1. Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b

  • Rewrites Are (Almost) Never the Answer

    A Difference Between Desire and Reality

    2021-06-01 00:00

    #blog #work

    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:

    Continue reading

  • Bloom's taxonomy of actions

    2021-10-26 09:25

    #thread

    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.

    Continue reading

  • 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.


    1. Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b

  • Unifying My Domain

    A Question of Scope

    2021-07-01 00:00

    #work #blog #tech

    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.

    Continue reading

  • 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.


    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

  • Friedrich Nietzsche

    2022-06-09 08:53

    #wip

    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.

    Continue reading

  • Value reciprocity in the insurance industry

    2022-04-05 10:48

    #thread

    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.

    Continue reading

  • 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.


  • Stir Trek 2024

    2024-04-30 10:34

    #structure #source

    stir-trek-2024-schedule.pdf

    Selected Sessions

    time room rank speaker track session
    08:45 could not attend

    Continue reading

  • 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.


    1. Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 255). Addison-Wesley.

    2. 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

  • 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.


    1. Dourado, E. (2020, December 31). Notes on technology in the 2020s. Eli Dourado. https://elidourado.com/blog/notes-on-technology-2020s/ 2

  • 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.

    Continue reading

  • 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.


    1. Heterarchy. (2021). In Wikipedia. https://en.wikipedia.org/wiki/Heterarchy

  • 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.


  • 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.

  • 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.


  • 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.


    1. 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/

  • Minimum Viable Replacement

    2024-05-03 14:00

    #source

    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

    mvp-vs-mvr.jpeg

    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

    Continue reading

  • 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.


    1. 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

  • 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!


    1. 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

  • 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

    Continue reading

  • 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?


  • 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.


    1. Zalewski, M. (2018, February 24). Getting product security engineering right. Lcamtuf’s Blog. https://lcamtuf.blogspot.com/2018/02/getting-product-security-engineering.html

  • 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.

    Continue reading

  • 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)


    1. 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

  • 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.

  • Lightning Talks

    A Great Way to Teach and Learn

    2018-05-15 00:00

    #blog #tech

    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.

    Continue reading

  • My bucket list

    2021-12-22 19:53

    #structure

    • 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

    Continue reading

  • 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.

    Continue reading

  • RGM development

    2022-06-05 16:39

    #thread

    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.

    Continue reading

  • 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

    Continue reading

  • 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.

    Continue reading

  • 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.

    Continue reading

  • Designing for Big Screens

    An Experiment in Adding More

    2021-08-01 00:00

    #tech #blog

    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.

    Continue reading

  • 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."

    Continue reading

  • 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:

    1. Continue down the tech leadership path
    2. Blaze an entrepreneurial trail of my own
    3. Research and create something completely new
    4. 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.

    Continue reading

  • Architecting a More Modern System

    A Look at Microservices

    2018-07-01 00:00

    #blog #work #tech

    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.

    Continue reading

  • Zen in the face of programming

    2022-06-11 21:25

    #structure

    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.

    Continue reading

  • The solitude of leadership

    2021-12-20 13:17

    #structure #source #thread

    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.

    Continue reading

  • Zero to engineer

    2022-08-10 19:44

    #structure #wip

    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?

    1. Get past the résumé screen
    2. Get past the recruiter screen
    3. Get past the coding exercise
    4. 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.

    1. Getting past the coding exercise — is the basis for 2 and 3, so it must be solid and come first.
    2. Getting past the résumé screening — requires things like example projects and raw time spent coding.
    3. 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.
    4. 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.

    Continue reading

  • 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]

    Continue reading

  • Play long term-games

    2021-09-25 11:40

    #thread

    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.

    Continue reading

  • Write code that's easy to delete, not extend

    2022-04-26 21:14

    #structure

    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).

    Continue reading

  • 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)
    
  • System design

    2022-08-13 13:27

    #source #wip #structure

    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?

    Continue reading

  • Development Estimates

    A Different Take on a Contentious Practice

    2018-10-01 00:00

    #work #blog

    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.

    Continue reading

  • The Only Correct Way to Organize Code

    A Joking Rant About Keeping Code Neat

    2020-09-01 00:00

    #1 #blog #2 #3 #4 #tech

    Why we need a system for code organization and what that system should look like.

    Top Gun buzz the tower gif

    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 you ComponentName.jsx 👀 .

    Second, code organization. The only correct answer is folder-by-feature as opposed to folder-by-random-devs-logic or folder-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.

    Continue reading

  • 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.

    Continue reading

  • Data-last pipe design

    2021-07-27 23:06

    #thread

    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 = [1, 2, 3];
    (* numbers is the "data" and the last parameter *)
    let listTwo = List.map(a => a + 1, numbers);
    

    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 = List.map(a => a + 1);
    let listA = [1, 2, 3];
    let listB = addOneToList(listA);
    

    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.

    Continue reading

  • Do your own thinking

    2021-09-06 08:16

    #thread

    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]

    Continue reading

  • 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]

    Continue reading

  • Learning Rust

    A Quick Lesson in Ownership

    2022-05-15 00:00

    #tech #blog

    I'm learning rust

    Ferris the Rustacean crab mascot of 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 whole cargo 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 a rust-project.json file, but I didn't want to get sidetracked before even getting started.

    Continue reading

  • Knowledge is constructed

    2021-09-06 08:35

    #structure #thread

    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).

    Continue reading

  • The Art of using a Zettelkasten

    2021-07-27 22:42

    #structure

    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

    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).

    Continue reading

  • Computer Science

    2022-06-19 13:00

    #structure #thread

    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

    Programming language design

    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++)

    Continue reading

  • Remote team management

    2021-10-22 08:45

    #structure #source

    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.

    Continue reading

  • 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.

    Continue reading

  • What React and Kubernetes Teach Us About Resilient Code

    A Similarity Among Widely Different Tech

    2019-11-15 00:00

    #blog #tech

    A brief intro to control theory and declarative programming

    React is basically Kubernetes

    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.

    Continue reading

  • Software Engineering

    2021-09-06 13:38

    #thread #structure

    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

    Abstraction

    Measurement

    Continue reading

  • Gestalt Principles of Design

    A Crash Course on the Whole

    2020-06-15 00:00

    #work #blog #ramblings

    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.

    Visual representation of Gestalt principles using a stylized version of the literal word Gestalt

    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,

    Continue reading

  • 2019 Work Reads

    A Slew of Short Book Reviews

    2020-07-01 00:00

    #blog #work #ramblings

    My professional reads from last year, rated and reviewed.

    Curved library bookshelf wall

    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

    A Handbook of Agile Software Craftsmanship

    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.

    Continue reading

  • CodeMash 2020 - Live

    An Informal Report on a Conference

    2020-01-08 00:00

    #work #blog #tech

    Live blogging from CodeMash 2020

    CodeMash graphic, welcome to the roaring twenties

    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.

    Continue reading