an eddy in the bitstream

Page 2 of 75


Over the last several years I’ve found myself needing to explain/justify my habit of using a Makefile in software projects. I figure it’s time to create a post about it, so I can just refer here in the future.

I’ve a long-standing (decade+) habit of (ab)using Makefiles in projects, regardless of what the language(s) are and what other kinds of management tools are in use. Here’s one example. I don’t actually use them to compile things, or for keeping track of when files change, but more as a convenient mnemonic standard.

My rationale has been:

  • make is ubiquitous so there’s usually nothing to install
  • heterogenous projects involve multiple languages, with multiple invocation syntaxes. make allows me to easily remember a short command that is meaningful for what I want to accomplish (execute a task, start or stop a service, etc), rather than needing to first think “what language is this?”
  • make is language agnostic. It’s just a handy way to group shell invocations together with environment variables and comments/context.
  • make foobar is easier to remember (for me) than foobar with --all the --usual but sometimes --forgettable options.
  • during the workday, switching between repos that have different languages/tools/frameworks can create cognitive overhead, and make build or make run will just work regardless of what directory I’m in
  • it’s both a way of documenting common tasks for shared developer knowledge/utility, and making it more convenient to onboard developers, regardless of whatever other tools that they might be familiar with.
  • a Makefile is like an executable README

HB 2196 Testimony – Unemployment Insurance

The Kansas legislature is considering a bill that would create a legislative oversight committee specific to the technical modernization of the Kansas Department of Labor. The following is the testimony I wrote for the committee.

Testimony on Substitute for HB2196
Senate Commerce Committee
Peter Karman
March 17, 2021

Mr. Chairman and Committee Members,

I am Peter Karman, resident of Lawrence. I am here to present testimony on Substitute for House Bill 2196.

I am a technology professional with over 25 years of experience. I am also a former federal employee where I played a significant engineering role in the development of several IT projects, including the identity verification, security and fraud prevention, and authentication features of, which currently serves over 30 million Americans. I also worked on the modernization of the Department of Veterans Affairs case appeals management system.

During April and May of 2020 I assisted the Kansas Department of Labor as a volunteer with the United States Digital Response. The USDR is a group of several thousand volunteer technologists who stepped forward during the early days of the COVID-19 pandemic to assist state and local governments with the sudden demands on their technical infrastructure. I spent hundreds of hours in the depths of the KDOL technical systems and with the KDOL IT team during those weeks and have remained in touch with the department in the year since.

I also served on Governor Kelly’s transition team in 2018 and have knowledge of many of the IT systems, architectures and challenges within Kansas state government.

First, I applaud the committee’s desire to see KDOL technology systems modernized. The state’s reliance on mainframe technology poses several challenges to providing key services to constituents, particularly in the quickly evolving online environment on which many Kansans depend. I also support the legislature’s desire to understand the unemployment application process from the perspective of the users of the system. Filing a claim and receiving benefits should combine the best of design research, security and fraud prevention practices. Kansans facing these difficult circumstances deserve an experience filled with empathy and respect.

Second, there are provisions in the current bill that concern me, both as a professional and as a taxpayer. Creating a new oversight committee will add redundant bureaucracy to the existing legislative oversight structure that includes the Joint Committee on Information Technology. Empowering this committee with architectural decision-making power will place incredible demands on the committee and will prevent professional technologists and architects from using their industry knowledge and expertise to address complex design and security issues. We should let professional technologists determine the best technology solutions.

Page 3 of the current bill enumerates several technical security remediations and strategies that have no reason to exist in statute. I have worked on several IT modernization projects at the federal level that were initiated via Congressional action and every one of them that made specific technological requirements part of the law resulted in delays and inferior technological outcomes. Digital security practices must evolve as quickly as the threats they hope to defeat. When technical specifications make their way into statute, IT professionals face a dilemma between implementing the legal requirements and implementing secure systems. This false choice can lead, in the best case, to security theater and, in the worst case, insecure implementations. Please don’t enshrine today’s technical specifications, which must constantly evolve, into law preventing IT professionals from solving tomorrow’s security threats.

