33 – David Christiansen

Recorded 2023-09-11. Published 2023-09-15.

In this farewell interview with David Thrane Christiansen, the outgoing Executive Director of the Haskell Foundation, hosts Wouter Swierstra and Matthías Páll Gissurarson use the opportunity to reflect on his tenure as ED, the recent history of the Haskell Foundation, where the HF is going and what consider if you want to apply for the role of Executive Director of the HF.

Transcript

This transcript may contain mistakes. Did you find any? Feel free to fix them!

Wouter Swierstra (0:00:11): Welcome to the next episode of the Haskell Interlude. Today is September 11th, 2023, and I’m joined by my co-host, Matthías Páll Gissurarson. 

Matthías Páll Gissurarson (0:00:19): Hi.

WS (0:00:20): And our guest today is David Christiansen, Executive Director of the Haskell Foundation. So, David will be stepping down as Executive Director at the end of the month, and we want to use this opportunity to reflect on his tenure as Executive Director, the recent history of the Haskell Foundation, where the Haskell Foundation is going, and what to consider if you want to apply for the role of Executive Director of the Haskell Foundation. 

Okay. Welcome, David. So, this isn’t the first time you’ve been on the podcast, and we talked a while ago about how you got into Haskell and your interest in the Haskell Foundation, and your role as a new Executive Director. But the reason we’re talking to you now is that you’ll actually be leaving us as Executive Director, and there’s actually a vacancy coming up if you’re interested. So, as an easy first question, maybe you can tell us a little bit about the Haskell Foundation and what it does. 

David Thrane Christiansen (0:01:13): The Haskell Foundation is a relatively young non-profit that was created a couple of years ago to fill some gaps in the world of Haskell. And we see ourselves as really doing four things. And all these things are fundamentally interconnected. Like, you can’t draw a hard line between any one of them and the others, but they’re sort of aspects of our goal. 

The first is that we want to work toward adoption because getting more people using Haskell and helping people who use Haskell experience the kind of success that inspires them to keep using Haskell is important when it comes to ensuring that there’s enough resources to be able to pay people to keep working on Haskell tooling. And there’s a lot of things that full-time developers can do that part-time developers can’t do. So, it’s very important that we do this. 

Also, Haskell has traditionally been governed, not by some central organization who gets to tell everybody what to do. There’s no Haskell equivalent of Rich Hickey or Guido Van Rossum. Instead, the Haskell community has always been a fairly freewheeling group of people who each make their own decisions apart from the others. And this has led us to have a lot of useful flexibility and to be able to do a lot of things and explore a lot of directions all at once. But from time to time, it also is useful to have an organization that can glue all these together and know what everybody’s up to and say, “Oh, hey, have you, over here who wants to do this thing, talked to this person over here who wants to do this other thing?” Maybe if we combine these three efforts in this way, we can achieve more value, these kinds of things. So, in other words, being a glue for all of these pieces.

Also, we want to be a credible place where people who want to support the development of Haskell can put money so that it can then be distributed. And in this respect, it’s important that we’re, in some sense, neutral. We’re not one particular open-source project, like those exist. And if you want to go sponsor, say, the HLS Open Collective, that’s a great thing, and you should do it, absolutely. But if you think, “We want to sponsor Haskell, but we don’t want to sit down with a spreadsheet and try to figure out how much do we put in this project, how much we put in this project,” then the Haskell Foundation is one place where you can go to do that as well. 

And finally, we also want to be able to professionalize some volunteer-led operations. So, historically, running everything with volunteers is the way we’ve worked, but some tasks are much more motivating for volunteers than others. And things that a volunteer doesn’t want to stick to for years on end have a natural home in the Haskell Foundation, where we do have paid staff who can put in their calendar and take care of it, even if it’s boring. And so, we see it as a good place to both improve our overall resilience as a language ecosystem and to decrease the load on individual community members.

WS (0:04:13): So, you mentioned a few points here. Can you give examples of things that you do to encourage adoption?

DTC (0:04:19): Yeah. So, as far as encouraging adoption goes, we haven’t been putting on any big marketing campaigns or anything, but I have spent a lot of time talking to professional users of Haskell, like companies using Haskell, and trying to figure out what are the pain points, what works well, and what does it take to make Haskell be so good for you that you’ll want to keep using it, and then use that information as input into lots of other planning processes. 

For example, we heard that breaking changes are a difficulty. So, I’ve spent a lot of time having conversations with various tool developers, trying to figure out ways that we can provide smoother migration paths overall, often by coordinating multiple projects. I heard that the way of doing impact assessments that we usually have when we want to make a big change is to go out and check all the code on Hackage, but many Haskell programs are not on Hackage. A lot of them are like in-house, closed-source web apps. And how should somebody wanting to make a proposal to the core libraries committee go and evaluate those? Well, they really can’t. How should the GHC team check whether or not they’ve caused problems with those people? 

So, we coordinated between – we didn’t do the actual work here, but we did coordinate the process of getting easily installable GHC nightlies, which requires coordinating like GHC and GHCup and then writing some documentation, which allows you to have a CI job inside of your company that lets you say, “Oh, oh, better open an issue. This broke.”

WS (0:05:51): Yeah. So, the Haskell Foundation is a non-profit, yet you collect money from professional users. So, how is that different from, suppose I want to see something change in the language? I can also – there’s several Haskell consultancies I can go to and ask them to do work for me. What’s the difference here?

