TechWorkRamblings

by Mike Kalvas

Results: 30

  • Building Evolutionary Architectures

    2026-05-28 16:10

    #new #source #wip #thread

    An evolutionary software architecture supports guided, incremental change across multiple dimensions. There is a strong preference throughout the book for microservices or service-oriented architectures because of their decoupled and evolvable natures.

    Part I — Mechanics

    The mechanics of an evolutionary architecture concern the engineering practices and verification that allow an architecture to evolve.[^ford2023] This is the nuts and bolts of actually evolving the system.

    Chapter 1 — Evolving Software Architecture

    • Evolving architecture is hard. Were trying to hit the constantly moving target (what our business requires as it changes and grows) while standing on shifting sands (the state of the art in software development and technology).
    • 202205031449 Optimize for change.
    • Make incremental changes via architecture and deployment.
    • Protect your architectural dimensions with fitness functions.

    Chapter 2 — Fitness Functions

    Continue reading

  • No Straight Road Takes You There

    2026-05-17 11:20

    #wip #source #thread #new

    Essays for Uneven Terrain

    #source #new

    A collection of essays from Rebecca Solnit about 202203231646 Affecting long-term change and hope for the future.

    In Praise of the Indirect, the Unpredictable, the Immeasurable

    I’ve become a love of slowness, patience, endurance, and long-term vision, because these things seem like crucial equipment for changing the world or even understanding it. (pp. 2)[^solnit2025]

    as the poet Antonio Machado famously said “Walker, there is no path; the path is made by walking.” (pp. 6)[^solnit2025]

    A Truce with the Trees

    • Beautiful telling of the artistry of violin making and the global nature plus harmony of renewable craft, contrasted with the permanent harm we’re doing to it, the breaking of the truce.

    A Sky Full of Forests

    • We must tell stories: of how we got here, how things used to be, and how they could be, of how they should be. We must pour water on the fires and provide rafts in the flood. We must change minds and hearts. We must envision a humanity as it should be. (pp. 23)[^solnit2025]

    On Letting Go of Certainty in a Story That Never Ends

    When it comes to real life, this state of unknowing is both normal and so wildly uncomfortable that we engage in foolish and delusional imitations of knowing. (pp. 29) [^solnit2025]

    Continue reading

  • A Philosophy of Software Design

    2026-02-02 17:47

    #source #wip #new

    Writing software is the practice of problem decomposition. This book is about strategies to achieve that goal while reducing complexity.[^ousterhout2021] If a design pattern or strategy doesn't actually reduce complexity, simply don't use it, but a great deal of thought and experience has gone into this book so think carefully before passing judgement.

    Chapter 1: Introduction (It's All About Complexity)

    • Simpler designs allow us to build larger and more powerful systems before complexity becomes overwhelming. (pp. 1)
    • The first approach to fighting complexity is to eliminate it by making code simpler and more obvious. (pp. 2)
    • The second approach to fighting complexity is to encapsulate it so programmers can work on the system without being exposed to all its complexity at once. (pp. 2)
    • Software developers should always be thinking about design and reducing complexity is the most important aspect of design; therefore, software engineers should always be thinking about complexity. (pp. 3)

    Chapter 2: The Nature of Complexity

    • The ability to recognize complexity is a crucial design skill. (pp. 5)
    • It's easier to be able to tell if a design is simple than it is to create a simple design. (pp. 5)

    Continue reading

  • Domain Driven Design

    2025-11-12 08:46

    #new #source #wip

    Eric Evans's seminal book about domain driven design in 202109061338 Software Engineering. Also referred to as The Blue Book among DDD aficionados.

    todo: 202606170951 Bounded Context

    Part 1 - Putting the Domain Model to Work

    Chapter 1: Crunching Knowledge

    Chapter 2: Communication and the Use of Language

    Chapter 3: Binding Model and Implementation


    1. Evans, E. (2003). Domain-driven design: Tackling complexity in the heart of software. Addison-Wesley.

  • Systems Software in the Large

    2025-10-03 09:47

    #source

    Big ambitious projects — in particular ones that are hard to make incremental progress on — always feel "a year away" because it is easy to make decisions in the day-to-day that don't make progress.

    So how do we keep focus, prioritize (and critically deprioritize) work, and sequence the work?[^pacheco2025]

    One enemy: "organizational procrastination"

    • Next step is not clear and there are lots of other important problems that are clearly valuable to solve. So we don't do the small increment for the big thing that isn't as clearly valuable and choose to do the valuable other thing that doesn't move us toward the long term goal.
    • How to avoid letting dozens of small, well-understood problems starve work on the big, hard problems.
    • This is a balance. Being responsive to changing priorities is important too.

    Losing focus

    • We get stuck on technical things
    • We don't know what the next step is
    • We run across other important problems (or they're thrust upon us. e.g., customer issues)

    Maintaining focus

    Daily optional water cooler (not meeting)

    • Low-pressure way to surface issues that are keeping people stuck
    • Goal is to feel more like working next to people
    • It's not where we make big decisions

    Continue reading

  • The DevOps Handbook

    How to create world-class agility, reliability, & security in technology organizations

    2025-09-23 17:08

    #wip #source

    Cross-functional teams rigorously test their hypotheses of which features will most delight users and advance organizational goals. They care not just about implementing user features, but also about actively ensuring their work flows smoothly and frequently through the entire value stream without causing chaos and disruption to any internal or external customer. [...] This allows organizations to maximize developer productivity, enable organizational learning, create high employee satisfaction, and win in the marketplace. These are the outcomes that result from DevOps.[^kim2021]

    Part I: The Three Ways

    Chapter 1: Agile, Continuous Delivery, and the Three Ways

    Note: #wip reading this book has been put on hold temporarily since joining a different engineering book club reading through the two DDD books.

    Continue reading

  • Programming as Theory Building

    2025-01-30 17:05

    #wip #source #new

    Programming as Theory Building by Peter Naur is an amazing, thoughtful, penetrating understanding and description of the act of programming. It suggests that the act of programming is an act of theory building. This contradicts with the common view of programming as industrial production (e.g. queues, assembly lines, lean, scrum etc.)

    [P]rogramming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand. This suggestion is in contrast to the what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts.1

    • quality is related to understanding 393
    • theory as technical term (what is a "theory") 395, 396 w/ links to Bloom's taxonomies.
    • intellectual activity vs intelligent behavior 396 (maybe)

    1. Naur, P. (1985). Programming as theory building. Microprocessing and Microprogramming, 15(5), 253–261. https://doi.org/10.1016/0165-6074(85)90032-8

  • The Private Library

    Being a More or Less Compendious Disquisition on The History of the Architecture and Furnishing of the Domestic Bookroom

    2024-07-28 12:42

    #wip #source #new

    The Private Library is the domestic bookroom: that quiet, book-wrapt space that guarantees its owner that there is at least one place in the world where it is possible to be happy. The history of its architecture and furnishing extends back almost to the beginning of history and forward toward a future that is in equal parts amazing and alarming.

    All libraries are magical rooms. All their windows look out onto Faërie, and all their carpets can fly. […] Entering our library should feel like easing into a hot tub, strolling into a magic store, emerging into the orchestra pit, or entering a chamber of curiosities, the club, the circus, our cabin on an outbound yacht, the house an old friend. It is a setting forth and a coming back to center. [^byers2021] (pp. 1, 3)

    A visitor standing before this instantiation of language must have felt the true, right sense of the numinous.[^byers2021] (pp. 14)

    A private library is a place for rest and relaxation, but also contemplation and thought. It is a place for the individual to find respite and transport oneself to new worlds. In its purest form, a library is only a library if that is its sole purpose. A study or an office can have many of the qualities of a private library but it may not truly be one if it can’t provide the enveloping nature of a pure library.

    Continue reading

  • 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 (202204272308 Modules should be highly cohesive), loosely coupled (202204272309 Modules should be 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 very 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

  • The Myth of Sisyphus

    2024-06-13 17:15

    #source #wip #new #structure

    The fundamental subject of The Myth of Sisyphus is this: it is legitimate and necessary to wonder whether life has a meaning; therefore it is legitimate to meet the problem of suicide face to face. The answer, underlying and appearing through the paradoxes which cover it, is this: even one does not believe in God, suicide is not legitimate. Written fifteen years ago, in 1940, amid the French and European disaster, this book declares that even within the limits of nihilism it is possible to find the means to proceed beyond nihilism.

    – Albert Camus, Paris, March 19551

    One must imagine Sisyphus happy.1 (pp. 123)


    1. Camus, Albert, and Justin O’Brien. The Myth of Sisyphus. Second Vintage international edition. New York: Vintage International : Vintage Books, a division of Penguin Random House LLC, 2018. 2

  • Joe the Axolotl, Clever Closet, & Demonic Robots

    2024-05-03 15:30

    #source

    • Anyone can start a girls who code club and if you have enough people sign up, you can get free resources like lessons, notebooks etc.
    • Dept of Ed standards alignment
    • 7x more likely to go into STEM than national avg
    • She led the Otterbein one, it does something a little different than the provided web lessons
    • Build things “clever closet” and others (had never seen clueless so they thought it was original which is cool)
    • Pololu 3 Pi Robots pre-built 4 AAA batteries, hokey pokey robot, Rube Goldberg machines, etc
    • LEGO Robots now, loved those
    • Game dev

    gwcotterbein@gmail.com afholcomb72@gmail.com @gwcotterbein insta


  • Minimum Viable Replacement

    2024-05-03 14:00

    #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

  • Understanding How Your CPU Thinks

    2024-05-03 11:00

    #source

    • Two most important skills for a developer
      • Break problems into smaller problems
      • Communication (with people and with the computer)
    • Talked about pipelining
      • increases µops throughput
      • think about doing multiple loads of laundry in washer and dryer
      • f# nice
      • this point was a little off from my understanding of schedulers and the term "pipelining" specifically.
    • Caches and different memory locations: registers, L1, L2, L3, RAM, DISK etc.
    • Don't use 0V–1.3V and 3.7V-6.3V anymore for memory and heat efficiency. They've shrunk those voltages and tolerances.
    • Got into machine code and micro-ops for assembly
      • Importantly, the op and params and everything are all encoded.
      • This is why ARM ops have variable bit sized parameters. They're all encoded into 32 bit instructions, so the specifics of the encoded instructions/params might change the available bits for parameter store.
    • Showed the circuit for a 4 bit adder, arbitrarily chainable for higher bits, 32/64.
      • youtube videos:
        • domino computing by standupmaths
        • water computer steve mould
      • how to do multiplication
        • f# "Freestylecoding.Math" bit math lib
        • interesting idea of returning division with remainder as tuple with /% operator

    Continue reading

  • Stir Trek 2024

    2024-04-30 10:34

    #source #structure

    Selected Sessions

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

    Continue reading

  • The Software Craftsman

    2023-12-09 13:23

    #structure #source #new #wip

    Chapter 2 - Agile

    Chapter 3 - Software Craftsmanship


  • The Pragmatic Programmer

    2023-07-24 10:42

    #new #structure #source #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

  • System design

    2022-08-13 13:27

    #source

    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

  • Category Theory in Life

    2022-07-18 19:46

    #wip #source #new

    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

  • Curriculum design for software engineering

    2022-06-28 20:18

    #source #wip #new #thread

    I want to teach computer science, what should I do?

    vs

    I want to make software, what should I do?

    Need to ask questions about the desired solution to figure out things like goals, constraints, and methods before you can build that solution. In the education case, the “solution” is the curriculum.

    Ask things like:

    • What age are the students?
    • What exposure have they had before?
    • Is this required? An elective? An extracurricular?
    • How long is the class? How often does it meet?
    • Is it even a class or something else?
    • How many students are in the room?

    etc. but also think about things like

    • Is there internet access?
    • Is the teacher new to programming?
    • Can the students type?
    • Are there students with disabilities?
    • Do the students have regular computer access at home?
    • Do the students have regular computer access at school?

    Think about

    • Equity, Rigor, and Scale

    Methods

    1. Required courses
    • Don’t scale though, need certifications for teacher. The economy for experts means that they’ll go to Jane Street and learn a huge amount more than public HS
    • Rigor has to take a hit because everyone has to pass the course to graduate
    1. Elective courses
    • Not equitable. Hugely biased (currently) to white and asian males, failures and achievement gap #thread lead to further disparity.

    Continue reading

  • Types, and why you should care

    2022-06-28 14:49

    #source #wip #new

    From a talk[^minsky2019] by Yaron Minsky of Jane Street.

    Typed vs. Untyped

    • Untyped — scripting, lightweight, friendly, and slow.
    • Typed — Serious, professional, unfriendly, verbose, and fast.

    Some definitions

    • Values — data, things
    • Variables — can be different values, part of the lexical portion of the language
    • Expression — composed out of variables, values, and other things
    • Types — categorization system for values; groups values into named groups; strings, integers etc.
    • In untyped language, values have types
    • In typed languages, values, variables, and expressions all have types. (For instance, variable is typed when it always contains a variable of that type)

    Why types?

    • Make programs faster, typically through compilation/interpretation loop having “hints” and more information.
      • V8 for instance can be super fast, within a factor of 3 or so from a compiled language (but this is through herculean effort of thousands of people over tens of years and complicated things like tracing compilers and things)
      • This is predictable performance vs V8
    • Make programs more understandable

    So why don’t people always use them?

    • Often make programs more verbose — when the language doesn’t have a convenient way to express something, it’s difficult to express it at all or in a good way

    Continue reading

  • The solitude of leadership

    2021-12-20 13:17

    #source #structure #thread

    People think leaders are individuals with others looking to them for direction. People think solitude is something like Thoreau, alone at Walden Pond. What could solitude have to do with leadership?

    Leadership is the qualities of character and mind that will make you fit to command a platoon or a company, a battalion or a corporation, a foundation, a department, a government.

    Solitude is the ability to be alone with your thoughts.

    Solitude is therefore one of the most important necessities of true leadership.

    On the mistaken idea of making it to the top means you're a leader

    Many people can be energetic, accomplished, smart, or ferociously ambitious, but is that enough to make them leaders? No. These types of things are encouraged and developed in our generation of world-class hoop jumpers — they're "excellent sheep". Many institutions that talk about leadership are really talking about this. They're talking about educating people to make big names for themselves with impressive titles that they can brag about. They're talking about training people to climb the greasy pole of whatever hierarchy they decide to attach themselves to. But this idea is wrong and dangerous.

    Continue reading

  • Remote team management

    2021-10-22 08:45

    #source #structure

    This structure note records my learnings from taking the Coursera How to Manage a Remote Team course.[^murph2020] These notes come from a time before my Zettelkasten and are longer, more verbose, and less atomic than I'd normally like, but I'm just going to leave them as they are. That way, I can link to them and search for their contents without investing the time in breaking them down more.

    Managing a team of remote workers presents unique challenges and opportunities:

    Communication is Crucial

    Embracing Asynchronous Communication

    In a world dictated by calendars and schedules, people are conditioned to operate in synchronicity — meaning that they inhabit the same physical or virtual space at the same time. Asynchronous communication is the art of communicating and moving projects forward without the need for collaborators or stakeholders to be available at the same time your message is sent.

    In an all-remote setting, mastering asynchronous workflows is vital to avoiding dysfunction and increasing efficiency. The benefits include enabling your team to work effectively across time zones, reducing meetings, and enabling team members to work on a flexible schedule — all of which raise morale and productivity. However, shifting to this way of working requires a lot of large and small adjustments.

    Continue reading

  • As We May Think

    2021-09-08 08:47

    #thread #structure #source #wip #new

    A seminal essay on machine augmented thinking written by Vannevar Bush in 1945.[^bush1945]

    He urges that men of science should turn to the massive task of making more accessibly our bewildering store of knowledge. For years inventions have extended man's physical powers rather than the powers of his mind. [These inventions] are new results, but not the end results, of modern science. Instruments are at hand which will give man access to and command over the inherited knowledge of the ages. The perfection of these pacific instruments should be the first objective of our scientists as they emerge from their war work. Like Emerson's famous address of 1837 on The American Scholar this paper calls for a new relationship between thinking man and the sum of our knowledge.

    Consider a future device [...] in which an individual stores all his books, records, and communications, and which is mechanized so that it may be consulted with exceeding speed and flexibility. It is an enlarged intimate supplement to his memory.

    Knowledge evolves and endures throughout the life of a race rather than that of an individual

    Publication of research has been extended far beyond our present (1945) ability to make real use of the record.

    Continue reading

  • Seven habits of highly effective people

    2021-06-22 17:13

    #structure #source

    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

  • The Entry Point

    2021-04-29 15:22

    #structure #source #wip #thread #new

    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