Worknotes: November 13, 2022

Let’s go!


This past week was GitHub Universe. Local SF Hubbers were invited to volunteer and I did: I worked the info booth and the swag shop. It was nice meeting lots of other local Hubbers that don’t regularly frequent the office.

Performance Review Season

It’s here again. As a manager, I have a template for how I like to receive self-reflections that I’ve been dragging around with me for the past 15 (?!) years.

  1. Laundry list all of your projects, contributions, and accomplishments during the time period [if this seems difficult, have some sympathy for your manager]
  2. What future growth areas (lined up in phrases from the Career Ladder) would you like to focus on developing?
  3. What specific project/work opportunities exist (or you’d like to create) that would help you develop the growth areas you described in the previous question? (or you would really, really want to work on).

And then it’s a matter of trying to shoe-horn those questions into the invariably slightly different organizational template. I wrote up a big document for my reports.

Here’s what I drafted for myself on the opportunities question:

Improve predictability of team output. I would like to better develop a proactive ability to predict team output. Two focuses:

  • Tactical Planning: Improving my short/medium-term project management skills to improve how work is defined, broken down, and scheduled with target dates.
  • Strategic Planning: Planning and championing high-impact projects that would be engaging for both the team and engineering leadership.

The end result of this, in addition to expanding impact, is growing the Ruby Architecture team and ensuring there is sufficient capacity (and buffers) for our core Areas of Responsibility.

Further develop “out”-ward communication. Improve my ability to brief and influence across teams and leadership at GitHub. Particularly focused on reinforcing the position and importance of Ruby and Rails within GitHub.

What is “Platform”

In my new department, UI & Monolith Platform, all of my sibling teams are platform, but look very different. We’ve been working on a document to share with the rest of the Engineering team about what we would say we do here. As part of that, I’ve been thinking about Maturity Models as an explanation for why our teams look so different. Some teams are early, where they’re still focused on adoption and “fit”, and other teams, like mine, that are so mature that I think our internal consumers are not always fully aware that they’re using the platform we’ve built with huge intention.

A universal playbook

The past week at Universe, continually responding to the question “oh, what do you do?”, has helped me reflect on what I’m working towards. And realizing it feels like the same playbook I’ve run at other jobs. Lots more to it than this, but man, write your end-to-end tests people.

Productive Struggle

From Logic #17, in “The Edtech Gold Rush” by Kevin Miller (emphasis mine):

One of the companies, Imagine Learning, distinguished itself by claiming that, on their platform, students could demonstrate their knowledge of English language and literature by “com-posing a rap song or creating a TikTok.” Some students seemed intrigued. Others groaned over their laptops. Yet another edtech firm was promising to uplift marginalized students by filling the classroom with the kind of entertainment media they consumed at home.

Such products can make educational content more accessible, especially at home, but they cannot actually address academic shortcomings any more than pen and paper. This is because learning happens through what educators call “productive struggle,” not merely the consumption of educational content. Productive struggle is the profession’s term for problem-solving at a level that is difficult for a student, but possible with effort and limited assistance. Educators refer to this magical window of learning as the “zone of proximal development.” Any education technology that is able to employ entertainment to transcend the difficulty inherent in learning ceases to be educational.

But even if such a technology is able to elicit productive struggle among students, it still runs up against a deeper challenge: pov-erty. The real reason that students have difficulty in the classroom is not due to the lack of thoughtful UX design, but because the trauma and instability wrought by the material circumstances of their home and community make engaging in productive struggle difficult. This does not mean that edtech products are useless. But they are not able to address the core cause of educational inequality any more than traditional instruction.

The recent growth in school funding from Covid relief measures gives educators a long-overdue opportunity to confront the material roots of educational inequality. But this influx of public money also represents a potential payday for a fast-growing edtech sector. The edtech market in the US is expected to grow to about $60 billion by 2026, according to an estimate from Global Industry Analysts, more than doubling its 2021 valuation and drastically outpacing the growth of the education sector as a whole. At a moment when governments are committing real resources to public education, companies touting disruptive digital approaches see a gold rush. They plan to win lucrative contracts by promising to solve a problem they can’t possibly solve.