DTC (0:06:10): We try to have a higher-level view of everything. I think if you have a specific problem and you want to pay a consultancy to fix it for you, you should absolutely do that. A lot of companies have very specific needs, and the things they want to change are very important for them and maybe a little bit for everybody else. And for that, I think hiring a consultant is exactly the right thing to do. But a lot of the difficulties that people face—I think most of them are little things that affect everybody. And for that, no one’s going to be motivated to say, “I want to go pay somebody a bunch of money to fix this little paper cut that’ll give me a little bit of value. But I’m very happy to pay a little bit of money, along with a lot of others who are paying a little bit of money, to then work out how to fix this paper cut.” But taking the leading role in one little thing is not something that motivates a lot of people. And we’re able to take that role by being a sort of central organization for a lot of these things.

WS (0:07:03): Right. So, how many people work at the Haskell Foundation? 

DTC (0:07:06): Two. Some of what I’m saying so far is aspirational. We do do these things, but I think there’s a lot of potential in the future to do much more of them and deliver much more value. The two people, those are me and then Bryan Richter. And Bryan is working full-time on GHC’s DevOps infrastructure. So, improving the CI and improving the signal-to-noise ratio, especially there, so that when the CI is red, it’s red because there’s a mistake and the tests don’t pass rather than red because some build machine ran out of memory, or because there’s a test case that’s non-deterministic or these kinds of things. And the theory there is that, as GHC becomes easier to contribute to, it becomes cheaper to contribute to, and then we can get more contributions and make it easier and cheaper for anybody who wants to make it better. 

Along the way, Bryan has also been finding other resources to help out and other ways to help out. So, he has taken some of the load off of the sysadmin team that handles most of the rest of the Haskell infrastructure, doing some machine migrations, and he’s also organizing a Haskell CI group. And that’s a fairly recent thing, but it looks very promising, where people who are using Haskell and CI can get together and swap techniques and figure out how to do it the best way. And I do everything else, basically.

WS (0:08:26): Okay. So, everything else seems like an awful lot. Can you give an example of what you do in a day? 

DTC (0:08:32): Yeah, yeah. And it actually varies quite a lot. This is not a monotonous job by any means. So, in a given day, I might have meetings with sponsors to find out how is Haskell working at their company, like what are the pain points, what are the joy points, where does it make you happy and wonderful and fulfilled? Sometimes I can find ways to point them at resources that are useful directly, just because I talk to so many people. Other times, it becomes input into planning. I might spend a little bit of time setting up our website. I might spend some time just thinking what are the difficulties that we might be facing as a programming language community in a few years, and how do we prepare for those now. I attend a lot of meetings of various open-source projects, like the HLS meeting, for example, just to find out what’s going on there. I work on getting projects launched. I always try to have projects be primarily run by community volunteers. I think in part because that preserves my capacity for other things, in part because if we can’t get volunteers, that means we’re doing something very wrong. So, it keeps us anchored in the community the way that we should be. I’ve spent a fair bit of time getting projects off the ground, which can – and I’ll check in with projects. I might review a contribution to the error message index. I might be meeting with our accountant to try to see how things are going there or to prepare to pay our taxes or file our taxes at least. All these things.

WS (0:10:00): So, it’s not a technical role, but it sounds like your role is – if the overall goal of the Haskell Foundation is to be the glue that holds the language development together, your role is very much gluing together various volunteer efforts and trying to find common ground or establish what works well and what we should be doing differently.

DTC (0:10:22): And not only volunteer efforts. I also talk to people whose job is working on Haskell on a regular basis too. But yeah. So, I definitely have a technical background. I used to – I’ve never done much work on Haskell tooling, but I did use to work on Idris, and I’ve done some work with Racket. And I think that the technical background here is useful because it allows me to have different kinds of conversations with people. It allows me to – if three people are saying, “We want to solve this problem in three different ways,” I can credibly evaluate which of them are sort of plausible and have an informed discussion about trade-offs, which I think is important. But yeah, it’s very much not a job where I sit down and write any significant amount of code. I did develop one bare-bones Haskell library in the last year and a half, which is a parser for a file format that we intended to use for security advisories. We could talk more about that project later. But essentially, I think having the parser was useful because it allowed me to find a volunteer more easily who could sort of say like, “Okay, yes, this is a plausible thing, and there’s like something to build on.”

WS (0:11:29): Yeah, sure. So, what kind of projects is the Haskell Foundation involved in? 

DTC (0:11:35): Lots.

WS (0:11:36): I know of one, which is the podcast, right? 

DTC (0:11:39): That’s right. There is this podcast. I twisted your arm and asked you to include a little thing at the end, thanking our sponsors for helping this. And this is a volunteer project, right? I mean, my role has been to come to meetings and say, “How can I help?” Not really to tell you what to do or anything like that. 

WS (0:11:55): Right. And the Haskell Foundation sponsors us a little bit to help with the editing and the kind of things that we also need to do to run the podcast.

DTC (0:12:02): Yeah. I mean, when the podcast started, you were relying on volunteers to do audio editing and to transcribe episodes. But this is the kind of volunteer activity that people want to happen. They think it’s important, so they’ll volunteer, but It’s not motivating to the kinds of people who volunteer enough that they want to keep doing it forever. So, we found that it was a good use of a little bit of foundation money because it’s actually not that expensive in the broad scheme of things to get audio edited and transcribed to do this. But yeah. So, a lot of our projects are coming out of two working groups. So, I thought I’d describe those before we go on further. 

