@kunchenguid What is your recommendation on the selection of LLM and effort for first mate and crew-mates?
How does firstmate choose the LLM and effort when launching new crewmate?
I built a CLI for developers and CI pipelines. There was a third consumer I hadn't anticipated: AI agents.
Discoverable, self-describing, explicit — the same properties serve all three.
Three Consumers, One Interface → https://t.co/b3ksW1TfF7
We already know how to manage reusable code.
jar. npm. gem. pip.
Agent skills are the same thing for the AI era — reusable, composable, versioned, and quality-controlled.
The framework exists. Now we need to apply it to agents.
Scala has incredible technical merit.
Right now, the single best investment the Scala team could do @scala_lang is developer experience, by far, bar none.
Dev tools, compilation speed, publishing tools, docs, frameworks, trained AI assistants, probably in this order.
For Scala to get the popularity it deserves, the effort invested in these vs language features should be 10:1.
One does not "become" agile. (We never should have chosen that word!) Working in an "agile" way is nothing more, and nothing less, than adopting a set of disciplines that reinforce a set of simple values.
The values come first. If you don't value people, working software, collaboration, and change (Communication, Feedback, Respect, and Courage) then you won't adopt the disciplines that reinforce those values.
An agile transition is all about installing those values into an organization. Organizations, and people, do not like to have their values changed. They will fight it. Some overtly. Some by subterfuge.
My experience is that most truly "agile" organizations are those who are composed of like-minded people -- people who were hired for their values.
NEW POST
@JuntaoQiu on patterns for how single-page applications fetch data. This first installment explains how asynchronous queries can be wrapped in a handler to provide information about the state of the query.
https://t.co/KICZPo4DNU
People ask me all the time if I am "pro-Israel" because I am a Jew who has lived in Israel, and my answer is that being "pro-Israel" or being "pro-Palestine" or being a "Zionist" does not properly capture the nuance of thought most people do or should have about this issue. It certainly doesn't capture mine.
I have a lot to say. I’ve spent the last 72 hours writing, texting, and talking to Israelis, Jews, Muslims, and Palestinians. Much of my reaction is going to piss off people on "both sides," but I am exhausted and hurting and I do not think there is any way to discuss this situation without being radically honest about my views. So I'm going to try to say what I believe to be true the best I can.
Let me start with this: It could have been me.
That's a hard thought to shake when watching the videos out of Israel — the concert goers fleeing across an empty expanse, the hostages being paraded through the streets, the people shot in the head at bus stops or in their cars. I went to those parties in the desert, I rubbed shoulders with Israelis and Arabs and Jews and Muslims, I could have easily accepted an invitation to some concert near Sderot and gone without a care, only to be indiscriminately slaughtered. Or, perhaps worse, taken hostage and tortured.
I don’t believe Hamas is killing Israelis to liberate themselves, nor do I believe they are doing it to make peace. They're doing this because they represent the devil on the shoulder of every oppressed Palestinian who has lost someone in this conflict. They're doing it because they want vengeance. They are evening the score, and acting on the worst of our human impulses, to respond to blood with blood — an inclination that is easy to give in to after what their people have endured. It should not be hard to understand their logic — it is only hard to accept that humans are capable of being driven to this. Not defending Hamas is a very low bar to clear. Please clear it.
It’s not possible to recap the entire 5,000 year history of people fighting over this strip of land in one newsletter. There are plenty of easily accessible places you can learn about it if you want to (and, by the way, many of you should — far too many people speak on this issue with an obscene amount of ignorance, loads of arrogance, and a narrow historical lens focused on the last few decades). But I'll briefly highlight a few things that are important to me.
In my opinion, the Jewish people have a legitimate historical claim to the land of Israel. Jews had already been expelled and returned and expelled again a half dozen times before the rise of the Muslim and Arab rule of the Ottoman Empire. Of course it’s messy because we Jews and Arabs and Muslims are all cousins and descendents of the same Canaanites. But Arabs won the land centuries ago the same way Israel and Jews won it in the 20th century: Through conflict and war. The British defeated the Ottoman Empire and then came the Balfour Declaration, which amounted to the British granting the area to the Jewish people, a promise they’d later try to renege on — all before the wars that have defined the region since 1948.
That historical moment in the late 1940s was unique. After World War II, with many Arab and Muslim states already in existence, and after six million Jews were slaughtered, the global community felt it was important to grant the Jewish people a homeland. In a more logical or just world that homeland would have been in Europe as a kind of reparation for what the Nazis and others before them had done to the Jews, or perhaps in the Americas — like Alaska — or somewhere else. But the Jews wanted Israel, the British had taken to the Zionist movement, the British had conquered the Ottoman Empire which handed them control of the land, and America and Europe didn’t want the Jews. As a result, we got Israel.
The Arab states had already rejected a partitioned Israel repeatedly before World War II and rejected it again after the Holocaust and the end of the war. They did not want to give up even a little bit of their land to a bunch of Jewish interlopers who were granted it all of a sudden by British interlopers who had arrived a hundred years prior. Who could blame them? It had been centuries since Jews lived there in large numbers, and now they wanted to return in waves as secularized Europeans. Many of us would probably react the same way. So, just as humans have done forever, they fought. The many existing Arab states turned against the burgeoning new Jewish state. One side won and one side lost. This is the brutal and broken and violent world we live in, but it is what created the global world order we have now.
Are Israelis and British people "colonizers" because of this 20th century history? Sure. But that view flattens thousands of years of history and conflict, and the context of World War I and World War II. I don’t view Israelis and Brits as colonizers any more than the Assyrians or the Babylonians or the Romans or the Mongols or the Egyptians or the Ottomans who all battled over the same strip of land from as early as 800 years before Jesus’s time until now. The Jews who founded Israel just happened to have won the last big battle for it.
You can’t speak about this issue in a vacuum. You can't pretend that it wasn't just 60 years ago when Israel was surrounded on all sides by Arab states who wanted to wipe them off the face of the planet. Despite the balance of power shifting this century, that threat is still a reality. And you can't talk about that without remembering the only reason the Jews were in Israel in the first place was that they'd spent the previous centuries fleeing a bunch of Europeans who also wanted to wipe them off the face of the planet. And then Hitler showed up.
American partisans have a narrow view of this history, and an Americentric lens that is infuriating to witness. As Lee Fang perfectly put it, "Hamas would absolutely execute the ACAB lefties cheering on horrific violence against Israelis if they lived in Gaza & U.S. right-wingers blindly cheering on Israeli subjugation of Palestinians would rebel twice as violently if Americans were subjected to similar occupation."
And yet, many Americans only view modern Israel as the "powerful" one in this dynamic. Which is true — they obviously are. It isn't a fair fight and it hasn't been for decades because Israel's government is rich and resourceful, has the backing of the United States and most of Europe, and has an incredibly powerful military. At the same time, Israeli leadership has made technological and military advancements that have further tipped those scales — all while the Israeli government has helped create a resource-thin open air prison of two million Arabs in Gaza.
Conversely, Palestinians are devoid of any real unified leadership, and the Arab world is now divided on the issue of Palestine. Israel is unwilling to give the people in Gaza and the West Bank more than an inch of freedom to live. These are largely the refugees and descendents of the refugees of the 1948 and 1967 wars that Israel won. And you can't keep two million people in the condition that those in the Gaza strip live in and not expect events like this.
I'm sorry to say that while the blood on the ground is fresh. The Israelis who were killed in this attack largely have nothing to do with those conditions other than being born at a time when Israel and Jews have the upper hand in this conflict. Some of the victims weren’t even Israeli — they were just tourists. This is why we describe them as “innocent” and why Hamas has only reaffirmed that they are a brutal terror organization with this attack — an organization that I hope is quickly toppled, for the sake of both the Palestinian people and the Israelis. But as someone with a deep love for Israel, with friends in danger and people I know still missing, it breaks my heart to say it but I'm saying it again because it remains perhaps the most salient point of context in a tangled mess full of centuries of context:
You cannot keep two million people living in the conditions people in Gaza are living in and expect peace.
You can't. And you shouldn’t. Their environment is antithetical to the human condition. Violent rebellion is guaranteed. Guaranteed. As sure as the sun rising.
And the cycle of violence seems locked in to self-perpetuate, because both sides see a score to settle:
1) Israel has already responded with a vengeance, and they will continue to. Their desire for violence is not unlike Hamas’s — it’s just as much about blood for blood as any legitimate security measure. Israel will “have every right to respond with force." Toppling Hamas — a group, by the way, Israel erred in supporting — will now be the objective, and civilian death will be seen as necessary collateral damage. But Israel will also do a bunch of things they don't have a right to. They will flatten apartment buildings and kill civilians and children and many in the global community will probably cheer them on while they do it. They have already stopped the flow of water, electricity, and food to two million people, and killed dozens of civilians in their retaliatory bombings. We should never accept this, never lose sight that this horror is being inflicted on human beings. As the group B’Tselem said, “There is no justification for such crimes, whether they are committed as part of a struggle for freedom from oppression or cited as part of a war against terror.” I mourn for the innocents of Palestine just as I do for the innocents in Israel. As of late, many, many more have died on their side than Israel's. And many more Palestinians are likely to die in this spate of violence, too.
Unfortunately, most people in the West only pay attention to this story when Hamas or a Palestinian in Gaza or the West Bank commits an act of violence. Palestinian citizens die regularly at the hands of the Israeli military and their plight goes largely unnoticed until they respond with violence of their own. Israel had already killed an estimated 250 Palestinians, including 47 children, this year alone. And that is just in the West Bank.
2) Every single time Israel kills someone in the name of self-defense they create a handful of new radicalized extremists who will feel justified in wanting to take an Israeli life in retribution sometime in the future. Half of Gaza’s two million people are under the age of 19 — they know little besides Hamas rule (since 2006), Israeli occupation, blockades, and rockets falling from the sky. The suffering of these innocent children born into this reality is incomprehensible to me. They will suffer more now because of Hamas’s actions and Israel’s response, all through no fault of their own.
There is no way out of this pattern until one side exercises restraint or leaders on both sides find a new solution. Israelis will tell you that if Palestinians put their guns down then the war would end, but if Israel put their guns down they'd be wiped off the planet. I don't have a crystal ball and can’t tell you what is true. But what I am certain of is that every time Israel kills more innocents they engender more rage and hatred and recruit more Palestinians and Arabs to the cause against them. There is no disputing this.
So, why did this happen now?
I'm not sure how to answer that question except to say it was bound to happen eventually. It was a massive policy and intelligence failure and Netanyahu should pay the price politically — he is a failed leader. Iran probably helped organize the attack and the money freed up by the Biden administration's prisoner swap probably didn't help the situation, either. Israel's increasingly extremist government and settlers provoking Palestinians certainly didn't help. Nor has going to the Al-Aqsa mosque and desecrating it. Nor do blockades and bombings and indiscriminate subjugation of a whole people. Nor does refusing to talk to non-terrorist leaders in Palestine. Nor does illegally continuing to expand and steal what is left of Palestinian land, as many Jews and Israelis have been doing in the 21st century despite cries from the global community to stop. A violent response was predictable — in fact, plenty of people did predict it.
Israel is forever stuffing these people into tinier and tinier boxes with fewer and fewer resources. But if you want to blame Israeli leaders for continuing to expand and settle land that does not belong to them (as I do), then you should also spare some blame for Palestinian leaders for repeatedly not accepting a partitioned Israel during the 20th century that could have led to peace (as I do).
Please also remember this: Hamas is still an extremist group. The Palestinian people do not have a government or leaders who legitimately represent their interests, and it sure as hell isn't Hamas. Will some Palestinians cheer and clap at the dead, or spit on them as they are paraded through Gaza? Yes they will. And they have. Many will also mourn because they loathe Hamas and know this will only make things worse. This is no different than how some Americans cheer at the dead in every single war we've ever fought. It's no different than the Israelis who set up lawn chairs to watch their government bomb Palestine and cheer them on, too. This doesn't mean Palestinians or Israelis or Americans are evil — it means some of them are giving in to their violent impulses, and their zealous feelings of righteous vengeance.
Solutions, you ask? I can’t say I have any. If you came here for that, I’m sorry. The two-state solution looks dead to me. A three-state solution makes some sense but feels out of the view of all the people who matter and could make it happen. I wish a one-state solution felt realistic — a world of Israelis and Arabs and Muslims and Jews living side by side with equal rights, fully integrated and defused of their hate, is a version of Israel that I would adore. But it seems less and less realistic with every new act of violence.
Am I pro-Israel or pro-Palestine? I have no idea.
I'm pro-not-killing-civilians.
I'm pro-not-trapping-millions-of-people-in-open-air-prisons.
I'm pro-not-shooting-grandmas-in-the-back-of-the-head.
I'm pro-not-flattening-apartment-complexes.
I'm pro-not-raping-women-and-taking-hostages.
I'm pro-not-unjustly-imprisoning-people-without-due-process.
I'm pro-freedom and pro-peace and pro- all the things we never see in this conflict anymore.
Whatever this is, I want none of it.
Essay: Why TDD Enhances Developer Productivity
An exploration through the lens of the DevEx framework and cognitive psychology.
Test-Driven Development (TDD) is a design technique involving a specific sequence of steps: writing a failing test, implementing the simplest possible code, and refactoring the code. While TDD is often perceived as a design technique, I propose a new perspective: viewing TDD as a productivity tool. Practising TDD, I argue, will improve your productivity.
Before diving into how TDD enhances productivity, it’s crucial to understand what productivity entails for developers. The idea of how to measure developer productivity has often been misunderstood. Fortunately, Noda et al. recently published a paper that provides a new perspective on developer productivity. The team who publishes the paper includes experts on developer productivity, including Nicole Forsgren (co-author of Accelerate) and Margaret-Anne Storey (co-author of SPACE).
The paper includes the proposal of the DevEx framework, which outlines the three dimensions that affect developer productivity: feedback loops, cognitive load, and flow state. Instead of summarising their findings, I will take the excerpt from Abi Noda's newsletter post, which succinctly explains these three dimensions:
> 1. Feedback loops refer to the speed and quality of responses to actions performed. Fast feedback loops allow developers to complete their work quickly with minimal friction. Slow feedback loops, by contrast, interrupt the development process, leading to frustration and delays as developers wait or decide to switch tasks. Organizations should shorten feedback loops by identifying areas in which development tools can be accelerated (e.g. build and test processes, development environment setup), or human hand-off processes improved.
> 2. Cognitive load encompasses the amount of mental processing required for a developer to perform a task. When cognitive load remains high as a result of problems such as poorly documented code or systems, developers need to devote extra time and effort to complete tasks and avoid mistakes. To improve developer experience, teams and organizations should aim to reduce cognitive load by finding ways to eliminate unnecessary hurdles in the development process.
> 3. Flow state is a mental state in which a person performing an activity is fully immersed in a feeling of energized focus, full involvement, and enjoyment. Frequent experiences of flow state at work lead to higher productivity, innovation, and employee development. Similarly, studies have shown that developers who enjoy their work perform better and produce higher quality products. Teams and organizations should focus on creating the optimal conditions for flow state.
The three dimensions of the DevEx framework highlight the areas organisation can focus on to improve developer productivity. However, the limitation of this study is its focus on organisational or team-level change, which is externally focused from the developer’s point of view. There’s room to have a more internally focused point of view, drawing what we can learn from these dimensions into our own individual productivity.
To manage these dimensions effectively from an individual level, we need to understand what limits us from an individual perspective. What limits individuals are the process that goes in our head, our cognitive limits. Understanding our cognitive limits is beneficial as it allows us to see why adopting TDD can be helpful.
I don’t use a hammer because it’s a great tool to drive nails. It’s because I can’t drive nails without a hammer. Similar to our minds, we require mental tools to drive our cognitive tasks. Without tools, we may not visibly bleed, but we may experience an unproductive day filled with frustrations.
Based on my experiences, these are the developer-centric way of summarising our cognitive limits, the three Ws:
1. Wit
Our mind operates in two systems: System 1 for fast, automatic, emotional thoughts, and System 2 for slower, more deliberate thinking1. Developers tend to use System 1 by mistake to make important decisions. As a result, their quick wittiness will create a clever solution that doesn’t solve a problem. These clever solutions will increase the cognitive load on our future selves and others, and slow down our feedback loop when others review our work.
2. Working memory
Our working memory typically has a limit of four2, measured in chunks3. Developers handle diverse tasks that demand complex thinking, such as user needs, programming language, architecture, refactoring, testing, etc. With our working memory limits, simultaneously thinking about all these thoughts is not feasible. For example, thinking about user needs and refactoring simultaneously will introduce an unnecessary cognitive load.
3. Willpower
We have limited willpower that we can use in a day. When you’re about to start coding, the feeling of dread may happen when you have run out of your willpower. The constant use of willpower eventually depletes it, leading us to the loss of joy or flow state.
These cognitive limits are hindering the dimensions outlined by the DevEx framework. Given this understanding, it’s clear that we need a mental tool to help with our productivity. Think about it: Usain Bolt, the greatest sprinter of all time, is slower than a domestic cat but faster if riding a bicycle.
------------
The mental tool that we need to circumvent our cognitive limits is workflow. I’m not talking about an organisational workflow like how we pass on work to others. Rather, it’s an individual’s workflow, the sequence of steps of work that you do.
You might be surprised to hear how an individual’s workflow can circumvent our cognitive limits, so let’s consider a real-world example highlighting the importance of an effective workflow: the story of Niklas Luhmann. Luhmann authored more than 70 books and 400 articles on various subjects. His secret was ...... (find the link in the reply to complete reading or listening)