Worknotes - October 23, 2022

  • During my absence, my team was reorganized and I moved under a new director and from developer experience to the product development organization. It’s been exciting (new people, new relationships, new opportunities) and also tiring (new people, new relationships, new opportunities). My team was an odd duck in the old structure, and less-so but still odd in the new structure. My verdict is out if that’s an improvement. I think it can be sometimes be easier to stick out hugely instead of subtly: it’s called whackamole, not whackagiraffe.
  • My team, Ruby Architecture, moved from “Build & Test” within DX, to “UI and Monolith Platform” within Core Productivity. In my old group I was figuring out collaborations with the testing and CI platform. With the new group, we’re figuring out how to better explain “platforms” ourselves. I see a lot of “Shifting Left” in my future and I’m here for it.
  • “A feeling you don’t act upon isn’t real.” I’ve picked up this quote from nearly every Kim Stanley Robinson novel I’ve read. I shared it with a few of my reports this week; I’ve been (gently, I hope!) pushing people to share feedback more actively outside the team.
  • “It’s ok to be mad, it’s not ok to be mean”. Angelina and I had dinner this week with family friends who have a 10-year old and they’ve been a resource during our foster parenting journey. This phrase came up and I have been thinking about this as a better alternative to “Assume good intent.” I’m a big fan of Non-Violent Communication and it fits right in there.
  • Performance Review Season is kicking off again. I’m eligible. It feels like no time has passed but this week is my 6 month anniversary at GitHub! It’s still fun.
  • With my leadership coach, we’ve been talking about Moral Mazes, which led to Meditations on Moloch. The overall theme, and I’ve now been working with the coach for three (!) years is (my words): taking action authentically. And then exploring different shapes of that. Ikigai.

Impenetrable legal language

From the paper “What did I sign? A study of the impenetrability of legalese in contracts” via Assaf Arkin’s Labnotes.

The description of “Center-embedded clauses” was particularly interesting to me in regards to plain language.

Each legalese text was drafted to contain the following language properties that have been identified as difficult to process and common to legal texts:

(a) Low-frequency legal terms – Words that are infrequently used in everyday speech provide processing difficulties for readers relative to higher-frequency synonyms (Marks, Doctorow, & Wittrock, 1974). Legal texts are laden with “archaic words” such as aforesaid, herein, and to wit (P. Tiersma, 2008), which have been shown to be frequently misunderstood by laypeople (e.g. P. M. Tiersma, 1993). Each legalese text was constructed to contain several instances of legal jargon, which were replaced with high-frequency synonyms in the plain-English versions.

(b) Center-embedded clauses – Center-embedded structures have long been observed to pose processing difficulties on a reader (Miller & Chomsky, 1963; Gibson, 1998; Pinker, 2003). The tendency for lawyers to “embed” legal jargon “in convoluted syntax” has been observed not only to be prevalent in legal texts but as a potential badge of honor for those who wish to “talk like a lawyer” and be accepted by their profession (P. Tiersma, 2008). Each legalese text was constructed to contain multiple center-embedded clauses (“Artist and Tour, said parties being hereinafter referred as…”), which were written as separate sentences in the corresponding plain-English version.

(c) Passive-voice structures – Relative to their active-voice counterparts, passive-voice structures are acquired later by children (Baldie, 1976), and may continue to pose difficulties for adults (Ferreira, 2003). Gozdz-Roszkowski (2011) found passive structures to be more prevalent in contracts relative to other legal and non-legal genres (such as newspapers). Our legalese texts each contained multiple passive-voice structures (“This agreement has been formed by the parties”), which we converted into active-voice structures in the corresponding plain-English versions.