So, we’ve got our Stability Working Group, which includes GHC developers, a couple of board members, some industrial Haskell users, and myself. And we meet every other week and just talk about ways to reduce the costs of Haskell upgrades, where costs in this sense is both costs in money for businesses and costs in time for open-source developers working on their own. And this included things like identifying a list of accepted but unimplemented GHC proposals that would make it easier to provide a good migration experience and then trying to get them implemented. And that involves me to then finding opportunities to try to make this happen. Sometimes we could pay for a thing, other times we can say, “Oh, there’s someone wanting an internship. Maybe we can suggest it as their project.” It’s resulted in a GHC proposal where we’re trying to tame the discussions surrounding language extensions for Haskell teams. And this is both interesting from an upgrade’s perspective, but also just from a, how do we keep our tools working well for our team perspective? And we’ve discussed some proposals that didn’t end up really going anywhere, which is fine because it’s important to – not everything you discussed you’re going to do. And that was extending head.hackage to persist early into the release of a GHC release so that people had an easier time upgrading while they waited for the community to catch up. And that didn’t end up happening. 

And there’s also the Technical Working Group, which is descendant of the Haskell Foundation Tech Track from the very early days. And that’s where we discuss projects so we can carry out. So, if somebody wants the HF to do something, we have a process for ensuring that all the stakeholders are heard for making sure there’s a reasonable budget, reasonable success criteria, and then eventually making a decision about whether we want to fund it. And this has evolved such that people also come with cross-cutting community RFCs to say, “Hey everybody, what do you think about this?” Because we didn’t really have a good forum for that in the past. We had specific for compiler changes or standard library changes, but not really for a change to the compiler and the standard library or a change that affects more than just that or in some other way. And so, we are a place where we can host those discussions. And then we see our role as first making sure the discussion doesn’t go off the rails and keeping it focused and not going in circles, and also ensuring that all of the appropriate stakeholders have been heard and that you’ve actually gotten the input you need to get, so we can otherwise go out and solicit more feedback there.

MPG (0:15:16): Yeah. You mentioned earlier that you facilitate communication, right? So, is that mainly the Slack and the Discourse? So, how do you do that?

DTC (0:15:24): Actually, It’s mainly targeted outreach to individuals. So, I’ll be in one meeting and I’ll hear people saying, “This thing is important.” And then I will think, “Ah, I know that these three other people are interested,” and I’ll just send them an email. Or sometimes I’ll try to set up a meeting with multiple people or these kinds of things. But it takes a lot of different forms. So, for example, the GHC team approached me last year, and they said that they wanted to get more feedback on what they should be working on in the next little while because they have funding to do open-source GHC work that doesn’t have a specific list coming in from a client. And then how do we pick which of our many possible tasks to do? And so, I assisted them in running that process and sent out emails to the people they wanted to be solicited for feedback, and then emailed them back for clarification. We didn’t want to just do a broad survey that a bunch of people could fill out. I think there’s advantages to that way of working, but there’s also disadvantages. Like, there’s lot less opportunities for reflection. It’s hard to go back and get clarification. And so, the process that we took for this one that came out of the GHC team’s wishes was that we would find users with whom they had a pre-existing relationship and who knew what was going on, and then ask them a few open-ended questions and then clarify the responses. And then we wrote a report and made a to-do list. And we’re in the process of doing a follow-up on that right now, actually, to make sure that everything that was promised is either delivered or at least explained like, “Here’s the thing we did instead because we learned something when we tried to do it.” So, it takes a lot of forms, the facilitating communication.

WS (0:17:04): But it’s certainly not the case that you have – your title says that you’re an Executive Director, but you don’t have executive power to put your fist down and say, “This is the way we’re going to do it.”

DTC (0:17:15): I mean, yes and no, right? So, the only – if you’re going to have an employee, that employee has to be the Executive Director in some sense. Someone’s got to have that responsibility. So, that someone is me. And what that means is that within the boundaries set by the board, I get to make the decisions about what the foundation does. So, I can’t turn over everything in the bank account to my friend. And there is a – the board does have to approve a budget, but the budget is fairly broad. And then, within the boundaries agreed with the board and approved by the board, I essentially do get to make the decisions, but what I don’t get to do is tell anybody else what to do. If there were an employee, if there were more employees at the Haskell Foundation, then I could absolutely go out and say, “Hey, do this.” Right? And we do have some contractors and some part-time people who do work for us. And in those contexts, that’s exactly what I do, right? 

So, we’ve got a wonderful part-time administrative assistant working with us, Whitney, and I don’t go and say, “Whitney, do this.” But I do send her lists of things that need doing, and she does them. Also, we’ve got the person transcribing the podcast, and I say, “Hey, please transcribe these episodes,” and then she transcribes the episodes. And it’s not like I have to go ask for permission before paying somebody to do that, just so the people understand what the job’s about, right? But outside of the formal foundation, I make a point of never telling anyone what to do because the Haskell Foundation doesn’t exist to boss around everybody using Haskell or working at Haskell tooling. I certainly have things that I think are good ideas, but I think that those good ideas should be implemented because they’re good ideas and because I’ve convinced people that they’re good ideas, not because I’m throwing weight around or something.

WS (0:19:07): It’s more like a professional community manager, I guess, right? Where you have to –

DTC (0:19:12): That’s an important aspect. 

WS (0:19:14): Yeah. Yeah. Yeah.

