TechWorkRamblings

by Mike Kalvas

Results: 82

  • Homoiconic programming languages

    2022-06-12 13:09

    A language is homoiconic if a program written in it can be manipulated as data using the language, and thus the program's internal representation can be inferred just by reading the program itself. This property is often summarized by saying that the language treats "code as data".[^wikipedia2022homoiconicity]

    One of the most commonly cited homoiconic languages is Lisp. Clojure (a modern dialect of Lisp) and Julia are also homoiconic.

    Example

    The following Lisp S-expression creates a list of 3 elements with values 1, 2, and 3, and is precisely equivalent to the code required to create the object itself.

    (1 2 3) ; => (1 2 3)

    More broadly, all Lisp programs are lists (a.k.a. objects which can be manipulated with the Lisp language). Slightly more concretely, the string representation of a Lisp program is valid Lisp data. Passing a hard coded value or passing a Lisp program as input to a Lisp function would behave identically.

    An example of non-homoiconicity in JavaScript:

    const arr = [1, 2, 3];
    arr.toString(); // => '1,2,3'

    Here, the string representation (even if we print it more nicely as [1, 2, 3]) is not the same as the code required to create the object (for instance, the variable declaration part). This is a simple example that might fall down on a deeper level, but gets the idea across.

    Continue reading

  • Advent of Code 2024 Day 04

    Ceres Search

    2024-12-04 00:00

    #project #blog

    Today were visiting the Ceres monitoring station from 2019 day 10 and helping the station chief solve her word searches.

  • Approximations compose poorly

    2021-10-11 11:06

    Approximations do not hold up to composition with other approximations. The error of approximation is magnified when we combine them so that the total error becomes egregiously large.

    Here's a simple example with basic math

    2.00 ~= 1.99
    
    2.00 ^ 2 = 4.00
    1.99 ^ 2 = 3.96
    
    2.00 ^ 3 = 8.00
    1.99 ^ 3 = 7.88

    You can see how the error is growing much larger after combining multiple approximate values.

    In programming, this can be devious. We're not always sure where approximations will come in to play (including things like floating point precision problems).

    In systems design, it's important to understand how approximations contribute to the stability and instability of a system. 202207271958 Stability or instability dominates a system and approximations can magnify this effect.

    Haskell offers a unique way around this problem with its laziness characteristic. Since things are evaluated lazily, we can specify a representation of infinite precision for our approximations and the precision we need at the end and Haskell will evaluate all our approximations to the necessary precision to get a correct precision in the outcome.1


    1. Jelvis, T. (2015, June 17). Thinking with Laziness. Begriffs. https://begriffs.com/posts/2015-06-17-thinking-with-laziness.html

  • Advent of Code 2024 Day 03

    Mull It Over

    2024-12-03 00:00

    #project #blog

    Today we're visiting the toboggan rental shop from 2020 day 2 and need to help the elves with corrupted data in their computers.

  • Seven habits of highly effective people

    2021-06-22 17:13

    #source #structure

    The seven habits of highly effective people are described in the eponymous book by Stephen R. Covey.[^covey2004] Covey discusses how people can see the same things and have different perspectives. He also discusses how maturity is a continuum that can be describes as moving from dependence to independence to interdependence.

    An observation: 202109251019 Highly effective people are leaders.

    Circles of Influence

    1. 202109121518 Circle of control
    2. 202109121516 Circle of influence
    3. 202109121517 Circle of concern

    Maturity Continuum

    1. 202109121550 Maturity of dependence
    2. 202109121536 Maturity of independence
    3. 202109121530 Maturity of interdependence

    The Seven Habits

    Habits for building independence

    1. 202106241529 Be proactive
    2. 202106221744 Begin with the end in mind
    3. 202106241528 First things first (Covey uses the 202106241531 Eisenhower matrix of task value as an example of how to define what should be put first)

    Habits for interdependence

    1. 202106241527 Think win-win
    2. 202106241526 Seek first to understand, then to be understood
    3. 202106241525 Synergize

    Habits for continual improvement

    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

  • 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

  • Advent of Code 2024 Day 09

    Disk Fragmenter

    2024-12-09 00:00

    #blog #project

    Today we're back under the sea with our amphipod friends from 2021 day 23 and need to help one of them defragment their hard drive.

  • Block model for maximum capacity

    2021-08-03 13:51

    The block model for maximum working capacity is as follows:1[^auzenne2014floor2]

    1. There are small blocks and large blocks that represent tasks, projects, or any responsibility a person has to manage or work on.
    2. Small blocks take up 1 unit of capacity
    3. Large blocks take up 5 units of capacity.
    4. Each person in an organization has a box of maximum capacity equal to 15 regardless of how it's split up. A person could have 15 small blocks or 3 large ones or something in between.
    5. There are no exceptions or ways to expand that capacity.
    6. There are only two options for units of work: do or delegate. Nothing can move around or leave the system in any other way. If you do the task, it's in your capacity box. If you delegate it, it travels down a level and is in that person's capacity box.

    This model is useful for describing a few phenomena such as how 202108031350 Delegating increases the significance of tasks and where we need to 202106241530 Delegate to the floor.


    Continue reading

    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

  • Invest discretionary time in top performers

    2021-10-18 12:05

    A 1% increase in their performance amounts to more output than a 1% increase in your bottom performers' outputs.1[^auzenne2011coaching1][^auzenne2011coaching2] By this logic, you should only invest your time in increasing the performance of your top performers.

    This does not mean that you shouldn't coach the others and give them feedback. It's a statement of what to do with any discretionary time you have as well as one about maximizing returns on investment in overall team performance. When 202110181158 Coaching underperformers, it's important to understand that there's a level where good enough is fine, but they will need to personally invest more into being a top performer before it makes sense for you to invest more time and effort with them.

    Another way of saying this is if 202104291524 Execution is the priority of team management, then the best way to increase execution is to focus on increasing the execution of top performers.


    Continue reading

    1. Kislik, L. (2020, December 2). Managing an Underperformer Who Thinks They’re Doing Great. Harvard Business Review. https://hbr.org/2020/12/managing-an-underperformer-who-thinks-theyre-doing-great

  • The Software Craftsman

    2023-12-09 13:23

    #new #source #wip #structure

    Chapter 2 - Agile

    Chapter 3 - Software Craftsmanship


  • Stir Trek 2024

    2024-04-30 10:34

    #structure #source

    Selected Sessions

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

    Continue reading

  • Two cool tools

    2024-11-19 22:41

    #microblog #link

    Julia Evans recently started a microblog section just like this one on my site for many of the same reasons I have one. She calls hers TIL and it has more of an emphasis on being a place to record the small pieces of (actually useful) info that she’d usually post to Twitter and eventually lose.

    Looking through the initial list that she has there, I found 2 cool tools to keep my own record of here:

    1. dmate for language agnostic db migrations and schema management.
    2. diffdiff for nice-looking, in-browser diffing of arbitrary text.

  • Advent of Code 2024 Day 11

    Plutonian Pebbles

    2024-12-11 00:00

    #project #blog #tech

    Today we're visiting the ancient civilization on Pluto from 2019 day 20 and find some interesting physics-defying stones.

  • Closing calls

    2021-09-07 20:35

    Offering a closing call will substantially improve your odds of hiring a candidate.1 Not many people will take you up on it, but those that do will be highly engaged in the process.

    How to do closing calls

    1. Offer the call.
    2. Show up prepared with their background and ready to articulate why you're at the company and why they should join.
    3. Ask what the candidate wants to talk about before you start talking.
    4. Tell them why the role addresses their concerns. If it truly doesn't, then it's better to learn that now.
    5. Clarify next steps and offer more time.

    Abbreviated Version

    1. Ask for their concerns.
    2. Answer by telling the best version of the truth.

    1. Larson, W. (2021, August 26). Closing calls: Tell the best version of the truth. Irrational Exuberance. https://lethain.com/closing-calls/

  • Architecture Decision Records

    2022-04-02 12:18

    An Architecture Decision Record (ADR) is a document that captures a decision, including the context of how the decision was made and the consequences of adopting the decision.[^blake2020]

    While the name implies that these would be used for mainly architecture level decisions, many people advocate for using them for nearly any decision, no matter how mundane.[^blake2020][^perkins2020] The purpose of recording as much as possible is to facilitate the 202110231449 Externalization of knowledge for software projects and product organizations. (202110231440 Knowledge is the backbone of a product organization)

    ADRs are beneficial because they enable persistence and transfer of knowledge. They’re a great example of the 202110231445 The SECI model of organizational knowledge in action. They take 202110231457 Tacit knowledge and transform it into 202110231459 Explicit knowledge

    ADRs can be used proactively to propose changes, or retroactively to record decisions that were already made.

    My experience with ADRs has been split across two levels of use.

    1. Organization-wide — Valuable to an extent, but can be used poorly to push things that shouldn’t be approved under the guise of seeking wide consensus. The important thing for these to work are having good, competent coworkers and/or to have people who are not afraid to actively dissent in a widely public forum. They can be an invitation for people to engage in costly bike-shedding or an indispensable log of the collective mind of a group. Which side of this your group falls on is hard to tell and requires some radical candor to identify.

    Continue reading

  • Advent of Code 2024 Day 01

    Historian Hysteria

    2024-12-01 00:00

    #blog #project

    This year finds us helping elf historians track down their chief historian who has gone missing and needs to be back for the sleigh launch on Christmas. Today we're comparing lists of numbers for historians.

  • 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

  • Creative accomplishments happen over time

    2022-11-03 09:58

    We need to allow our ideas to germinate (which requires time) in order to come to fundamental, novel understanding of interesting problems.

    History shows that the typical pattern of creativity is as follows:[^hamming2020]

    1. There is at least some dim recognition of a problem.
    2. A short or long period of problem refinement. This stage is important because it's likely that our experience will phrase the problem in a conventional way leading only to mediocre or conventional solutions. We must give ourselves time to fully understand the problem for what it is outside of our pre-conceptions. We might even abandon the problem for some time (allowing our subconscious to work on it 202109090947 Idea gardening). However, we must be emotionally involved and want to find a fundamental, novel solution.
    3. The moment of insight or creativity. This may only be an attempt and might not work but it leads back into step 2. There are also times when we can change the problem itself to fit the solution or perhaps ask ourselves "If I had a solution, what would it look like?"
    4. Often there is still much work to be done cleaning and refining even the closest, most correct solutions once the problem has been "solved".

    Continue reading

  • Data-first pipe design

    2021-07-27 23:07

    Contrasts with 202107272306 Data-last pipe design.

    Background

    With data-last being the standard convention of most functional languages, why would we want to adopt a different data-first approach? The motivation comes from type inferences and compilers.

    In OCaml, type inference works from left to right, top to bottom.[^chavarri2019] If we start a list with one type, then adding another item after the first will give us a type error.

    let ints = [1, 'a']
                   ^^^
    Error: This expression has type string
           but an expression was expected of type int

    It’s easy to see that this will come into play with a data-last approach. The data object has the type that matters to us as programmers who are manipulating them. The functions are written to accept a known data object type and work on them. This causes confusion because it’s a reversal of the error messaging we receive.[^chavarri2019]

    let words = ["hi"]
    let res = List.map(n => n + 1, words)
                                   ^^^^^
    Error: This expression has type list(string)
           but an expression was expected of type list(int)
           Type string is not compatible with type int

    This error is telling us that the authority of the typing is the function of the list.[^chavarri2019] Besides being conceptually backwards — which is a subjective point — there’s an objective issue here as well. It feels as if the type inference should be able to “override” this error because we’ve already nailed down the type of words in the line above the map.

    Continue reading

  • Three points on parenting

    2021-12-20 13:14

    1. Imagine if we raised our children such that they weren’t perpetually stressed out.
    2. Imagine if we raised our children such that they got the sleep they need.
    3. Imagine if we raised our children such that they were able to introspect and work with their emotions and knew how alive and passionate and joyful they could be.

    Asking ourselves questions like these can help point out 202201101943 The fundamental irony of many poor decisions.


  • Advent of Code 2024

    A season of code

    2024-11-30 23:59

    #structure #project #tech #blog

    We're back for another year or saving Christmas through the power of programming.

  • 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

  • Code that changes together should live together

    2022-04-27 23:07

    A simple concept that drives good code organization and ensures we’re abiding by the principles that 202204272308 Modules should be highly cohesive and 202204272309 Modules should be loosely coupled.

    If changing one piece of code requires another piece of code to change:

    1. They should be in the same module or else they would have low cohesion and high coupling.
    2. They would require less mental bandwidth to understand if they were physically near each other in the filesystem.
    3. We will be less likely to forget to update one piece when updating the other if they’re near each other and part of the same module.

  • 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

  • The SECI model of organizational knowledge

    2021-10-23 14:45

    Developed by Ikujiro Nonaka, the SECI model of organizational knowledge describes a repeating loop of four activities that individuals in an organization undertake in order to create (202109060835 Knowledge is constructed), commemorate, and expand upon knowledge.1

    1. 202110231448 Socialization of knowledge
    2. 202110231449 Externalization of knowledge
    3. 202110231450 Combination of knowledge
    4. 202110231451 Internalization of knowledge

    When the loop completes, it starts over again as the input to the next iteration. In this way it can be considered a 202110231515 Feedback loop.


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

  • Simple stress measurement questions

    2021-10-22 08:40

    Here are a few questions we can ask ourselves and others to measure their level of stress and burnout.1

    1. How stressed are you right now?
    2. What is your ideal stress level? Ideal meaning the stress is useful and not debilitating.
    3. What is your max stress level?
    4. What behaviors do you see in yourself when you close or at max?

    Another similar question can help us identify stressors and guide a path to a more healthy lifestyle.

    1. Food, exercise, sleep, and time are the most important things. What's keeping me from them?

    1. Lopp, M. (2021, June 25). The Hotel Giraffe. Rands in Repose. https://randsinrepose.com/archives/the-hotel-giraffe/

  • The Only Correct Way to Organize Code

    A Joking Rant About Keeping Code Neat

    2020-09-01 00:00

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

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

  • Verify behaviors and assert properties

    2021-09-25 11:00

    Software systems should have verifiable behavior and assertable properties. These are vital to the maintainability but moreover the evolvability of a system. Moving behaviors and properties up through the chain of verifiability and assertability is required for 202109251102 Reclaiming software systems.[^larson2019reclaim]

    Behaviors

    Behaviors are aspects of software that can be validated empirically against a specific environment.

    1. Observed — behaviors you notice in your logs
    2. Tracked — behaviors you get informed about, but only after a change to the software is deployed to the environment. Tend to degrade over time without a dedicated org-led program ensuring their upkeep. Architectural change is preceded by a period of fixing regressions in tracked behaviors before the intended change can be made.
    3. Verified — behaviors you can rely on being consistently true because they can be checked pre-deployment. Three common ways to verify behaviors: E2E tests, fault injection tests, and load/performance tests. Can be annoying to maintain verification status (including needing an attempted deploy), but help us design around them because we can depend on them being true.

    Continue reading

  • Computation, storage, and representation are the basis of computing

    2022-04-28 11:33

    Modern computation can be described as the creation and management of three fundamental aspects.

    1. Evaluation — our ability to operate on data
    2. Storage — our ability to transfer data across space or time
    3. Representation — our ability to communicate data (e.g. visually or audibly)

    All software systems — no matter how complex — can categorize their constituent pieces as one of these three actions.

    An example:

    In a simple, traditional 202204281140 Model, view, controller architecture, the model is responsible for storage, the controller is responsible for evaluation, and view is responsible for representation. This is obviously a simplification, but we could just get more specific and granular about which code is doing what and we'd see that the idea holds in the general case.


  • Work on what matters

    2022-06-11 23:10

    Make the most out of your time.

    Hamming has a good quote about this in 202205092134 The Art of Doing Science and Engineering.

    To the extent you can choose, work on the problems that you think will be important.[^hamming2020]

    [...] how to do great things. Among the important properties to have is the belief you can do important things. If you do not work on important problems, how can you expect to do important work?[^hamming2020]

    Working on what matters is important because the only viable long term bet on your career is to focus on work that matters, do projects that develop you, and steer towards companies that value genuine experience. (202109251140 Play long term-games)

    1. Avoid snacking202204091039 Impact vs effort model of task value and 202106241531 Eisenhower matrix of task value
    2. 202206112313 Stop preening
    3. 202206112312 Stop chasing ghosts

    What does matter?

    This section was written specifically with the responsibilities of a 202206112233 Staff-plus engineer in mind, but is generally adaptable to other situations as well.[^larson2021staff]

    Companies operate in eternal iterative elimination tournaments

    1. Existential issues — nothing else matters if your company stops existing. Note that this isn’t the most efficient place for effort but it should be swarmed on by everyone.

    Continue reading

  • 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

  • Differentiate between self-doubt and idea-doubt

    2021-10-21 22:31

    All humans feel fear and doubt when creating. The process can look something like this

    1. This is awesome
    2. This is tricky
    3. This is crap
    4. I am crap
    5. This might be ok
    6. This is awesome

    Original thinkers and those that are consistently creative can skip step 4. Instead of saying “I’m crap” we should be saying “the first few drafts are always crap”.1

    There are two things at play here.

    1. We shouldn’t doubt ourselves, we should doubt our ideas. We should test, iterate, think, revise, and build the best thing without being attached to the original idea or taking setbacks personally.
    2. 202112180923 Don't fear failing, fear failing to try

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

  • Desire vs expected outcome in decision making

    2021-09-25 11:55

    Before doing something, ask yourself two questions:

    1. If I do this thing, what do I want to happen?
    2. If I do this thing, what do I expect to happen?

    You may be surprised that you're doing something based on what you want but not what is likely.1 We should strive to be rational when we make decisions whose outcomes are important to us. We should be realistic and understand the differences and biases that we bring to the table when we have an investment in a desired outcome.

    Obviously, there are things in life that are good to do based on what you want to happen even if it's risky. However, we should be aware of the risk and prepared for what may come if it doesn’t turn out how we want it to.


    1. Thorpe, E. (2017, January 24). A Man for All Markets.

  • Curriculum design for software engineering

    2022-06-28 20:18

    #source #thread #new #wip

    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

  • Feedback is for changing behavior

    2022-05-02 19:56

    #thread

    The sole purpose of feedback is to drive a specific change in behavior.

    This statement needs no further explanation, but let's drive the point home with a specific corollary.

    If you need to deliver feedback, but the individual has something distressing and distraction going on, don't give the feedback at all.

    this is the ask stage of feedback delivery #thread

    First of all, the feedback will be less effective or counterproductive since the person is distracted.

    More importantly though, there's no need for the feedback to be delivered whatsoever given the purpose is to drive behavior change.

    Take the two possible outcomes for not giving the feedback:

    1. You don't give the feedback and the behavior continues. By definition this gives us another opportunity to give the feedback in better circumstances.
    2. You don't give the feedback and the behavior stops. Our goal is achieved, there's no need for the feedback at all.

  • Knowledge is the backbone of a product organization

    2021-10-23 14:40

    One of the single most significant contributing factors to the success of a product organization is its collective knowledge.1 There are two kinds of knowledge in an organization:

    1. 202110231457 Tacit knowledge is what people understand in their own minds. It is not commemorated anywhere permanent.
    2. 202110231459 Explicit knowledge is commemorated and defined, allowing others to find and share in it.

    It's a good idea for organizations to turn the tacit knowledge of their individuals into explicit knowledge so that it lives beyond the tenure of the individual (202202011405 Teams abstract individuals over time and 202204301406 Teams should own critical knowledge).

    202110231449 Externalization of knowledge in the 202110231445 The SECI model of organizational knowledge also shows how making knowledge explicit enables it to grow organically.


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

  • Strengths of platform teams

    2021-10-25 11:47

    Contrasts with 202110251148 Weaknesses of platform teams.

    1. Thinking of infrastructure as part of the product. Looking at cost and efficiency and downtime are all things that platform teams excel at.1
    2. Building out capabilities and general solutions for other teams. Think of a platform team as building a toolbox instead of showing developers which tools to use for all problems.1
    3. Instilling a culture of rigor around research. Platform teams have to be careful with assuming that data and research can be applied to the entire platform instead of just being valid for that section of users. Generating insight that applies across the entire platform can be hard or impossible. Platform teams can help their organization's culture by being good at working in these stringent conditions.1

    1. Ballona, D. (2021, February 15). Composition for teams: Platform and application pattern. Dballona. https://dballona.com/en/composition-for-teams-platform-and-application-pattern/ 2 3

  • 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

  • Selling ideas requires effort

    2023-04-11 22:20

    Specifically, there are 3 skills to master in order to be able to sell our ideas:1

    1. Giving Formal presentations
    2. Producing written reports
    3. Mastering the art of informal presentations as they happen to occur.

    The best ideas don't naturally win out, they must be sold even if they're much better than the competition. After all,

    Change does not require progress, but progress requires change.1

    Some tips for getting better at these:1

    • Privately critique presentations you attend
    • Ask others for their opinion on yours and others' presentations
    • Find parts that are effective and those that are detrimental
    • Be yourself or develop a personal style that you are comfortable with. This includes subtle things like telling jokes and being personable.

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

  • System design

    2022-08-13 13:27

    #source #structure #wip

    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

  • Weaknesses of platform teams

    2021-10-25 11:48

    Contrasts with 202110251148 Weaknesses of platform teams.

    1. Platforms are less likely to solve subjective or nuanced problems well. The concrete use cases and implementations that are needed to solve real-world problems can't be addressed by a team whose objective is building a general purpose platform that can solve many problems.1
    2. Context-related optimization should live close to the context. Optimizing in difficult situations may require understanding the exact, concrete case. Again, platform teams are better at maintaining general levels of competency than highly specialized instances.1
    3. Having a platform team may negatively affect your users. A team created to solve all problems may de-prioritize a real-world use case for a subset of users. There may also be situations that need to be generalized for a platform that are simply contradictory. In these instances, someone will lose out.1

    1. Ballona, D. (2021, February 15). Composition for teams: Platform and application pattern. Dballona. https://dballona.com/en/composition-for-teams-platform-and-application-pattern/ 2 3

  • Value of employee time

    2022-11-12 12:53

    A simple table to relate an employee’s time cost to proposed time savings.

    All values are per $100,000 in total compensation cost to the business and use average values for time, which is calculated as follows.

    Given 365.25 days per year =1461days4year and 5weekdays7days.

    We have 730528 weekdays per year and 146128 weeks per year.

    Using this and the rate of 8 work hours per weekday our total work hours per years and weeks are

    58 , 440 28 = 2087 1 7

    work hours per year and (unsurprisingly)

    Continue reading

  • 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

    A poem about the cycle of abuse, or more charitably maybe, how the foibles and idiosyncrasies of parents are thrust upon their children because they don't have a choice in the matter. The final stanza suggests that we should get out of the cycle and not have children of our own, but I'm not so sure I agree with that. I think I subscribe to the more optimistic viewpoint that 202411161434 Children are the greatest force of change.


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

  • 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 significant things with your life

    2023-04-04 10:47

    As far as I know each of [us] has but one life to lead, and it seems to me it is better to do significant things than to just get along through life to its end. Certainly near the end it is nice to look back at a life of accomplishments rather than a life where you have merely survived and amused yourself. Thus in a real sense I am preaching the messages that (1) it is worth trying to accomplish the goals you set yourself and (2) it is worth setting yourself high goals.1

    An excellent quote on living 202304031317 A Life and having 202205231312 A Career that you can be proud of and be happy to have lived.

    A similar but less philosophical take on this is to 202206112310 Work on what matters. A similar but more philosophical take on this is 202109071223 The unexamined life is not worth living.


    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

  • 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

  • OODA loop of action

    2022-05-03 12:47

    Developed by USAF Colonel John Boyd, the OODA loop is a cyclic method for decision making. The steps are designed to be carried out repeatedly in overlapping, differently sized feedback and feed-forward loops.

    The eponymous steps are

    1. Observe — Gather information from a range of sources
    2. Orient — Understand where we are and where we want to be
    3. Decide — Develop a plan of action
    4. Act — Carry out the plan
    flowchart TD
      OBSERVE --->|feed-forward|ORIENT
      ORIENT --->|feed-forward|DECIDE
      DECIDE --->|feed-forward|ACT
      ORIENT -->|feedback|OBSERVE
      DECIDE -->|feedback|OBSERVE
      ACT -->|feedback|OBSERVE
    
      subgraph OBSERVE
        direction RL
        o((observations))
        o1([unfolding\ncircumstances]) --> o
        o2([outside\ninformation]) --> o
        o3([unfolding interaction\nwith environment]) --> o
        o4([implicit guidance\nand control]) --> o
      end
    
      subgraph ORIENT
      end
    
      subgraph DECIDE
      end
    
      subgraph ACT
      end

    The loop has been adapted for business uses under different names. One such popular name is the Plan-Do-Check-Act (PDCA) Cycle.


    Continue reading

  • Netflix cultural model

    2021-09-27 14:32

    Netflix's cultural model is about giving high performers the autonomy to creatively work towards solutions without roadblocks and process to slow them down (202106241548 Leaders work to remove obstacles).

    The model is applied in 3 phases, with each phase consisting of the same 3 steps: increasing talent density (A), introducing candor (B), and removing controls (C).[^hastings2020]

    This method revolves around The Keeper Test

    Who on your team would you fight to keep and how hard would you fight to keep them?

    This test is supposed to cut to the heart of the question, "why do we keep mediocre performers on our teams?" and answer it with a resounding, "if you wouldn't fight to keep them, you should remove them now and help them find a place where they can be successful." (202109251035 High performing teams)

    Phase 1

    Phase 2

    • A. Pay top of market
    • B. Emphasize organizational transparency
    • C. Remove decision making approvals

    Phase 3

    Continue reading

  • Anti-flow state

    2021-09-09 11:24

    Related to 202109091123 Flow state, this is the mental state characterized by 202109091125 Free association of thought and the planting and harvesting actions of 202109090947 Idea gardening. Whereas in flow state we're intensely focused on the idea we're working on, the anti-flow state requires being absorbed in something other than that idea so the idea can have room to evolve in our subconscious mind.

    Anti-flow is essentially an act of discovery. We discover connections that we could not have consciously thought of.[^rands2018antiflow]

    Anti-Flow, by definition, is about discovering hidden potential in the strange mental crevices of your mind.[^rands2018antiflow]

    Anti-flow is the weaponized inspiration generation. Anything can show up during deep sessions of Anti-Flow from the mundane to the magical.[^rands2018antiflow]

    Encouraging an anti-flow state of mind can be done through deliberately, systemically enabling serendipity. There are many ways to encourage the free association of thoughts:

    Continue reading

  • Advent of Code 2024 Day 10

    Hoof It

    2024-12-10 00:00

    #blog #project

    Today we're back at the Lava Production Facility from 2023 day 15 helping reindeer find the best hiking routes around their floating island.

  • CMS editor and developer experience alignment

    2021-10-22 16:38

    Using a headless CMS with a component based front-end application is one of the core tenets of the Jamstack. Unfortunately though, it's easy for CMS editors and application developers to be at odds with each other on alignment. In order to maintain that alignment we should use one of three strategies for mapping CMS fields to components.[^davis2021]

    1. Create a transformer near the components. This is easier to maintain and more understandable, but may not scale well in massive apps. It also has the downside of making more calls to the CMS for data, worsening performance.
    2. Create a top level transformer in your app. This will perform better by making one call, but be more complicated to maintain and test.
    3. Create a microservice proxy to transform from the CMS(s) that you use. This microservice would be able to have a consistent interface for front-end apps while allowing flexibility on data-sources and formats. The downside is the much higher cost of maintenance, testing, and deployment that the service will have relative to a simple in-app transformer.

    We can use these like stepping stones, only moving up a level when your company needs different complexity and performance characteristics.

    Continue reading

  • Virtue ethics

    2022-06-05 07:55

    Virtue ethics defines ethical behavior as that which facilitates the fulfillment of a person’s telos of 202206050810 Eudaimonia through the attainment and proportioning of different virtues.

    202206050754 Aristotle is the father of virtue ethics and developed the subject in his work Nichomachean Ethics.

    More simply put, in order to explain what makes a person good, Aristotle defines

    1. Which qualities a good person ought to have
    2. In which amounts
    3. Whether every person has the capacity for those qualities
    4. How we acquire them
    5. What it will look (or feel) like when we actually have them[^schur2022]

    Virtue ethics differs from 202206051530 Deontology by guiding us to try and be a specific type of person while deontological ethics guide us on which actions and choices we should make.

    Virtue ethics also differs from 202206051524 Consequentialism by having less concern for the ends and more concern for the means than a pure consequentialist ethic would.

    Virtue ethics [...] emphasizes the virtues, or moral character, in contrast to the approach that emphasizes duties or rules (deontology) or that emphasizes the consequences of actions (consequentialism).[^hursthouse2022]

    Continue reading

  • Computer Science

    2022-06-19 13:00

    #thread #structure

    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 Languages

    Asynchronous computing

    Continue reading

  • Notes are the fundamental unit of knowledge work

    2022-09-09 11:42

    The number of 202109091129 Evergreen notes written per day might be the most valuable metric for measuring the productivity of a knowledge worker.[^matuschak2017unit] Consider that 202209091141 The goal of note-taking is not to be better at taking notes, it's to be better at thinking. This sharply contrasts to taking transient notes which create busy work without accumulating knowledge (202209091140 Transient notes don't create knowledge).

    There are a few good reasons for this metric's value:

    1. Evergreen note writing helps insight accumulate
    2. Evergreen note writing helps reading efforts accumulate
    3. Evergreen note writing helps writing accumulate

    If writing is the medium of research and studying nothing else than research, then there is no reason not to work as if nothing else counts than writing.

    Focusing on writing as if nothing else counts does not necessarily mean you should do everything else less well, but it certainly makes you do everything else differently. Having a clear, tangible purpose when you attend a lecture, discussion or seminar will make you more engaged and sharpen your focus.

    Even if you decide never to write a single line of a manuscript, you will improve your reading, thinking and other intellectual skills just by doing everything as if nothing counts other than writing.[^ahrens2017]

    Continue reading

  • Always bet on text

    2021-10-22 16:53

    Text is the most powerful, useful, effective communication technology ever.[^hoare2014]

    1. Text is the oldest and most stable communication technology (assuming we call speech a natural phenomenon). You can read text from 5000 years ago and can engrave granite that will outlast the human species.
    2. Text is the most flexible communication tech. Text can convey ideas with a precisely controlled level of ambiguity and precision, implied context, and elaborated content, unmatched by anything else. It is not a coincidence that all of literature, poetry, history, philosophy, mathematics, logic, programming, engineering, and everything else rely on textual encoding for their ideas.
    3. Text is the most efficient communication technology. By orders of magnitude.
    4. Text is the most socially useful communication technology. It works well in 1:1, 1:N, and M:N modes. It can be indexed and searched efficiently, even by hand. It can be translated. It can be produced and consumed at variable speeds. It is asynchronous. It can be compared, diffed, clustered, corrected, summarized and filtered algorithmically. It permits multiparty editing. It permits branching conversations, lurking, annotation, quoting, reviewing, summarizing, structured responses, exegesis, even fan-fic. The breadth, scale and depth of ways people use text is unmatched by anything. There is no equivalent in any other communication technology for the social, communicative, cognitive, and reflective complexity of a library full of books or an internet full of postings. Nothing else comes close. Nothing.

    Continue reading

  • Advent of Code 2024 Day 06

    Guard Gallivant

    2024-12-06 00:00

    #project #blog

    Today we visit the suit manufacturing plant from 2018 day 5 and need to avoid creating time paradoxes by hiding from the guard.

  • Career checkup template

    2022-06-12 20:47

    Sourced from Will Larson's blog Irrational Exuberance[^larson2022checkup]

    This is a simple template for checking in on your career. Here’s how to use it:

    1. Look through the sections. If there are any sections that don’t resonate with you at all (as opposed to just feeling hard to fill in), then remove or edit them.
    2. Fill in the sections. Feel free to jump around to answer the parts that you have the most energy for.
    3. Revisit a few days later: anything you want to change after sleeping on it?
    4. If possible, find peers or friends to share and discuss each others checkups together.
    5. Store it away somewhere to review a year from now.

    Summary

    Write this section last! How would you summarize everything else you wrote below? Try to keep it to max of two paragraphs.

    <start writing here!>

    How are you feeling about your career right now?

    Write a few paragraphs about how you’re feeling about your career right now. Don’t worry about writing this for consumption, focus on finding words that resonate with you!

    <start writing here!>

    What did you expect / what happened in the last 5 years?

    When you think back to five years ago, what did you expect to happen over the following five years? What has happened? How do you feel about the difference between those two?

    Continue reading

  • 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

  • Impact vs effort model of task value

    2022-04-09 10:39

    #thread

    The impact vs effort model of task value is a simple two axis graph that's split into quadrants.

    Along one axis we have the value/impact of a task from low to high. Along the other we have the effort it takes to complete that task from low to high.

    The quadrants then break down as follows:

    1. Pit of despair — low impact, high effort tasks. There's nothing good about a low value task that's incredibly difficult and time consuming. It's our job to stay out of this quadrant at all cost. The good news is that it's typically easy to detect these pits and avoid them.
    2. Snacks — low effort, low impact tasks. Tempting to indulge in because they're quick to build, but they don't offer much value and amount to busy-work. This is an easy and insidious quadrant to get trapped in. Many many organizations reward performative work #thread in this quadrant.
    3. Quick wins — low effort, high impact tasks. These are the best things to work on. The only downside is that a mature organization will soon run low on items here and need to fill their time with tasks in other quadrants.
    4. Deep work — high effort, high impact tasks. These are what we should be filling our time with when the low effort high value tasks are dried up. Instead of drifting to "snacks", we should deepen our efforts, dig in, and apply ourselves to long-term, valuable work. It can be hard to get buy-in for this type of work because many people favor short-term games, but as we know, we should be trying to 202109251140 Play long term-games

    Continue reading

  • Expertise is required to create useful simulations

    2022-07-27 15:30

    It is necessary to have a great deal of special, expert knowledge in a field in order to create an accurate, useful simulation or program.[^hamming2020]

    The argument for the requirement of deep practical knowledge:

    1. We know that a simulation cannot be 100% accurate to the real world (202203210832 Models are necessarily incomplete)
    2. Ergo, we will have to accept inaccuracies somewhere in the simulation
    3. Ergo, we need to know which inaccuracies are acceptable and which are not
    4. Ergo, we need to understand the field, the purpose of the simulation, the way people will interpret it, and how to make a simulation feel accurate even if it's slightly unfaithful to reality (e.g. a flight simulator giving pilots the right feeling for flying)
    5. Ergo, we have to be an expert to make a good simulation

    A correlated, responsible first question when faced with a simulation of anything is "why should anyone believe this simulation is accurate or useful?" This question will make you better at creating simulations as well as more capable of detecting when others have not done well at this.

    We need to be suspicious about getting too many solutions and not doing enough careful thinking about what we've seen. Volume output is a poor substitute for acquiring an intimate feeling (through deep thought about the underlying situation) for a situation being simulated.

    Continue reading

  • Overcoming poor performance of a peer

    2022-03-24 11:27

    It is possible to fail in an organization primarily because we want to hold others to a higher standard than our organization's management is willing to enforce.

    The basic pattern of one of these scenarios goes like this. We're trying to do our job effectively, but can't due to the low performance of a peer. We escalate our problem to our manager, but they transform the issue into one about interpersonal conflict or relationships instead of addressing the performance issue of the other individual. This (avoidant) transformation pushes the responsibility back onto us and if we persevere and insist on driving accountability for the peer, we block our own progress, becoming "hard to work with", without accomplishing anything.

    Typically this scenario is not because the manager lacks the knowledge that there is an issue. It's more likely the manager knows about the problem but is unwilling or unable to address it directly.

    There are two approaches for dealing with this scenario:[^larson2022peer]

    1. Have a direct discussion but frame it by asking your manager why they are comfortable maintaining the status quo. This can be uncomfortable for you and them, so be careful. If this is successful, it'll still be a slow change anyway.

    Continue reading

  • Coaching underperformers

    2021-10-18 11:58

    #structure

    Underperformers may not realize that they have an inflated sense of their performance. Managers should figure out the cause of their lack of awareness. In the process, they will either uncover what support the underperformer needs or confirm that they just might not be able to do the job and that they should reset expectations accordingly.

    This situation is very draining on time and emotions for everyone involved. It's better to fix it right away.

    Another insidious risk is that by allowing this to go on, a manager may be tacitly endorsing substandard performance, causing other employees to become demotivated, disengaged, or angry about the situation. (202110181231 Don't tacitly endorse bad behaviors)

    Possibilities for alleviating the issue:[^kislik2020]

    • 202110181203 Be clear about expectations — This can seem painful, but it's better for everyone in the long run. You have to be super clear on expectations.
    • Provide employees with resources and support — If their natural skills are insufficient, they may not even perceive their deficits. It's important to coach, mentor, and get them in a position where they can grow and succeed.
    • Determine whether you're willing to continue investing in the individual — If you're not, it's much more practical to reduce your expectations. Do not abandon them, but do not spend more time on then than is required. You should spend your discretionary time on your top performers (202110181205 Invest discretionary time in top performers). This also includes deciding whether they are below the acceptable line or above it. Good -> great can be abandoned, but failing -> ok cannot. If they're failing and can't improve, it's time to let them go.

    Continue reading

  • Advent of Code 2024 Day 07

    Bridge Repair

    2024-12-07 00:00

    #blog #project

    Today we're visiting the rope bridge from 2022 day 9 and need to help the elves repair it by sorting out there test calculations.

  • Naming conventions should use unambiguous delimiters

    2022-03-22 16:10

    When naming variables, files, etc. we need to delimit words, initialisms, and segments of meaning for people to interpret. Therefore, we should use unambiguous methods to delimit each word. In practice this means casing like kebab-case and snake_case are objectively simpler and superior to things like camelCase.

    Further explanation

    Firstly, acronyms and words. Symbol delimited names are the only way to universally disambiguate words. There's a reason that CSV stands for Comma Delimited Values and not Capital-letter Delimited Value. It only takes one example to see this.

    What do we do when we want to name something like "URL Parser". Our options are urlParser, uRLParser, URLParser, and UrlParser. The option urlParser isn't so bad, but we also need to solve for when the acronym isn't the first word in the sentence like "parse URL": parseUrl or parseURL. It certainly loses even more appeal if the acronym is in the middle: parseUrlParams and parseURLParams. And (though the example is getting contrived now I've seen similar and worse in real world code) the final nail in the coffin is "a URL parser": aURLParser, AURLParser, AUrlParser, or aUrlParser.

    Continue reading

  • The Entry Point

    2021-04-29 15:22

    #new #structure #source #wip #thread

    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

  • 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

  • Essential XP Emergent Design

    2024-06-27 12:56

    #source

    An article we read as a group for a discussion in our engineering organization. The author explicitly offered all his conclusions as fact "without much justification" noting that "at some later time, perhaps I’ll try to justify this view."[^jeffries2001] I did not agree with what little it did contain.

    There are many well-known modeling and design techniques that can be used to bring about a "good design". An incremental process may limit the applicability of these techniques, which are most powerful when applied and committed to "up front". Test everything; eliminate duplication; express all ideas; minimize entities: These few simple rules, applied locally, can help a high quality global design to emerge.[^jeffries2001]

    Ron asserts that good design is highly modular, consisting of separate components (typically objects) which are highly cohesive, loosely coupled, and given expressive names that enable us to grasp quickly what the modules mean and why they are there.[^jeffries2001] This statement is the most reasonable of the article. I agree with it, but I find it to be vague to the point of being unhelpful. For example, I'd rather be the right temperature than very hot or cold, but that doesn't offer much as to the nature of "the right temperature". Being the right temperature is tautological. His design principles aren't as self-evident, but they can be interpreted in almost any way to fit or reject a design as "good".

    Continue reading

  • Advent of Code 2024 Day 05

    Print Queue

    2024-12-05 00:00

    #blog #project

    Today we found the printer from 2017 day 1 and need to help sort it out.

  • Staff-plus engineer

    2022-06-11 22:33

    #structure #thread

    Staff engineering is a complex topic. As nebulous as it can be to get promoted to a 202206112236 Senior engineer role, it’s considerably harder to move into staff-plus roles. Whereas the definition varies a bit from company to company for senior engineering, the definition or even existence of staff-plus roles is completely irregular across the industry. Will Larson wrote an excellent book, Staff Engineer: Leadership Beyond the Management Track[^larson2021staff] on what it means to be a staff-plus engineer. This structure note and its children mostly come from that resource, but also other citations where noted. That book is also (mostly) publicly available at staffeng.com.

    [!important] Being a staff engineer is not just a role. It’s the intersection of the role, your behaviors, your impact, and the organization’s recognition of all those things.

    The value of the title

    • Bypass informal gauges of seniority (especially useful for underrepresented groups)
    • Facilitating access to “the room”
    • Increase current and career earnings
    • Access to interesting work
    • Different rather than better

    Archetypes

    Continue reading

  • Advent of Code 2024 Day 08

    Resonant Collinearity

    2024-12-08 00:00

    #blog #project

    Today we're visiting the roof of a top-secret Easter Bunny installation and need to put a stop to their plot to get people to buy Easter Bunny brand Imitation Mediocre Chocolate as a Christmas gift.

  • 2019 Work Reads

    A Slew of Short Book Reviews

    2020-07-01 00:00

    #ramblings #blog #work

    My professional reads from last year, rated and reviewed.

  • 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

  • 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

  • The Pragmatic Programmer

    2023-07-24 10:42

    #structure #source #new #wip

    Book Website

    Preface to the Second Edition

    Chapter 1 - A Pragmatic Philosophy

    Chapter 2 - A Pragmatic Approach

    • 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

  • Revamping My Blog

    A New Coat of Paint

    2020-06-01 00:00

    #blog #tech

    You may have noticed that the blog got a new look and feel recently. The changes weren't purely cosmetic though. Let's take a look at how I migrated from a Bootstrap and PHP based blog to React, Next.js, and Styled Components.

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

  • Learning Rust

    A Quick Lesson in Ownership

    2022-05-15 00:00

    #tech #blog

    I'm learning rust

  • 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