(d) Capitalization – Non-standard capitalization is ubiquitous in provisions such as warranty disclaimers and limitations of liability, which “must be conspicuous” in order to be legally upheld (American Law Institute and National Conference of Commissioners on Uniform State Laws, 2002). Arbel and Toler (2020) found that most standard form agreements used by major companies contain a provision in all-caps. Although the use of all-caps provisions is ostensibly for the benefit of the reader, evidence suggests that they do not aid comprehension (Arbel & Toler, 2020). Here we included at least one chunk of all-capitalized text in each legalese passage (“THE WARRANTY IS HEREBY DISCLAIMED”), which was replaced with standard capitalization in the simple version.

From the set of legalese materials, each passage was encoded in terms of legally relevant propositions. From these propositions, each passage was then translated into a “plain-English” version, which differed only with respect to the four surface properties described above, resulting in 24 total passages.

For each contract pair, 12-15 comprehension questions were drafted. The questions were multiple choice with four options. These questions both targeted comprehension of specific important legal propositions, as well as more general understanding of the legal content. To reduce a response bias for a given register, we controlled the overlap in form between contract excerpt and comprehension question. Both types of comprehension question were drafted in a “neutral” register. Passive/active structures were replaced by nominalizations. For example, “shipment of the goods on the part of merchant” instead of “the goods were shipped by merchant” or “merchant shipped the goods”). High or low frequency synonyms were replaced with a third synonym (e.g. “renter” instead of “lessee” or “tenant”).

Persian Tahchin-inspired crispy chicken rice


This is a Milk Street recipe, but because I detest their instructional design, I redesigned it here. I like this dish because:

  • It can be made with ingredients from Trader Joe’s.
  • It has currants.
  • Crispy, buttery starch is great.
  • It’s resilient; the second time I made it with indirect heat on a propane bbq grill because my oven was on the fritz. Still great. Also I’ve tried brown basmati rice, tried doubling the eggs, tripled the garlic, I’m not measuring the butter and currents. Still great.


  • 1.5 cups basmati rice
  • 1/4 teaspoon saffron threads
  • 2 tablespoons boiling water
  • 12 ounces boneless skinless chicken thighs. I think this would also work with seitan or tempeh just mix a bit more oil in.
  • 1 lemon, for juice and zest
  • 2 garlic cloves
  • 0.5 cups whole milk greek yogurt
  • 1 large egg (yolk only)
  • 3 tablespoons dried currants
  • 2 tablespoons salted butter, melted
  • Parsley, to garnish
  • Roasted Pistachios, to garnish
  • Olive oil
  • Salt and pepper

A pie plate. Milk Street spends a paragraph saying why glass is best (you can see the browning), but I’ve been doing ceramic and it’s fine.

30 minutes to 12 hours ahead

Soak the rice. Place the rice in a bowl with enough water to cover by 1 inch and let rest at room temperature for at least 30 minutes or up to 12 hours. Drain and rinse the rice again.

To begin

  • Place the oven rack at lowest position and preheat the oven to 400 degrees
  • Prepare a large pot of salted boiling water to cook the rice.
  • Thoroughly oil your pie plate.

Prep the ingredients

  • Melt the butter and set aside.
  • Crumble the saffron threads and soak the saffron in 2 tablespoons of boiling water in a small bowl. Set aside.
  • Zest the lemon resulting in about 3 teaspoons of lemon zest, to be divided between the chicken and the yogurt sauce. Put the rest of the lemon aside to be wedged later.
  • Grate the garlic.
  • Trim the chicken thighs into 1 to 1.5 inch pieces and in a medium bowl combine the chicken with 1 tbsp of oil, 1 teaspoon lemon zest, and garlic Salt and pepper it.
  • Separate the egg yolk (discard the white) and mix the yogurt, egg yolk, remaining 2 teaspoons of lemon zest, and saffron water in a bowl large enough to eventually hold the rice too. Salt and pepper it. Whisk to combine well.


  • Add the rice to the pot of salted boiling water and cook for 5 minutes until par-boiled; the rice will still be slightly crunchy. Drain the rice.
  • Mix the par-boiled rice with the yogurt mixture and stir to combine.
  • Add about 1/3 of the rice mixture to the bottom of the pie plate, pressing it into an even layer on the bottom and halfway up the sides.
  • Mix the currants and the yogurt-chicken mixture into the remaining rice and yogurt mixture and then transfer the mixture to the pie dish. Do not compact or press the rice, but do distribute it evenly.
  • Drizzle the melted butter over the rice mixture.
  • Tightly cover the pie dish with foil and bake for 1 hour covered.