DTC (0:19:15): I’d say that’s a quarter to a third of the job, is professional community manager. I mean, the rest, there’s fundraising, there’s bureaucratic requirements like ensuring compliance with taxes. There’s public communication, like what I’m doing right now, in some sense. This one is kind of community management and public communication. There’s actually executing on particular technical and organizational projects that need to happen. 

So, one of our bigger projects in the last year and a half, since I was on here last, was that we put on a workshop for people who want to get involved in working on GHC. And this was collocated with ZuriHac. And I did most of the work for that. So, I invited the speakers. I made the spreadsheet for tracking registrations and budget forecasts. I, in consultation with the GHC leadership, talked, figured out which areas it seemed to be most important to recruit volunteers for, either because a lot of people wanted to get involved or because not a lot of people wanted to get involved. 

I think both of those are good reasons to tell you about how something works. Recruited speakers, made sure that – I made what was kind of a controversial decision at the time—to charge money to attend because that made it possible to reimburse the expenses of our speakers and also of some students who attended, which I thought was important to do. Initially, we were just going to charge a token fee because we wanted people not to be confused, because ZuriHac is free and it’s huge. There’s no real limit, right? So, you can sign up for ZuriHac and not come, and it’s no big deal. But we had a room with a loaded number of seats, and we didn’t want people to reserve a seat and then not tell us if they couldn’t come so that somebody else could come. And we thought like, okay, well, if we have to collect a token amount of money from somebody to make that happen, then actually we should really try to reimburse our speakers and pay people’s costs for helping out with it, and pay for the coffee too, because you got to serve coffee. 

WS (0:21:08): There’s no free lunch, right? And sometimes making something not free also reflects its true value, right? I mean, there’s value in organizing something like this.

DTC (0:21:18): That’s right. And the HF could afford to pay for all of this out of the general fund, but I thought it was better stewardship of our resources to do it this way. Of course, if people couldn’t, if a fee posed a barrier for people, then we would reduce or waive it. That was no problem. The goal was not to exclude –

WS (0:21:37): Make money.

DTC (0:21:41): We actually had a deal that we would not make money, right? The university that was hosting us, they didn’t really want to host a fundraising event for somebody else. That would be weird. So, the grant we had was that if it looked like we were going to make money, then we’d give out more scholarships and cover more costs for student attendees. And we ended up losing a bit of money, but then we covered some student costs anyway because we thought it was important to do so. Anyway, I want to return to your question, right? So, what is it you do here? The other part is planning and executing on projects.

MPG (0:22:09): Right. So, you mentioned, I think, before we start recording that the Executive Director, it is a person. So, you influence what the foundation does and how it performs. Could you say – what do you feel like, what have your personal changes been like, and your focus—that’s just not the foundation, but your spin on things? How are things different now than before?

DTC (0:22:36): So, I think that in a small organization like this, you’ve got to play to your own strengths in order for the organization to succeed. I can certainly pay for support with things that I don’t have skills in, which I do. The foundation pays to support me in things that I need help with. But in the interest of being able to not waste resources to be efficient, I focus on the things that I’m naturally good at. And I think some things that I’m naturally good at are helping people with difficult conversations, listening with kindness in my eyes on a video call from time to time. I think I’ve got a pretty good facility for putting myself in a lot of different shoes and understanding the difficulties faced by different people, and being able to formulate that constructively. So, a lot of this is that kind of behind-the-scenes communication, community glue stuff that maybe isn’t so publicly visible. 

I’m also able to write fairly complicated things without spending a ton of time on it. I’m a pretty fast writer. So, I’ve tried to write texts where it would be useful and improve documentation with projects that I interact with and not just leave them hanging. I’ve written around 20 pages of documentation about projects and processes internally for my successor. I expect it’ll be a fair bit longer by two weeks from now when I have my last day. This is the 11th of September, 2023, for those listening. So, I think those are things that come fairly easily to me. And so, I’ve been doing more of them, trying to diffuse tense situations, those sorts of things. 

I think that things that come less easily to me are goading people and pushing them to things. Even the way I phrase that, right? It reflects my internal thing. I’m not so good at getting on someone’s case, even if that would be a useful thing and even if they want me to. So, another way to do some of what I’ve been doing could be getting to people and saying like, “Hey, that thing you were going to do, is it done?” And saying that more. And I get a lot of value out of people doing that for me in my own life. And perhaps that would be a place where somebody who isn’t me could provide really good value to somebody else. It’s very complicated. It’s very detailed. 

WS (0:24:56): So, the Haskell Foundation is very young, right? And I guess part of your role has also been actually just defining what the foundation does and does not do, right? So, is there anything that you feel like we’re not doing well, or anything that you feel like the foundation, given more money, could do more effectively? 

DTC (0:25:17): So, one thing I think we could do better, given more money, is get more money, which is to say that I don’t have a long background in fundraising. This was my first attempt at it. I’m very, very happy that we’ve kept our sponsors, but we haven’t really gotten a lot of big new sponsors since I started. So, it would be really wonderful to have people around who’ve got deep skills in this area and who can really get more money on board, which would allow us to spend more money directly working on Haskell projects, right? I wish that we’d put more money into things, but I’ve tried to be conservative, especially once the economic downturn started and interest rates went from effectively zero to effectively 4%. When money is no longer free, it becomes more difficult to fundraise. So, I’ve tried to be conservative with expenses as I figured out what that would mean for sponsorship renewals and new sponsors. 

