Skip to content
Browse files

add episode 43, dark, intro

  • Loading branch information...
Steve Krouse
Steve Krouse committed Sep 20, 2019
1 parent 76bb92d commit 13ee4ff8fb489defeb5afb054492327e03751104
Showing with 69 additions and 0 deletions.
  1. +69 −0 episodes/
@@ -0,0 +1,69 @@
title: 43 - Unveiling Dark: Ellen Chisa & Paul Biggar

# #43 - Unveiling Dark: Ellen Chisa & Paul Biggar


This past Monday Ellen Chisa and Paul Biggar unveiled Dark, a new web-based programming environment for creating backend web services. In these conversations, first with Ellen and then with Paul, we discuss how they met, concieved of the idea, iterated on the product, and what their long-term vision is for the product.

The Dark product is a web-based, structured editor with a data store built-in. It's code has a functional programming feel to it, but it also embraces what they call a "functional/imperative" feel. For example, their error-rail allows programmers to defer handling nil-cases, much like a dynamicly-typed language, but still keeps track of their existance, like a staticly-typed language.

Paul often brings the discussion of Dark back to Fred Brook's distinction in _No Silver Bullet_ between essential and accidental complexity. I had fun in this interview diving into the Aristotelian roots of that distinction. We also debated the meaning of the terms "no-code" and "low-code", and whether either could be applied to Dark.

Dark removes accidental complexity around infrastructure and deployment. They are using the term "deployless" to describe the Dark workflow. It means that there is no seperate step to deploy code in Dark. Every single change to a Dark codebase is instantly (50ms, the time it takes to get your incremental change to the server) deployed to production servers. Of course this doesn't mean that every change you make is instantly deployed to _users_, but simply on production servers behind a feature flag _ready_ to be rolled out at your discretion. Deployment, getting code running locally to run in production, is eliminated because all code is running on Dark's platform at all times. What remains is simply choosing when to release that code to users.

One of my favorite parts of Dark is how readable its editor makes functional programming, which I typically find intimidating and difficult to parse. The Dark editor saves all past HTTP requests to all routes, and then uses those values to provide "live data" about each expression in that route. A dense section of code becomes totally comprehensible by clicking through each expression and seeing actual past values that have inhabited that expression.

I'm glad that we had the opportunity to dwell on some of the trade-offs and downsides of using Dark in this conversation. They are aware of the risks customers face by moving their applications onto the Dark platform, and hope to allieviate them as much as possible. For example, they are looking into creating a legal structure that will make their code open-source in the event that Dark shuts down.

Paul Biggar is best-known in the Valley for co-founding CircleCI, a tool for continuous integration and deployment. At heart, he's a compilers nerd: he got a PhD in compilers, worked on the JavaScript compiler at Mozilla, built CircleCI which is a compiler for deployment, and is now building Dark, a programming language, environment, and infrastructure compiler.

Ellen Chisa is passionate about helping people make things. She worked at Microsoft on Office Mobile, at Kickstarter, and started a company that built tools for travel agents, Lola.

## Transcript

_Transcript sponsored by [](

[Corrections to this transcript]({{ page.path }}) are much appreciated!

.name {
display: inline-block;
margin-right: 5px;
font-weight: bold;
.time:hover {
text-decoration: underline;
.block {
padding-top: 10px;

<div id="transcript">
<!-- -->


// linkify each block of text with a unique ID
[]'.block')).map(b => b.firstElementChild).forEach((el, i) => {
var a = document.createElement('a');
a.href = "#" + i; = "" + i;
el.parentNode.insertBefore(a, el);

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
ga('create', 'UA-103157758-1', 'auto');
ga('send', 'pageview');

0 comments on commit 13ee4ff

Please sign in to comment.
You can’t perform that action at this time.