While it bakes, clean up and prepare

  • Chop the parsley and reserve for serving.
  • Chop the pistachios and reserve for serving.
  • Slice the lemon into wedges for personal squeezing.

After baking for 1 hour

  • Remove the foil and then uncovered, bake for an additional 10 minutes until the bottom is golden brown.
  • Remove from the oven and rest for about 5 minutes.
  • Run a knife or spatula around the edge to loosen the rice from the pie plate, then invert onto a serving plate.
  • Sprinkle with the parsley and pistachios and serve with the lemon wedges on the side.

Weeknotes: September 19, 2022

  • My mom, Susan, Sue, passed away at her home last Tuesday morning. Her wishes were that people recognize her life through donations to the Santa Barbara Food Bank and Save the Children. My brother and I are figuring out everything else; email me at [email protected] if you’d like to stay updated.
  • Having spent the last 5 weeks with my mom, her doctors’ ongoing prognoses that she “has days” was incorrect for quite a while until it wasn’t. We got to the zoo and the Botanic Gardens together. I enjoyed flustering the hospice nurse over the phone by passing along their questions directly, like “hey mom, how are your bowels?” and the nurse’s response of “oh, oh, I didn’t realize she was awake”. To her doctor’s surprise the day before she passed, what would be my mom’s last meal: taquitos.
  • I learned the stories behind all the butts in my mom’s nude paintings. And that, though my mom wouldn’t have the opportunity to exercise it, California has an End of Life Option.
  • I’m grateful for my family, friends, and colleagues who have been gracious and supportive. Both to those I’ve told, and those who are yet to find out. Thank you.
  • I wrote this biography as part of a family history for Mr. Harris’s 10th grade humanities class in 1999 (“fabulous photos, good layout! A”)

    Born in 1947 (though when interviewed maintained it was 1964), and grew up in the era of McCarthyism, bomb shelters, Elvis, Sputnik, Rock and Roll, and the Beatles. That got her through high school. Then she finished the sixties with a bachelors in painting from California College of the Arts and her masters in Library Science at UC Berkeley. Her first library job was in charge of the Art and Architecture collection at San Jose State. She met my father in Library school and got married in 1971. She quit her job to get married and moved to Alaska where she was in charge of the largest medical library in State of Alaska. She did that for two years and then they moved to Ithaca New York, where she was a library outreach consultant for a five county public library system. At the end of that period she had my brother, and moved to California. I was born four years after, and later she became very active in the Friends of the Poway Library, working on getting a new library in Poway. After divorcing she drew on her experiences as a volunteer and paid substitute in school libraries and decided to become a school librarian which necessitated getting both a teaching credential and a library media teachers credential, which she will finish next year.


Reflections on Brompt, 2022

In response to a r/advancedentrepreneur thread, I wrote up some reflections on Brompt in response to “How well did this project do?”:

Not well. I dunno how much help this is, but my thoughts about the experience are:

People who are already inconsistently posting likely aren’t searching for a solution. It would be better to target overachievers who want to get to the next level, than lift up underachievers to just ok. Nagging people doesn’t work on it’s own.

I think “post daily/regularly” isn’t much of a goal. I think it would be better to tap into the actual outcome they want (“top influencer”, “alternative income stream”) and then help pave that path within your service, of which regularly posting is just one “goal” or step on the staircase.