But some things that I think where I think we could play a really good role going forward is, first off, a more centralized coordinating role to pay for more work on core Haskell tools. I’d love to see much more of that happening and getting paid for and done in a way that has a view toward a holistic assessment of the user experience of all the Haskell stuff together. So, rather than saying, how do we make, say, Haddock better, or how do we make GHC better? Instead, say, how do we make the experience of anybody using Haskell better by making this improvement to Haddock, this improvement to GHC, this improvement to GHCup, or whatever it is, and look at opportunities to coordinate these things while paying to get the work done. I’ve been trying to do the coordinating. I would’ve liked to do more of the paying.

WS (0:26:57): Right. But you don’t see the Haskell Foundation becoming a consultancy, right? It would be very much –

DTC (0:27:03): Absolutely not. 

WS (0:27:03) Yeah. If you had more funding, you could bring together the holistic view that you mentioned, right? Where you see various parties struggling with related issues. And if someone fixes these various issues, that would make an overall experience greater than the sum of its parts.

DTC (0:27:24): That’s right. I’d also like to see us as, in some sense, a maintainer of last resort for key central projects. Let’s say something has one maintainer on it, and it’s very important that a lot of people use it, and that person can’t maintain it anymore for whatever reason. Maybe they have a child, maybe they get sick, maybe they find it boring and don’t want to do it anymore, whatever. Being able to step in and take care of it until it gets transitioned, or maybe on an ongoing basis, depending on resources and all that, would be a really important role to serve. And I’d like to be doing more of that kind of thing. Also, I think that we could do a lot on the promotion and marketing side for Haskell. That hasn’t been done yet. We’ve had some meetings and some discussions, but we haven’t had enough concrete results, in my opinion. It doesn’t have to be on the Haskell Foundation website or like signed the Haskell Foundation, but what matters is that it’s out there, that there’s better stories of how does this company use Haskell to great value and get a lot out of it.

WS (0:28:23): But that’s tricky, right? I mean, how do you get people to adopt the language? And many people will run into the language at some point or maybe read a tutorial, but there’s a big gap between actually using it in your day job to playing around with Haskell in the evenings, right? 

DTC (0:28:42): Yeah. I mean, I’ve been lucky enough to have two-day jobs writing Haskell code before this job, or three if you count my PhD, my time as a PhD student, because Idris was written in Haskell back then. But I think that the one model I have is, where are the barriers? When somebody hears about this thinks it sounds fun. If they don’t hear about it, okay. If they don’t think it sounds fun, maybe they’re not the ones who want to talk to first, but people who hear about it think it sounds fun, or think it sounds like it’s providing useful technology for their business. Figure out where they fall off, like where’s the missing steps in the staircase? And then try to put those there. And I think one of those is that we could provide better resources to people at companies who can block an adoption decision, and often with good reason because they don’t know about it and they’re skeptical, like, “What’s this new thing? We should use something proven and well-known.” And Haskell is proven, but I think it’s less well-known that it is well-proven, but it could be. And so, telling some of those stories is a resource that a technical team at a company can use to help convince a decision-maker to let them do a project in Haskell. 

I think another place where people fall off is tooling. It’s gotten massively better in the last couple of years, but I think we’ve got ways to go still before we have a really nice polished experience that works really well for everybody instead of working quite well for most people, which I think is where we are today. And so, finding ways to make that better, that’ll help people stay on board or not fall off. And also, look at the challenges that occur when you really try to scale massively. How do we diagnose performance problems in a really, really big application? And there’s some good resources. Like one of the HF projects is run by a volunteer, Jeffrey Young. He works at IOG, and they provide him with work time to work on it. So, it’s IOG contributing to it. But it’s a book on how to diagnose and fix Haskell performance problems. And I think arranging for more resources like that to exist is another place where we can remove missing stairs, this one toward the top of the staircase rather than the bottom.

MPG (0:30:44): So, you want to expand beyond Haskell meme accounts on Twitter.

DTC (0:30:49): For the record, we don’t run any Haskell meme accounts here.

MPG (0:30:53): Right.

DTC (0:30:53): Those are somebody else.

MPG (0:30:55): Right.

WS (0:30:56): So, I can’t imagine this job is always fun. So, what’s the worst day you’ve had in your role as Executive Director? This might also say something more about you as a person than the role as Executive Director. 

DTC (0:31:12): Like I said earlier, the role is in some sense tied to the person, right? There’s certain things that every ED has to do, but we also need to do it in the way that suits ourselves, because otherwise it can’t be done well. But let’s see. The very worst day, I don’t think I have like one worst day that stands out. I’m sorry. 

WS (0:31:32): Okay. So, maybe let me change the question then. I know from my experience as a professor, right, that there’s certain aspects of the job that I enjoy and others that I don’t, and –

DTC (0:31:42): I’m happy to tell you about my challenges. Yeah.

WS (0:31:44): Yeah, yeah. And everyone who is a teacher will know that marking stuff is a fairly boring and repetitive task, but it’s super important. So, you have to push yourself to just do this, right? And there must be similar things in your role, which you think, “Okay, this is not something which I enjoy doing, but it’s something that has to be done, and it’s my role to do it.” Right?

