Results: 58
-
Project structure notes should answer a question
2021-07-29 23:12
Ask a question to start a knowledge project. This could be as simple as focusing your interest to an area worth reading, exploring, and adding to the Zettelkasten. Or this could be something as final as the thesis for an article, essay, paper, blog post etc.
Once you have your question to focus your project, answer it with the standard workflow while making sure to do your thinking inside of the structure note for that project.
Conversely, there are good structure notes that are organizational in nature. They implicitly ask the question "what do we know about this topic?" but they are not "project structure notes" as described here. They aren't about a specific project to learn research, learn, or develop ideas.
-
Rescuing a failing project
2023-10-30 11:05
Cure the lack of momentum and feedback.
- Add some (very few for now) tests even if they verifies a bug continues to be a bug.
- Set up CI/CD that tests and pushes always.
- Continue to add tests
- If it hurts, do it more and automate it more.
Crafting Code Podcast Ep. 2
-
If you can't cancel the project you're not the product owner
2024-07-08 10:40
If you can’t cancel the project, you’re not the product owner.1
A simple enough statement but deep nonetheless. It cuts at the heart of whether or not you have real ownership over a product — or in the general sense anything. Only someone who actually owns something can make final decisions like these.
Some more questions that distill ownership and autonomy in similar areas1 are:
- Circle who can buy pizza on the org chart
- Who needs to be consulted to install or uninstall something in the office space
A lack of this kind of ownership commonly results in overly cautious behaviors and remember that 202408060133 Caution and perfectionism hurt progress.
-
Suresh, N. (2024, April 22). Jokes for Jokers [Broadcast]. https://open.spotify.com/show/57i8sYVqxG4i3NvBniLfhv ↩ ↩2
-
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.
-
Advent of Code 2024 Day 03
Mull It Over
2024-12-03 00:00
Today we're visiting the toboggan rental shop from 2020 day 2 and need to help the elves with corrupted data in their computers.
-
Caution and perfectionism hurt progress
2024-08-06 01:33
Being overly cautious or too much of a perfectionist will undoubtedly limit progress and potentially even destroy the ultimate outcome of a project as a whole. Being overly cautious can manifest in different ways:
- Having meetings about meetings. This shows that there are issues with how the organization runs that need to be addressed pre- or post-hoc in order for something to actually get done.
- Meetings to discuss how we should do something in order to get consensus before getting things done. This shows that contributors do not have the authority, responsibility, or capability to do things individually and have to justify, wait, and ask others to do their job.
- A lack of desire from contributors to be associated with a particular project or task. This shows that risk and reward are not appropriately balanced in your organization. If people don't want to be a part of a risky project, then they know that they don't have the authority or latitude to address the project correctly or perhaps know that they won't be rewarded for working hard and taking a risk on something that could hurt them.
- Requiring large chains of approval and sign-off. If many people need to see something in order for it to be approved, then the contributors and the teams responsible for making something don't really have the authority or empowerment to do the job they were asked to do (202407081040 If you can't cancel the project you're not the product owner). If people who are not intricately involved in the project day-to-day get more say than as a potential source of feedback, they are in the way of that project's success and the team will revert to caution and perfectionism in order to avoid re-work and disapprovals.
-
Advent of Code 2024 Day 05
Print Queue
2024-12-05 00:00
Today we found the printer from 2017 day 1 and need to help sort it out.
-
Advent of Code 2024 Day 10
Hoof It
2024-12-10 00:00
Today we're back at the Lava Production Facility from 2023 day 15 helping reindeer find the best hiking routes around their floating island.
-
Advent of Code 2024 Day 08
Resonant Collinearity
2024-12-08 00:00
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.
-
Advent of Code 2024 Day 04
Ceres Search
2024-12-04 00:00
Today were visiting the Ceres monitoring station from 2019 day 10 and helping the station chief solve her word searches.
-
Advent of Code 2024 Day 02
Red-Nosed Report
2024-12-02 00:00
We've made it to our first location in our search for the chief elf historian, the reindeer reactor from 2015 day 19. The reindeer need some help finding out which series of readings from their reactor are safe.
-
Advent of Code 2024 Day 09
Disk Fragmenter
2024-12-09 00:00
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.
-
Advent of Code 2024 Day 01
Historian Hysteria
2024-12-01 00:00
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.
-
No broken windows
2023-08-28 23:40
Keep in mind the 202308282341 Broken window theory with our code. People will continue to put in the effort to maintain, test, lint, etc a project unless there are any obvious signs on disrepair. Don’t allow “that one area of the code that we don’t care about” to creep into the rest of the project. The only way to keep things going is to instill a zero tolerance, no broken windows rule.1
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 7). Addison-Wesley. ↩
-
-
Advent of Code 2024 Day 07
Bridge Repair
2024-12-07 00:00
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.
-
Development Estimates
A Different Take on a Contentious Practice
2018-10-01 00:00
How to get value from development estimates and why I've learned to love them.
-
Advent of Code 2024 Day 06
Guard Gallivant
2024-12-06 00:00
Today we visit the suit manufacturing plant from 2018 day 5 and need to avoid creating time paradoxes by hiding from the guard.
-
Advent of Code 2024 Day 11
Plutonian Pebbles
2024-12-11 00:00
Today we're visiting the ancient civilization on Pluto from 2019 day 20 and find some interesting physics-defying stones.
-
Stop starting, start finishing
2023-10-24 15:10
Instead of starting many things and splitting your attention, you should focus on finishing things that you've started. Note that "finishing" doesn't have to be seeing that project to completion. For example you can finish a project by deciding that you don't have time for it and won't continue with it. This relates to 202110181246 Limit work in progress to increase throughput.
How does this idea work with creativity learning or the fact that 202110212227 Moderate procrastination facilitates creativity? Creativity learning is about chasing the many interesting things that we see without worrying about becoming an expert in them. This leads to generalized knowledge (T-shaped etc.) #thread and this 202304031221 Breadth of knowledge fuels analogy.1
-
Epstein, D. (2019). Range: How generalists triumph in a specialized world (1st ed.). Macmillan. https://www.goodreads.com/book/show/41795733-range ↩
-
-
PARA Method
2021-09-07 16:20
A universal system for organizing digital information.[^forte2017]
Projects
Series of tasks linked to a goal, with a deadline
- Complete app mockup, develop project plan, execute business development campaign, write blog post, finalize product specs, attend conference, etc.
- Goal has to be achieved (completely checked off at some point) and has a deadline
Areas
Spheres of activity with a standard to be maintained over time
- Health, finances, professional development, travel, hobbies, friends, apartment, car, productivity, direct reports, product development, writing, etc.
- Standard to be maintained with an indefinite end date
- Areas for me are hierarchical. All projects must belong to an area and all tasks may belong to a project, but must belong to an area.
Resources
Topics and themes of ongoing interest
- Habit formation, project management, transhumanism, coffee, music, gardening, online marketing, SEO, interior design, architecture, note-taking.
- I use resources as my reference manager. For this reason, transient items like projects, areas, and tasks should reference resources and update them with relevant information that comes out of the doing of the item.
-
Staff engineer promotion packet
2022-07-31 09:47
Here are some questions to ask yourself in order to prepare a promotion packet for a staff engineering position.
- What are your Staff projects? What did you do? What was the project’s impact (including a well-defined goal)? What made this project complex? Keep it very short and then link out to supporting design documents1
- What are the high-leverage ways you’ve improved the organization?
- What is the quantifiable impact of your projects? (Did you increase revenue by $10 million? Did you reduce year-on-year customer support tickets by 20%?)
- Who have you mentored and through what accomplishments?
- What glue work do you do for the organization? What’s the impact of that glue work?
- Which teams and leaders are familiar with and advocates for your work? What do they value about your work? One sentence, include data (e.g. survey data) when possible
- Do you have a real or perceived skill or behavior gaps that might hold you back? For each, how would you address the concern? One sentence each
-
Larson, W. (2021). Staff engineer: Leadership beyond the management track. https://staffeng.com/ ↩
-
Zero to engineer
2022-08-10 19:44
How do get into 202109061338 Software Engineering?
Let's go at this from a specific angle.
What would it take for me to get an entry level job as a programmer?
- Get past the résumé screen
- Get past the recruiter screen
- Get past the coding exercise
- Get past the onsite interviews
Preparing for these takes different amounts of time and require different skillsets. If we include the dependencies between each step and sort them by preparation time, we get a new ordering.
- Getting past the coding exercise — is the basis for 2 and 3, so it must be solid and come first.
- Getting past the résumé screening — requires things like example projects and raw time spent coding.
- Getting past the onsite interviews — definitely the point where not knowing your shit can bite you, but it's also possible to be great at interviewing and compensate for your rough patches with things like work ethic and initiative.
- Getting past the recruiter screening — easy to bullshit past if the résumé checks out, but always easier if you're confident and capable than faking it.
Getting past the coding exercise
Helps if you know what it will be. Many companies make things like this available in advance. If so, you have an obvious path.
-
Repeat the message in order to be heard
2021-04-29 15:29
There's a saying that goes
For a message to be transmitted effectively it has to at least be communicated in 3 different ways and said 3 times each way.
There's another saying that says
You need to say something 7 times for someone to hear it once and they need to hear it 7 times for them to understand it.
A huge portion of responsibility as leaders is to collect information, 202104291526 Make the hard decisions, and then follow through on them. Since 202104291525 It's not a leader's job to be the best at everything, we're not the people who are carrying out the actions that come out of the decision. In order to keep everyone aligned and successful, it's critical that everyone knows the message behind the decision.
Everyone working on the project or direction should be able to answer the question "what is the vision and strategy for this project?" on the spot. It should be so ingrained in their heads that they can make the expert decisions that they're supposed to without needing to ask the leader about each one. The only way they can do that is if they know that message and that mission deeply. The only way to get people to know that message deeply is to keep repeating the message about where we're going and why (202203231647 Leading from vision). It's much easier for people to make the right decisions when you 202304051001 Use a simple heuristic to guide gradual adoption.
-
Ownership
2024-08-18 22:08
Notes on the meaning, implementation, and outcomes of ownership of our work.
The global network of capital essentially functions to separate the workers from the means of production.
Philosophically
- 202403131332 Techno-bourgeoisie
- 202112291821 The things we own end up owning us
In Engineering
- 202407081040 If you can't cancel the project you're not the product owner
- 202408060133 Caution and perfectionism hurt progress
- 202312091511 There is no such thing as sacred code
- 202206171206 Delivery Performance vs Value Delivery
-
Know what's good enough
2023-12-09 14:13
In most areas of work, there's a time when the work done is good enough.1 This point is reached when there's less value in continuing to work on the project than there is in finishing it.
The difficulty lies in knowing where this point is. It can be extremely challenging without concrete data or if we can't 202309011327 Define metric to value transfer functions using sensitivity analysis.
-
Thomas, D., & Hunt, A. (2019). The pragmatic programmer, 20th anniversary edition: Journey to mastery (Second edition) (pp. 11-12). Addison-Wesley. ↩
-
-
Quantify your cost of delay
2023-09-01 13:33
If you're only going to quantify one thing, quantify the cost of delay.1
We simply have no business trading money for cycle time if we do not know the economic value of cycle time.
Cost of delay is the measure that returns the most value while building an economic framework for a project. It will lead to our ability to quantify other important variables such as the cost of queues, batch sizes, and variability.1
How to quantify it? #wip #thread (should be answered later in the book)
-
Remote team management
2021-10-22 08:45
This structure note records my learnings from taking the Coursera How to Manage a Remote Team course.[^murph2020] These notes come from a time before my Zettelkasten and are longer, more verbose, and less atomic than I'd normally like, but I'm just going to leave them as they are. That way, I can link to them and search for their contents without investing the time in breaking them down more.
Managing a team of remote workers presents unique challenges and opportunities:
Communication is Crucial
Embracing Asynchronous Communication
In a world dictated by calendars and schedules, people are conditioned to operate in synchronicity — meaning that they inhabit the same physical or virtual space at the same time. Asynchronous communication is the art of communicating and moving projects forward without the need for collaborators or stakeholders to be available at the same time your message is sent.
In an all-remote setting, mastering asynchronous workflows is vital to avoiding dysfunction and increasing efficiency. The benefits include enabling your team to work effectively across time zones, reducing meetings, and enabling team members to work on a flexible schedule — all of which raise morale and productivity. However, shifting to this way of working requires a lot of large and small adjustments.
-
Define metric to value transfer functions using sensitivity analysis
2023-09-01 13:27
When building an economic framework in a complex system, we should strive to understand the transfer function between measurements and value output. In order to understand how (for example) reducing response latency impacts total life-cycle profits for a project, we can vary that measure independently and see the outcome. We then put it back and vary a different measure. Doing this is called performing a sensitivity analysis. In this way we get the information we need to make economically based decisions (202309011312 The primary goal in product development is to make good economic decisions) for our complex product development systems (202309011322 We need more information for complex decision making).1
-
Reinertsen, D. G. (2009). The principles of product development flow: Second generation lean product development (pp. 30). Celeritas Publishing. ↩
-
-
Define done
2021-06-22 11:51
Defining what it means to be done with a project or task is crucial.
Here, done includes all outcomes including successes, neutral ones, and failures. We need to have a clear picture of when to stop working. Depending on the outcome, that can range from celebrating a win to cutting losses.
We must 202106221744 Begin with the end in mind in order to be successful in the long term even if we’re not successful in this specific task. We have to be able to consistently make progress even if that’s learning what avenues are not valid by exploring them and failing.
Defining what it means to be done can help with 202106221150 Procrastination because 202106221122 Procrastination is triggered by emotional aversions like ambiguity and lack of structure. Having a clear definitions removes those aversions from the situation.
This differs from 202106221152 Define success because done is the fallback for success — it happens whether we succeed or not. Success requires measurement but done can be as simple as a deadline.
-
Define success
2021-06-22 11:52
202106221744 Begin with the end in mind and be sure to define success at the outset of a project or task. This is important for determining when to be done with a task and whether you succeeded in the ultimate goal that was supposed to be accomplished.
Having a clear definition of the goal and what it looks like to successfully fulfill it is the only way that we can keep on track while also allowing for our projects to be organic enough where we can adapt to changing information. Without a definition of success, we can trick ourselves into thinking we're accomplishing things while missing the point entirely. We can also trick ourselves into not valuing what we've accomplished or even get completely side tracked (failing to keep 202106241528 First things first) and forget about what we set out to do.
This differs from 202106221151 Define done because done is the fallback for success — it happens whether we succeed or not. Success requires measurement but done can be as simple as a deadline.
-
Psychological safety is the top indicator for group performance
2021-12-18 09:33
Individual skills are not what matters. What matters is the interaction. Small behaviors — not measurable skills — make all the difference.
In a study of groups of differing skill levels all trying to accomplish the same task, groups succeeded not because they were smarter or better, but because they were safer. The only valid correlation between performance and behavior is whether the group was safe and connected.1
We make groups feel safe through belonging cues. These are small behaviors that add up to the statement “You’re safe, you belong here”.
This has been demonstrated in other sources as well, including the famous study from Google.2
A very similar but different angle on this is that 202107291132 Trust is a requirement for higher-level cognitive functions. That angle shows that a minimal amount of this metric is a requirement for base function, whereas this shows that it can be generalized as a continuous correlation to performance.
-
Coyle, D. (2019). The culture code: The secrets of highly successful groups. Random House Business Books. ↩
-
Rozovsky, J. (2015, November 17). Project Aristotle. Re:Work. https://rework.withgoogle.com/print/guides/5721312655835136/ ↩
-
-
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.
- Find a source of information
- Create a #source note with solid citations (managed in Zotero) for taking notes while consuming the source.
- Create, link, and manage the Zettel and my Zettelkasten.
For more information on the why and how of using a Zettelkasten, see 202107272242 The Art of using a Zettelkasten.
Tags
- The #structure tag is used for structure notes. These are hubs of Zettel that are connected under some sort of idea. They help with discoverability and maintenance of the Zettelkasten as a whole.
- The #source tag is a single Zettel to organize the notes I take while working through some source material. Each Zettel that's a #source is also a #structure Zettel. For example, I take notes while reading a book in a Zettel that's named for the book's title and tag it with the #source tag. These notes aren't technically needed if we do a good job citing sources, but it's helpful during the initial reading and note taking for long-form content that requires multiple sessions.
-
Architecture Decision Records
2022-04-02 12:18
An Architecture Decision Record (ADR) is a document that captures a decision, including the context of how the decision was made and the consequences of adopting the decision.[^blake2020]
While the name implies that these would be used for mainly architecture level decisions, many people advocate for using them for nearly any decision, no matter how mundane.[^blake2020][^perkins2020] The purpose of recording as much as possible is to facilitate the 202110231449 Externalization of knowledge for software projects and product organizations. (202110231440 Knowledge is the backbone of a product organization)
ADRs are beneficial because they enable persistence and transfer of knowledge. They’re a great example of the 202110231445 The SECI model of organizational knowledge in action. They take 202110231457 Tacit knowledge and transform it into 202110231459 Explicit knowledge
ADRs can be used proactively to propose changes, or retroactively to record decisions that were already made.
My experience with ADRs has been split across two levels of use.
- Organization-wide — Valuable to an extent, but can be used poorly to push things that shouldn’t be approved under the guise of seeking wide consensus. The important thing for these to work are having good, competent coworkers and/or to have people who are not afraid to actively dissent in a widely public forum. They can be an invitation for people to engage in costly bike-shedding or an indispensable log of the collective mind of a group. Which side of this your group falls on is hard to tell and requires some radical candor to identify.
-
Willful ignorance of reality in organizations
2024-08-22 08:51
In organizations, there's a tendency for people at higher levels or in roles further removed from the "doing" of a project to be vague to the point of harm. Some (bad) managers want something done and want other people to deal with how that gets done or indeed whether or not it's even possible to do it.
[I]t boils down to a psychological distance from the fact that true reality exists, and that someone lower status has to handle it.[^suresh2024pain]
I see this frequently in the interactions between (bad) product managers and engineers. The PM has an idea or a requirement to build something that they don't inspect closely or take the time to understand the reality of that idea. They don't understand what it would take to build it, what it would feel like to use, or whether it's a good idea once faced with all the edge cases involved. The idea of doing all that work is either too challenging or demeaning to these bad actors and it ends up falling on the individual contributor who actually produces the work output to solve these problems.
I've alternatively called this "compression of reality" and "where the rubber meets the road" to show that engineers don't have the luxury to hand wave or be vague when writing code. They have to specify — in exacting detail! — how it all works.
-
Notes should be concept-oriented
2021-09-09 11:34
Each of our 202109091129 Evergreen notes should be written about a concept, not about a book, project, or event. This is the only way to ensure that we're able to discover connections across books, projects, events etc. (202109091131 Notes should surprise us) and that our notes will form a web of tightly linked concepts (202109091132 Notes should be densely linked).[^matuschak2017concept]
This also ensures our principle that 202209091130 Notes should be atomic. If we write a single note about a book, we may write more than one concept into that note. Now recollection and linking requires remembering the book and the fact that the concept was in that book, instead of just the concept. If we keep it concept oriented, 202109091133 Notes should associate organically and similar concepts from individual books will still coalesce.
Another benefit of keeping notes concept-oriented is that we can build on our previous work. 202109060836 Knowledge should accumulate, and by ensuring we're noting concepts, we can accumulate our learnings from one book on a concept with other learnings on that same concept. Contrast this to just taking notes per book. In that situation, we never realize the connection between two books talking about the same concept, or if we do, we don't fully investigate the depth and breadth of that relationship — we just remember that they covered similar topics and yet were slightly different. An even more extreme example is two very different books that are related only by one subtle point. Would we notice that point if we weren't keeping our notes concept-oriented?
-
Making a Rust Roguelike
Making a Game Out of Learning
2022-08-01 00:00
In the process of learning Rust, I'm following a great tutorial for building a roguelike game.
-
The Art of using a Zettelkasten
2021-07-27 22:42
Using a Zettelkasten is more of an art than a science. It's a personal relationship with an extension of your knowledge. Above all, it's important to just consistently work and think in this system to get the most out of it.
Personal preferences
- 202109091129 Evergreen notes
- 202107272238 When to write a new Zettel
- 202107292312 Project structure notes should answer a question
- 202107292136 The context of a link should give you a reason to follow it
- 202109091133 Notes should associate organically
- 202109091131 Notes should surprise us
- Use a reference manager. The references in the manager should only be ones that have been read and processed, ready to be cited in Zettel as I write them as the last step to processing a source. Don't clutter the reference manager with things I would like to read some day.
- Use a plain text editor and files. This makes everything much more cross-compatible and future proof.
Workflow
There are categories of things that I do regularly, and my Zettelkasten has a specific single place in a broader workflow. It's important to understand how we think and how the processes we use to do that thinking and synthesizing affect your ultimate knowledge (202109080847 As We May Think).
-
Lightning Talks
A Great Way to Teach and Learn
2018-05-15 00:00
Lightning talks are a great way to share knowledge in your organization. Here's how to get started and get everyone to love them.
-
My next level
2021-09-06 08:25
I'm 30, what do I want to do by the time I'm 40? 10 years is a long time, but will be here before I know it.
Some candidate ideas that have consumed mind-share before now:
- Continue down the tech leadership path
- Blaze an entrepreneurial trail of my own
- Research and create something completely new
- Write a book
- Are any of these what I want?
- What would it take for me to pick one and follow it relentlessly?
- Is there a way to do more than one in a meaningful way?
The first thing is 202205231130 Knowing when to leave.
- Leave
- Stay
After that our paths diverge:
- If I leave, where do I go, how do I decide, what would I want to work on, what areas would I want to grow in?
- If I stay, what do I want to work on, what areas do I want to grow in, what is my future, what goals do I have?
A note on open-ended work
For much of the ground-breaking work, the challenge lies even in figuring out what to do. Not just how to do it. Breaking things down and checking things off a list day in and day out isn't satisfying looking back on a year's time span or more. If things can be broken down that easily and checked off, it must not be all that interesting.
-
Revamping My Blog
A New Coat of Paint
2020-06-01 00:00
You may have noticed that the blog got a new look and feel recently. The changes weren't purely cosmetic though. Let's take a look at how I migrated from a Bootstrap and PHP based blog to React, Next.js, and Styled Components.
-
Reclaiming software systems
2021-09-25 11:02
Software systems are organic entities. They take on a life of their own over the passage of time under the pressure of external forces. They slowly transition from 202109251124 Golden age software to 202109251125 Post-apocalyptic software.[^larson2019reclaim]
How do we get from golden age software to post-apocalyptic then? At some point we find an elegant extension to the golden system. It's looked at as proof of the system's power and flexibility. But in reality, it's the beginning of the end. It causes the system to be harder to reason about, and eventually becomes impossible. It's better to build systems for the problems they solve and keep them running with simplicity.
Each company is allowed to rewrite exactly once, but afterwards you have to learn how to reclaim your software instead.[^larson2019reclaim]
One option is to rewrite the system. This is expensive, time consuming, and may actually cause problems by losing years worth of sweat and knowledge that's been put into the system.[^spolsky2000] The good news is that rewrites aren't inevitable here, and we can reclaim the system instead.
Reclaiming the system is the project of evolving beliefs into behaviors and properties (202109251100 Verify behaviors and assert properties). We start off by believing that something works like it does. This might be a specific property of "all the DB calls come from ActiveRecord" or something. We turn that belief into a behavior or property that can be tracked and verified or asserted.
-
Eisenhower matrix of task value
2021-06-24 15:31
The Eisenhower matrix is a tool that can be used to prioritize tasks based on its urgency and importance. It takes a leader's perspective and includes the concept of being able to delegate urgent, unimportant tasks. People who have no one to delegate will always have the option to 202106241530 Delegate to the floor, but won't have the ability to delegate tasks that must be done.
In this method, we define what is urgent or not and what is important or not. If something is urgent and important, we should do that first. This is followed by important but not urgent, urgent but not important, and lastly neither important nor urgent.
Ideally, we'd never personally do things that are outside the first, most important, quadrant. Those quadrants can be planned, delegated, and eliminated respectively. Note that planning to do something later will eventually promote the task to urgent and important: a.k.a. needing to be done by ourselves or someone else.
Delegating is more subtle because in a perfect world, you'd take something that's not important or urgent to you and delegate it to someone whose goals and interests align so that this task would be both important and urgent for them. The goal is not to delegate in order to pawn off bad tasks to others. Those sorts of things should be eliminated if possible. Delegating thus becomes an act of finding ways to empower people to pursue their goals and entrusting them with something that you also find at least in some way important or urgent.
-
Software Engineering
2021-09-06 13:38
Maybe this should be a structure note of structure notes only since this is a huge topic that I'd like to really dive deep on. There is also the 202206191300 Computer Science structure note that I’ve split out to dig in to the more technical, theoretical stuff in order to keep this one focused more on the practice of writing software and careers or organizations in this field.
Topics
Documentation
- Co-locate tech docs with the code
- C4 Modeling
Abstraction
- You aren't gonna need it (YAGNI)
- 202204031033 Abstractions and future-coding are actively harmful
- 202406282245 Locality of Behavior
- 202204262054 Prefer duplication over the wrong abstraction
- On the spectrum of abstraction[^lou2016]
- Open for extension closed for modification O in SOLID. Means you can add new behavior without modifying any existing code. Always green, always confident in lack of side effects.[^metz2013]
Measurement
- 202304231046 List of SDLC metrics
- 202204272219 The fastest code is no code
- 202109251100 Verify behaviors and assert properties
- Thought experiment. Coding as function, what do the derivative and integral represent? Related to 202107291950 Optimizing requirements and implementations and 202110111901 Run to change ratio of a program.
-
Prototype, Expand, Consolidate
2021-08-26 13:02
An efficient, sustainable engineering loop can be describe through the motto prototype, expand, consolidate.[^foote1994] This loop consists of three eponymous phases. This has also been referred to as the Fractal Model of software development lifecycles.
Phases
Prototype
Our primary objectives during the prototyping phase are learning about the problem space and fitting a solution to that. We pick specific portions of the problem space to stake our understanding to and just start building something.
We deliberately don't spend time trying to build perfect understanding and systems during this phase. Doing so is a waste of time because we're inevitably blind to the realities at the end location without walking the path first.
Expand
Our next objective is to expand. Similar to prototyping, we expand our understanding of the problem space and the robustness of our solution. This is the phase where nuance comes in. People find themselves saying "I didn't know that worked like that" or "I didn't know it needed to be able to do that" which causes us to expand our knowledge and systems to incorporate new ideas and functions.
There's another optional objective in this phase though.
-
Prototype Expand Consolidate
A Method for Building Maintainable Systems
2021-09-01 00:00
Today we look at an efficient, sustainable engineering loop — prototype, expand, consolidate.
-
Leadership
2021-04-29 15:23
- 202203231646 Affecting long-term change
- 202203241152 Ask for more from your people
- 202110181203 Be clear about expectations
- 202109072035 Closing calls
- 202110181158 Coaching underperformers
- 202109090909 Decision paralysis
- 202203241428 Do more with less
- 202110181231 Don't tacitly endorse bad behaviors
- 202104292040 Eat the losses
- 202104291524 Execution is the priority of team management
- 202205021956 Feedback is for changing behavior
- 202407010952 Freedom and Responsibility
- 202208211358 Hawthorne effect
- 202110181205 Invest discretionary time in top performers
- 202411302328 Intrinsic vs extrinsic motivation
- 202104291527 Live in the ambiguity
- 202104291528 Leaders have to accept a slower feedback loop
- 202106241548 Leaders work to remove obstacles
- 202203231647 Leading from vision
- 202104291526 Make the hard decisions
- 202108191029 Measure what you do
- 202209182013 Normalization of deviance
- 202205031247 OODA loop of action
- 202206171206 Delivery Performance vs Value Delivery
- 202110052025 The quality of your decisions is the currency of leadership
- 202110220845 Remote team management
-
2019 Work Reads
A Slew of Short Book Reviews
2020-07-01 00:00
My professional reads from last year, rated and reviewed.
-
Piping Code With GitLab CI
A Simple Way to Make Your Life Easier
2018-09-01 00:00
I finally got around to adding continuous integration pipelines to my personal projects.
-
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 days per year and .
We have weekdays per year and weeks per year.
Using this and the rate of 8 work hours per weekday our total work hours per years and weeks are
work hours per year and (unsurprisingly)
-
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.
-
The Pragmatic Programmer
2023-07-24 10:42
Preface to the Second Edition
- 202308141544 Make the future less painful
- 202308281423 Ship of Theseus
- What makes a pragmatic programmer?
- 202308271610 Quarry workers' creed
Chapter 1 - A Pragmatic Philosophy
- 202308282340 No broken windows
- 202312091400 Be the exemplar of change
- 202312091413 Know what's good enough
- Think critically
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)
-
Computer Science
2022-06-19 13:00
The nitty-gritty of computation and technology. Contrasted with 202109061338 Software Engineering which is more about the practice of writing software and careers or organizations in that field.
Curriculum
- 202208101944 Zero to engineer
- 202206282018 Curriculum design for software engineering
- Maybe start here?: MIT OpenCourseWare for Computer Science
- Maybe I should make this yet another structure note that lays out the whole process and what order and how things are connected? Probably just start doing that in this note and maybe split it out later.
Programming Languages
- 202107272307 Data-first pipe design
- 202107272306 Data-last pipe design
- Go kind of sucks?
- 202405170938 Pratt parsing
Asynchronous computing
- 202111091028 Task scheduling is a fuzzy process
- 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++)
-
CodeMash 2020 - Live
An Informal Report on a Conference
2020-01-08 00:00
Live blogging from CodeMash 2020
-
Shades of Self
A Look at Who We Are
2018-05-01 00:00
A rambling, philosophical look at how we exist as distinctly separate individuals in different situations.
-
What React and Kubernetes Teach Us About Resilient Code
A Similarity Among Widely Different Tech
2019-11-15 00:00
A brief intro to control theory and declarative programming