Thank you to the committee for considering this testimony and for your continued work in helping KDOL better serve Kansans.


Peter Karman

KS SOS election results

The Kansas Secretary of State elections web page says that “precinct specific election results are available upon request.”

However, according to the statute:

“The secretary of state shall publish on the official secretary of state website results by precinct for all federal offices, statewide offices and for state legislative offices not later than 30 days after the final canvass of the primary election is complete.”

So it appears that the SOS office is not following the law.

Since the general election precinct results have a similar requirement to be published no later than 30 days after the final canvass, which must be held no later than December 1, I would expect general election precinct results to be available on the SOS website by December 30, 2020.

I hope that by then the SOS office will be following the law.

Update 2021-01-05 Happy to report that the 2020 general election results have been posted. The primary results still have not.

Shame, software, and government

This summer I wrote a long essay about shame and software projects. Shame is a topic I’ve been thinking about for nearly 30 years, so the gestation period for the essay was unusually long. I wanted to capture here some of my context and motivation for writing it.

As I’ve written before, working in and around government has highlighted for me the extent to which people in public service will avoid taking risks. The shame essay is my attempt to understand why risk avoidance is such a strong institutional and cultural norm.

Public servants avoid risk because they are trying to avoid the shame of failure. The “public” in public service means that the fallout from what might otherwise be a “normal” failure ratchets up the sense of exposure. In government, failure can mean public scrutiny, investigations, inspections, audits, newspaper headlines, coupled with the internal personal sense that the value of the work is so crucial and that so many people are relying on us to do it well. High ideals, high stakes, a field ripe for shame events.

When it comes to information technology, a field that continues to evolve at a blistering pace, the patterns of shame avoidance are even more acute. The most common phrases about technology I hear from people in government, sometimes at the highest levels, are variations on “I’m not a tech person” and “I don’t understand how it works.” These statements are ways of lowering expectations, and therefore lowering the risk of shame by shrinking the gap between the ideal and the real.

In our modern, interconnected world, especially in the middle of a pandemic with people reliant on unemployment websites and remote work environments, IT systems pose a huge risk to government’s ability to fulfill its mission. So somebody in government needs to know how the IT works. But for years we’ve consistently under-invested in our government IT systems and in the processes (hiring and procurement) that support them. We’ve made it risky to work in and around government IT, and perversely, we continue to make the problem worse by trying to outsource all that risk to private sector vendors.

So we end up in a vicious knot of low tech IQ capacity, poor risk management practices and shame. What I tried to lay out in the shame essay was how some Agile software practices can help cut the knot.

The Agile process grew out of response to the Waterfall model. All by itself the Waterfall model of software development is not rooted in shame. However, the way it has been applied, particularly in large organizational contexts like government, has reinforced cultures of shame. One reason is that Waterfall requires a careful and detailed (and often time-consuming) upfront articulation of the ideal final result, analogous to the ideal self. A long detailed list of requirements and a long development cycle incentivizes development teams to build to the plan rather than to continually seek input directly from stakeholders while building. The ideal plan drifts further and further from an evolving reality. Since shame is directly connected to failings of the ideal self, Waterfall projects are perfectly set up for shameful patterns.

This is why bringing Agile patterns to government can be met with so much resistance and why their successful application can be so transformative. The existing patterns of managing high risk are ingrained at literally a cellular level because shame operates at that level of primary biological affect. Shame shapes the fundamental story the organization tells itself. Like the shame experience itself, organizations can feel stuck and powerless. The way out is with trust and empathy, and those are the traits and patterns that Agile encourages us to build, through Agile’s insistence on smaller, less risky changes.

When I see a digital service team helping to transform how government manages risk, the pattern I observe is a group of people learning to negotiate with shame and shame culture. That’s why I often say that the hardest work in government IT is the emotional labor. When I see success, outcomes often include not just stronger systems but stronger teams.


This sermon is from November 9, 2003, on the book of Ruth. I had a meaningful phone conversation with John Linton the day before that helped me unpack this one.