DTC (0:32:07): I mean, you heard me use the word ‘bureaucratic’ earlier to describe some of my duties. That’s absolutely something in that category for me, is the accounting side of things. I’ve got a really good relationship with a good accountant now, which I didn’t have in the start. So, I’m really happy because that’s relieved a lot of the difficulty. But I definitely spent a lot of time staring at spreadsheets, thinking like, “How do I even do this?” And it’s been a journey for me to learn how to even ask for the right kind of help to get it done. But yeah, I think that still, now that I’m not using a spreadsheet and I’m instead using QuickBooks, which is absolutely the right way to go, and I’ve got some help with it, it’s still something that it’s got to be done. It’s not the kind of thing that ignites my heart with passion. 

And similarly, planning this workshop in Zurich was incredibly boring. I spent a lot of time just dealing with a lot of details trying to – we ran it as a hybrid online event so that people who couldn’t afford to travel to one of the most expensive cities in the world would also be able to participate, at least to the extent possible. And figuring out how to livestream an event was something that I spent a lot of time on. But it’s not something that I find really intrinsically motivating. But it had to happen. And I couldn’t figure out a way to pay for it, so I just had to do it. Reading up on camera specifications and all that stuff.

WS (0:33:25): But it’s a means to an end, right? I mean, it’s –

DTC (0:33:27): Of course. Just like grading assignments is a means toward giving your students actionable feedback and helping them learn things. It’s fine. Yeah. I’m not saying it’s terrible. I’m just, you asked me what are the aspects that are like, you just got to do it, and that’s one of them. Also, dealing with the specific bureaucratic requirements of living in Denmark while working for a US organization, we use an intermediary company for that. And dealing with the details of that has been not the most fun thing in the world.

WS (0:33:58): Sure, sure. I mean, taxes are always complicated.

DTC (0:34:00): Yeah. This isn’t a tax thing. This is different, but it’s a –

WS (0:34:03): Okay, even then. 

DTC (0:34:05): Yeah. And processing a big pile of email to take feedback to the GHC team, like I mentioned earlier, and identify common themes and code the responses by common theme, and create a report for the GHC team that they could use and get things clarified—that’s kind of boring. It’s fine, though.

WS (0:34:25): Well, no. But it’s not easy, right? And it requires some technical expertise. And it’s a challenge in its own way, right? Because –

DTC (0:34:34): I’m not saying it’s easy; I’m just saying that it was a little boring. It’s okay. 

WS (0:34:37): Well, the marking kind of, you have to go through students making the same mistake over and over again. At least here, you get to take a step back and conceptualize what’s really going on, right?

DTC (0:34:50): Nonetheless, I do object to you arguing to me that it – you asked what’s hard for me, I’ll tell you what’s hard for me. And then you’re like, “Come on, man. That wasn’t hard for you.” It was. Yes, it was. I was there.

WS (0:35:00): Okay. No, no, no. Okay, that’s fair enough. Fair enough.

DTC (0:35:02): Yeah. I’m not saying it was hell on earth, right? It wasn’t. It was fine.

WS (0:35:05): No. No, no. Yeah. Looking ahead, you’ll be resigning in a few weeks. And what qualities would you look for in your successor, and what are the challenges up ahead?

DTC (0:35:15): I knew this question was coming, so I thought about it a little bit. I think there’s four things that we basically – first off, everybody should go read the job ad, right? The board has written this. That is the source of what you should be doing. What I’m going to tell you now are my highlights and my thoughts, which you can take on top of that. I think it’s absolutely essential that a new ED is somebody who can work with volunteers, who has the appropriate attitude toward volunteers, which is one of gratitude rather than bossing them around. If you want to say, “Thank you so much for helping out,” maybe perhaps, “Pretty pleased you could help out with something else and tell me what I can do to make it easy for you,” rather than, “Okay, now it’s your time to do this,” which is the inappropriate thing to do with a paid consultant, but not an appropriate thing to do with a volunteer. Anyway, you should be able to have that kind of relationship with volunteers. 

Also, being comfortable with fundraising, being comfortable with saying, “Dear company, you gain a lot of value with Haskell. Would you like to give some of that value back to help Haskell continue to succeed?” I think that that’s very important. And also, being able to have a relationship with people at sponsor companies and check in and see, like, what are the challenges that they’re having? If a company wants to sponsor the HF, that means that they’re deriving enough of value from Haskell that they think it’s important for their company to contribute back. And that means that we should take their difficulties and their successes and their happiness very seriously and use that as input into the rest of the process. And so, talking to people who maybe don’t use your favorite technology and not saying like, “Oh, you should have done it with Docker.” “Oh, you should have done it with Nix.” “Oh, you should have done it with this build tool or that build tool or whatever.” But instead, can have…

WS (0:36:56): An open mind.

DTC (0:36:57): …productive listening relationship with lots of different people is important. It’s important that you are able to keep doing the legal requirements of the organization, like making sure that the US taxes are filed because it’s a New York-based nonprofit, making sure that mandatory audits are carried out. Those kinds of things. There are professionals that help with this in practice. I’m a US citizen living outside the US. I have to file taxes with the US every year. I pay someone personally to help me with it. HF taxes are not much harder than my personal US taxes. Mostly, it’s a matter of like, the accountant says, “I need this,” and then you give them that. But still, you got to be able to get that, and it’s very important. 

And also, you need to be able to take a step back and put yourself outside of the narrow view of just Haskell and think, what is it that’s going to help Haskell succeed in the long run, and how do we move in that direction? How do we get those things? And think about like, I guess, the cold, hard economic realities that a programming language becomes more valuable when more people use it. There’s a strong network effect due to training libraries, all these things.