I originally built Brompt back in the mid 2000s when it was a lot easier to attract early adopters. I never monetized it (it was a hobby project that I used in my portfolio to further my regular career). If I was doing it over again, I’d have never built it and probably would have focused on figuring out acquisition (e.g. spend a couple hundred bucks on Facebook ads; focus on a hands-on concierge service, figure out what it is at the intersection of what people are searching to do and are willing to pay for).

Also, the space is incredibly saturated and it’s tough to get visibility. I’ve used Crowdfire before (i found it extremely difficult to use). Also done a lot with Priceonomics model. And there are some other Twitter tools that I wanted to highlight for you… but I literally can’t remember their name and have spent a good 30 minutes trying to Google and can’t find them. So like, that’s not a good environment to build in.

Edit: it was

Weeknotes: Aug 29, 2022

  • My mom entered hospice this past weekend. Medicare’s hospice benefits are pretty great, given the circumstances; American healthcare gets progressively better til you die. My mom has a story of her mom, in the 1990s, unsuccesfully convincing my mom of the benefits of single-payer healthcare. My mom says it took until herself going on Medicare to understand. With hospice, you call your caseworker and say “Can the nurse please bring over some blue chux next time?” and that’s all.
  • Angelina and I had originally planned to attend a big family trip to Germany and Amsterdam; we are in Santa Barbara, the American Riveria, instead. YMCA membership portability is the best.
  • I think many shared human experiences are of long boredom punctuated by short excitement or terror. Per the former, I finally added on-site search with lunr.js to this blog; no more Google.
  • I’m currently reading Moral Mazes. From my personal experience reading Bad Blood and Super Pumped, and starting yet not finishing a whole bunch of other non-fiction: I can only handle terrible business books that have no thesis or advice other than gratitude for not being there. I have a bunch of other book reviews to catch up on.

Still only myself

Two quotes about the experience of life. The first from NYT’s Magazine “I’ve Always Struggled With My Weight. Losing It Didn’t Mean Winning. “

Suddenly, I was slim. It was, by any measure, an incredible weight-loss success story. Even my great friend Alan texted about how good I looked. (“Did I say that?” he wrote, with a facepalm emoji, when I reminded him of the time he squeezed my love handles. “Sam, I was very inappropriate. But I still think it’s funny.”) I had achieved the great transformation — I had turned myself into the “AFTER” photo.

And now that we have that out of the way, I can tell you what I consider the most interesting thing about my weight-loss journey, a secret that you will never see in any banner ad. As the months passed, as I stuck with my healthful habits and got used to my new trim body, as the line on my Noom weight graph stayed low, I felt something amazing: I felt pretty much exactly as I had always felt my whole entire life. I was, after all that change, still only myself. My big epiphany, if I could put it into words, would be something like: “So what?”

And the second from Gawker’s ‘Failure to cope “Under capitalism”’ (newlines added by me for emphasis):

[Anne Helen] Petersen’s most acute insight is perhaps in identifying a link between relentlessly optimized childhoods designed to prevent downward mobility, and the professionally competent but profoundly enervated millennials overwhelmed by the prospect of canceling plans, of keeping plans, of cooking food, of texting their mothers. I think she is correct.

I think it’s possible that for many, considering the shape of your life and then living it with vigor is so difficult because it cannot be externally validated. Unlike education and work, it offers no socially obvious meritocratic path. The moments where, like sourdough, it proves, are largely invisible — in cooking, in walking, corresponding with a friend, in chatting with a neighbor or registering to give blood. They cannot be tallied up and put on a resume. They are never “finished.” The progress you make is spiraling rather than linear; circling steadily, slowly, around your weak points, taking two steps forward and one step back, building habits so slowly that only in retrospect can you see your life become different than it was. And there is no one who can tell you that you did it right.