Perhaps you are familiar with the story of Ruth. It’s a love story, really. Ruth lives in Moab with her husband and her husband’s family. Her husband is Jewish. When he dies, Ruth decides to return with his mother, Naomi, to Bethlehem in Israel. Naomi tries to convince Ruth to stay in Moab, but in a beautiful and moving speech, Ruth vows to stay with Naomi forever. “Where you go, I will go,” she says, “Your people will be my people and your God, my God.”

All that happens in chapter one. There are three more chapters filled with intrigue and suspense and beautiful images, including a provocative midnight encounter between Ruth and her husband-to-be, Boaz. The story culminates with Boaz pledging himself to Ruth and buying back the family farm, and Ruth bearing a son named Obed.

The story of Ruth is about chesed. chesed is the Hebrew word that is often translated as ‘steadfast love’ or ‘fidelity’ or even ‘mercy.’

chesed is crucial to the preservation of the ideals of family and the nation of Israel. It is through the faithfulness and kindness of Ruth, her chesed, that salvation comes to her, and her mother-in-law Naomi, and ultimately to the entire nation of Israel and the world. Because Ruth’s son Obed has a son named Jesse who has a son named David, the great king of Israel, who in turn is an ancestor of Jesus.

So there is a certain tidy familial economy in this story that some Christians like to focus on: without the faith of Ruth, there is no King David, without whom there is no Jesus. This same reading tends to view Ruth’s chesed as a kind of duty and to hold her up as a moral example of someone whom God blesses because she has done her duty.

I don’t like that reading, because it makes it seem like Ruth and her story exist only to have a baby, a certain very important baby in Judeo-Christian history. This is the same kind of reductionism that certain teachings about Jesus’s mother Mary can fall into. I don’t like those either.

It is possible to read the book of Ruth as if it is government-sponsored media, a prime-time family drama meant to inspire the Jews to great acts of sacrifice in the name of the family and the nation. As you might expect, I don’t like that reading either.

I hear something else going on in Ruth. The first thing I notice is that while Ruth is the central figure in the story, she is not Jewish. This casts her chesed, her acts of kindness, loyalty and fidelity into a very different light. The key thing about chesed is that it is free. chesed is like a strong desire for someone. You show chesed for someone else the way you show love and devotion for someone. The text is very clear that Ruth is not Jewish but that she becomes Jewish through her chesed. It is as if Ruth is adopted, not just into Naomi’s family, but into the family of Israel. She is a foreigner who acts with loyalty, and it is her loyalty, her faithfulness and not her ethnicity, that identifies her as part of the Jewish family.

The second thing that I notice about the text is that God is not a character. God is referred to several times, but unlike other books of the bible, God never makes an appearance, or sends a message, or communicates, really, in any explicit way with the other characters.

If we read the bible everywhere as if it was about Jesus, I have to ask: who acts like Jesus in this story, if God is not there to do it explicitly? You might think it was Boaz, who responds to Ruth by honoring her and redeeming her and the family. But I think it is Ruth who acts the most like Jesus. She initiates the commitment. She is the first one to say to Naomi, I will be with you always, lo, even unto the end of the age. And unlike the disciple Peter, she is good to her word and doesn’t desert Naomi when things get tough. It is Ruth’s act of love and fidelity, her chesed, that inspires Boaz and redeems everyone.

I like this reading, of the foreign woman as the Jesus figure. But that reading still seems a little too moralistic, as if we have simply replaced the moral imperative of ‘do your duty’ with a kinder, gentler moral imperative of ‘love one another.’

Today’s texts could be read as moral examples: be like this, and God will bless you. Be faithful to your human commitments — family, the church — and God will bless you. God rewards those who are faithful to God. There’s a problem in my mind with that reading: the implied opposite. If bad things happen, if the curse comes instead of the blessing, it is the fault of the faithless human beings. Your child died because you failed to pray; you lost your job because you didn’t give enough money to the church; you ended up in hell because you didn’t have enough faith. We learn from the book of Job that that kind of faith, the faith that says God rewards and punishes based on how good we are, is a false kind of faith. It is the kind of faith that props up governments, institutions, even churches, but it is a false kind of faith.