WS (0:38:07): Snowball, right? Just do you need a certain mass before you can even think about industrial adoption? If you look back 20 years or something, when Haskell first started, it was almost inconceivable that people would use Haskell in industry at all. It started off as much as a university experiment almost. And now, all of a sudden –

DTC (0:38:29): I keep hearing about companies that are using Haskell that I didn’t know about. I heard about one last week, and I thought, “All right, cool.” My view on things is definitely shaped by my period in academia working with dependently typed programming. But I see Haskell as a big mainstream language now, which from one perspective, it is, from another, it isn’t. But it’s reasonable to ask, it’s reasonable to compare and say like, “Where does our tooling fall down relative to Kotlin?” as opposed to like, “Look how awesome our tooling is relative to that thing this grad student hacked together this weekend.” We’re very much more on the former side than the latter side these days. Whereas I think in the nineties, we were very much closer to the hacked together in your dorm room on the weekend kind of situation. 

It’s been a long, slow process, but I really think we’re there. But what platforms should we be running on in 10 years? What’s going to matter, then? And how do we make sure that we get there? And the HF can’t be the only one doing that, but someone needs to step back and think about this. How do the things we offer match the expectations of programmers today rather than the expectations of people who learned to program in the nineties and the aughties and who are the sort of leading developers of Haskell today? Because most programmers have only been programming for a couple of years. The field has massively expanded, and this means that the cultural expectations of people, like all three of us in this call, are a mismatch to the experiences of most programmers. And so, making sure that we stay in touch with them so that we remain relevant is really, really important. Things like that. And you got to be able to have these thoughts. You don’t have to make the decisions, but it’s important to make sure these conversations are happening with everybody else.

WS (0:40:11): Sure, sure. I mean, it’s easy to get caught up in the tactical day-to-day, what’s the next most important issue, right? And there is the deeper question of, wait a minute, where do we want to be five or 10 years from now? Right? And how’s the language evolving? And I guess it sounds like you’re partly responsible for at least thinking this thought or at least flagging that it’s something that we should be discussing rather than –

DTC (0:40:37): Yeah. So, the HF doesn’t get to say where we’re going to be in five years, but I think it’s important that the HF occasionally calls up some GHC developers and says, “It seems to me that we’re going this way in five years. What do you all think about that?” And then after you’re done with that, call up cabal developers and stack developers, and HLS developers, and occasionally maybe say something a little bit unpopular that goes against the general values of the community when those values are self-defeating or seem to be something that’ll prevent us from achieving success in more important values. And if there’s spaces where our ways of working in the past or ways of seeing the world in the past are no longer adaptive, then the HF should not be telling people, “Don’t do this,” but we should be telling people, “Have you thought about it this way?” I think that that’s a really valuable thing for any ED to be able to do simply because there’s a few other people who are naturally placed to make that happen and who can sort of easily have the right conversations without people saying, “Oh, this is just your project jockeying for power,” or something like that. The fact that we have this kind of formal neutrality on the one hand and this broad commitment to overall community success on the other hand means that you just are naturally in a position to talk about those things with people and to have high-quality conversations about it. But yeah. 

So, I think those are the four really important things you need to be able to do. There’s lots of ways to do this, these things, right? I’m very much like a crunchy Greek letters-on-the-page kind of person. You don’t have to do that. I think you could be a great ED if you are – I think you should know Haskell. You should have written some Haskell code, probably. You should care about it, or else I think that you’ll probably not find things motivating enough or not have enough context for everything. At the very least, you should have an explanation of how you’d get over that stuff or a thought of how you get over that stuff, perhaps by having a CTO. 

Andrew, my predecessor, had a much stronger management and leadership background than me, but he hadn’t gone to do the PhD with the dependent types. And he had a CTO who covered that side of things. I came into the job, actually, I thought I might be the new CTO. Word got out that Emily was going to resign, and someone said like, “Hey David, you should try to do this,” because I’d been having monthly check-ins with Andrew to try to see, like explore this and say, “Is this a direction we want to go in?” Kind of open, right? Because I had a job that I liked at the time, and it wasn’t any rush from either side. And then Andrew decided to resign, and I’d gotten as far as talking to a couple of board members about maybe being a CTO. And then they said like, “You should apply for the ED job.” So, I did. And I think without that lead-up to it, I wouldn’t have, because I never saw myself as doing this kind of work, but I think other constellations could work really well as well. 

WS (0:43:25): Sure, sure. What was the application procedure like?

DTC (0:43:28): So, when I did it was write a letter to motivate it. A cover letter is the word. Occasionally, my brain still does stuff in Danish, even though –

WS (0:43:36): Sure.

DTC (0:43:39): But then it was like send that and CV to the board. And then there was a series of interviews. And then they got back to me with an offer after a few rounds of interviews. And then we had to make sure that it would work from an immigration perspective, just living in Denmark here. And we had to figure out the details of how a US organization could hire someone in Denmark and all this stuff. But at that point, it was like, “How do we solve this problem?” Not, “Do you want to do it?” I think my application was helped by the fact that I’d been having those meetings with Andrew and knew where the organization was and had a realistic view of what I was getting into, which was helpful.

WS (0:44:16): Right. Yeah, that makes sense.

MPG (0:44:17): So, I mean, ultimately, it’s up to the board, right? They’re the ones making the decision. 