But this is not the condition of life under capitalism, this is life itself. And it is a sad irony that though the fear of life may be produced by class imperatives within capitalism, the impulse to restrict it to a problem of capitalism is itself part of the same fearful rejection of the task of living.

Which also reminds me of an aside from a Bruno book, whose authorship is an American author writing about contemporary Southern France, that the French are tryhards even when contributing to a weekly dinner at home with their friends.

Hate and sarcasm

Two things I read recently were commentary on forcefully-weak communications.

The first, from a r/rails thread in which the poster wrote “I hate React as it’s not using MVC pattern and It’s not organised + I hate JS.” A response:

You mentioned that you’re looking for junior positions which implies that you’re relatively new to the industry and have limited programming experience. Despite this, it seems that you’ve developed a lot of strong opinions.

There’s nothing wrong with having strong opinions and some of the best engineers are very opinionated. However, one of the biggest things you learn as you gain more experience is that you don’t know what you don’t know and that while forming opinions is important, one should understand why we may form certain opinions and whether those reasons are actually valid enough to hold those opinions strongly enough.

For example, you say that you hate JS. Hate is a very strong word for junior developers. Why do you hate JS? Is the hate that you have for the language actually for the language itself or rather code that you’ve written in it? If you’ve been forced to work on an awful codebase, then the language itself isn’t to blame.

You mentioned that you hate React as it’s not using MVC pattern. What is it about the MVC pattern that you like? There’s a lot of advantages with the MVC approach, but other approaches also have merit. As you gain more real-world experience, you’ll realize that there are many ways to do things and each approach has its own merits/disadvantages. You mentioned that React is not organized, but React is not a framework - it’s a library. You can organize it however you want which can be a double-edge sword if you’re inexperienced. Any disorganized React project is not React’s fault nor is it a fault of JS.

Unlike React, Rails is a framework and a very opinionated one. It can be beginner friendly as things will just work out of the box as a lot of decisions have already been made for you. However, it can also be difficult for beginners to level up as Ruby is a lot less explicit and a lot of the behind the scenes magic can be very confusing to figure out why things work the way they do. There is also a lot more ways to write your code in Ruby which means there’s a lot more syntaxes and patterns you may need to be aware of to be competent. (e.g., there’s only a certain number of ways to write a loop in Python but a multitudes of ways in Ruby). This flexibility may seem like a blessing to be able to write expressive and elegant code, but for beginners, it can make the process of leveling up a lot more work.

You should be open to the possibility that you may also not end up loving Ruby when it actually comes to working on production code. Many of us here love Ruby, but it should be stated that there’s a difference between tinkering and using Ruby for toy-projects and maintaining a Rails app. Also, Rails does not make JS go away. You may find yourself writing plenty of JS in Rails to get the desired UX on the frontend.

At the end of the day, I do love Ruby and there are plenty of Rails opportunities in the market so I do think it’s worth learning. But if you want to pursue Rails, you should jump in with both eyes open. You may find that your criticisms of JS & React may not actually be as valid and be specific to the projects that you worked on. If there are a lot more opportunities for you in JS/React than Ruby/Rails, it may be worth continuing down that former path.

And Andrew Bosworth “On Sarcasm”:

At first being sarcastic was incredibly satisfying. Whereas previously I might have made an earnest argument or asked a question, I now seemed to be able to jump right to the part where the group appreciated me and my contribution. What is even more impressive is it required very little thought to execute. I could often get a positive reaction even on topics I knew almost nothing about.

It was when I noticed this last point that I decided that sarcasm was not for me.

Sarcasm “works” because it alludes to a critique without ever actually making it. It shifts the burden of substantiating the criticism as an exercise for the audience and further suggests that if they don’t already understand it then they are deficient. Making a critique implicit is an unassailable rhetorical position. The most socially acceptable response for the group is to go along with it, as you have given them nothing specific to challenge. And if someone does challenge it you can simply demur and say it was “just a joke.”

Sarcasm does nothing to advance our understanding of the world around us or help us improve it.