It is this kind of moralistic reading, the reading where we hear “do the right thing and the right thing is this,” that turned me off to Christianity many years ago. It feels too simplistic to me, and somehow sinful, to read the bible as if it were a collection of stories that were supposed to instruct and inspire me to do the right thing. While I don’t doubt that it is possible to read the bible that way, and that it is in fact *easier* to read the bible that way, I don’t think it is ultimately faithful to the spirit of the bible to read it that way. The bible is at its best, and I would argue, becomes the word of God, when it tells on itself, when the bible deconstructs itself. So I’m looking for the crack, the chink in the armor of the text that points out a backwards way of reading it. Because at least for me, the hardest part of being a believer is not doing the right thing, or even avoiding doing the wrong thing. No, the hardest part of being a believer is learning to receive in the spirit of humility and trust. Learning to receive, whether it be forgiveness, or a blessing, or simply a really good sandwich that someone else has prepared for me.

It is much easier to receive in the sense of being owed, of meriting whatever it is I am being given. “I deserve this promotion because I have worked hard. I merit this blessing because I have given so much to the church. I am owed this because I have given that.” That kind of receiving comes out of fear: fear that maybe I don’t really deserve what I am being given. Fear that it will be taken away. Fear that I will be exposed as not being worthy of the gift. And learning to live *not* out of fear, but instead out of trust, seems to me to be the hardest thing.

Ruth feels to me like someone who lives out of trust. What if Ruth had acted out of fear? She likely would have stayed with her people in Moab and never gone with Naomi. She would not have risked the embarrassment of going to Boaz in the night. Her trust isn’t just blind optimism either. She is newly widowed, probably in a lot of grief, and she makes this incredibly brave vow never to leave Naomi. Why such attachment? I don’t know. The story doesn’t say. Maybe it’s as simple as Ruth loved Naomi.

What the text does say is that everyone who heard the story of Ruth was impressed by it. That tells me that I am not alone in thinking Ruth was doing something unusual. Ruth seems to live in a place I’d like to get to: she acts with hope and trust, not fear and not optimism. She displays an incredible amount of trust in going with Naomi in the first place. She’s in a foreign country with foreign customs. She must rely totally upon the kindness of strangers. Naomi and Ruth arrive in Bethlehem at the beginning of the barley harvest. The Jewish law proscribed that during the harvest, poor people could follow the harvesters and glean the grain that was left behind in the fields. Ruth takes the initiative and goes out gleaning to support herself and Naomi. While she is gleaning in the fields of Boaz, the owner himself shows up and after hearing from his workers the story of Ruth and Naomi, he offers her protection and invites her to glean in his fields for the duration of the harvest.

A kind of romantic tension emerges with Boaz and Ruth. In my mind, Ruth shows the most trust when at Naomi’s direction she goes at night and in this strange encounter with Boaz, basically says, marry me. Read it. It’s pretty racy, as my mother would say.

The images of the harvest and gleaning in the fields get at the the kind of trust I am trying to describe. It’s the kind of trust that a farmer or gardener must have. You put the seeds in the ground; you water them; you weed the soil. You do the work, knowing that all you are really doing is just making it easier for the growth to happen. You don’t make the seeds grow into something good and beautiful. You can’t make the sky rain or shine, you can’t control the blight of insects or disease. But you can do the work, knowing that ultimately the outcome of your work is totally out of your control.

And then there is the harvest. You receive back so much more than you have put in. You do all the work in the hope that it will pay off, but you are not guaranteed anything. You, the farmer, you can’t make a deal with God where you put in your 80 hour weeks and God rewards you with a good crop. No. There’s more trust in the relationship than that.

I think Ruth, and Naomi and Boaz are great examples. Not moral examples, in the sense of embodying the best principles of their culture and time, but great human examples, in the sense of acting out of trust and love and fidelity.

Hard work to bring in the harvest. The hardest kind of work, really, at least in the spiritual sense. Like coming to the table where the meal has already been prepared for you. You can’t do any work to make it happen; you can only learn to receive it in a spirit of humility and trust.

« Older posts Newer posts »

© 2021 peknet

Theme by Anders NorenUp ↑