DTC (0:44:23): Yeah. So, they asked me actually if I wanted to be a part of the decision process. This is going to be after I’m not working here anymore, but I do have a standing offer. I’m going to do some volunteer work for the HF after I leave. I’d like to focus that in the areas where I can provide the most value and ensure the smoothest possible transition. So, in particular, assuming my successor wants to, I’m happy to have regular check-ins and say, “Here’s the context on that decision.” Bad ideas around – if that’s something they find useful that I’m going to do that. But the problem with being a part of the decision process is that I think I can have more value now if I can have an honest and straightforward, and confidential discussion with people considering the job to say, “Hey, here it is.” And I’ll tell them all the things I’m saying in this interview, but also answer specific questions. They might say, “Oh.” 

One thing that’s been a challenge for me is that I live in Denmark. I have to have meetings with people in the US and in Australia. This leads to a workday, which is kind of split. So, I’ll take my daughter to daycare, work six or seven hours, pick her up. I don’t pick her up and drop her off every day. But she comes home, then we have dinner, we do our family stuff, she goes to bed, and then it’s back to work because I’ve got some meetings or some things to finish up. And in some ways, this flexibility is wonderful because it allows me to set up family times that I see my daughter as much as is at all possible. She’s three. And so, that’s very important to me. But it also is tough not sort of stopping work for the day until it’s time to go to bed. So, if somebody’s interested in doing the job, we could talk like, what time zone are you in, and what will that mean for your life? But any other sort of honest discussion people want to have that’s confidential, reach out to me, we’ll book a meeting. I’ve talked to a few really promising people already, but I want to give the board as big of a field of good people to choose from as possible. And because I’m not participating in the hiring process, I can have this conversation without it being a job interview. 

WS (0:46:24): Exactly. Yeah. Fair enough. Okay. Thanks very much.

DTC (0:46:29): Can I have a few minutes to plug some of the things that we’ve done in the Haskell Foundation in the last little while? 

MPG (0:46:33): Yeah, yeah. 

DTC (0:46:34): Cool. All right. So, one thing is, as I mentioned, we’ve got Bryan, who’s doing great work on the GHC CI, and we’ve got our working groups. We’ve also done our Haskell Error Index, which is being taken over by a volunteer, David Binder, who’s done really a lot of work on it ever since he started working with me on it at ZuriHac, not in ’23, but in ’22. He’s now running the whole project. The Haskell Error Index is a centralized place for community-driven documentation about error messages from any widely used Haskell tooling. So, right now, it’s supported by GHC Stack and GHCup, and work is ongoing to add cabal as well. So, that’s great. And hopefully, it’s easy enough to contribute to that people who are just learning Haskell. Once they learn how to deal with a particular error message, they can then share that knowledge with the community requiring no technical skills beyond markdown and editing files and putting them in git, which is a barrier, but it’s certainly a lower barrier than many other possible ways of doing it. 

We’ve also got Security Advisory Database. So, Fraser Tweedale is running this project. And the Security Advisory Database is maintained by a committee that Fraser organized. And the idea is to have a place to report issues with security, with any kind of Hackage basically, or with GHC. And for now, it’s a database of advisories. We might say, “Oh, there’s like a DOS potential here,” because if you – untrusted input might make it consume unbounded amounts of space. But we hope to provide a backend for useful tooling in the future. It’s not quite there yet, but I think that’d be a great project in the future. 

Also, we export to OSV, which is a big standard database that lots and lots of other tools pull from. So, people using Haskell in a larger context will already be able to benefit from this. And they also do some advising and maybe on a case-by-case basis, we’ll handle embargoed issues for key Haskell tooling if they have the time and resources. 

We coordinated the production of nightly releases of GHC, like I mentioned before. We helped organize the Summer of Haskell. That was the Haskell org committee that really put it on. But we sponsored participants and helped hook them up with the Haskell Symposium so they could attend and present things. We put on the GHC contributors’ workshop. We’ve got our proposal for extension classifications to hopefully make that easier. And also, Bryan’s got this working group for CI going on. 

If you go to haskell.foundation/projects, you could see a big list of up-to-date stuff. And if you’d like to get involved with any other projects, the contact information of the people running them is on there. So, if you’re listening to this and you think, “I want to help out with that,” that’s what you should do. Okay, that’s my plug. I felt like I had to – all these things are ongoing, right? They’re all going to run themselves without me being around as the ED. 

WS (0:49:33): Well, I’m sure you’ll be sorely missed, David. Thanks for your years of service and…

DTC (0:49:37): Thank you.

WS (0:49:37): …lots of luck in the new job. 

DTC (0:49:39): Thank you very much. Yeah, it’s a really bittersweet thing, right? I really love what I’m doing here, but a technical opportunity came up that I was just like, “Well, this fits me like a glove.” I just can’t say no. 

WS (0:49:50): Yeah. Fair enough.

DTC (0:49:51): All right, thanks for having me on.

WS (0:49:53): Okay. Thanks, David.

MPG (0:49:54): Thank you, David.

Narrator (0:49:58): The Haskell Interlude Podcast is a project of the Haskell Foundation, and it is made possible by the generous support of our sponsors, especially the Monad-level sponsors: GitHub, Input Output, Juspay, and Meta.

SPONSORS
Individual Sponsors
Monads
GitHub IOHK Juspay Meta
Applicatives
CarbonCloud Digital Asset ExFreight Mercury Obsidian Systems Platonic Systems Tweag Well-Typed
Functors
Artificial Channable FlipStone Freckle Google HERP MLabs TripShot
To learn more about the Haskell Foundation
Haskell Foundation, Inc.
2093 Philadelphia Pike #8119
Claymont, DE 19703
USA