This Week in Programming: ‘Rough Consent’ for Project Management
We’ve written several times over the past couple of years in this column about the issues that arise during the development of a new programming language. For example, there has been a bit of a kerfuffle over time around the decision to move forward with modules in Go. Similarly, we examined some of the struggles experienced by the Rust team that led to one of the Rust team’s now-former core members, Aaron Turon, writing a series of blog posts about the methods used in making decisions and moving forward. In his posts, Turon had noted that there were “increasing signs of distrust, ‘us vs them’ thinking, and people feeling like they have to yell in order to be listened to” and made several suggestions on how to fix the Rust RFC process.
This week, it was again a Twitter thread that led me to think a little bit about project governance models and the difficulties faced when people get together to try to create something. As I’m sure you’re well aware, it isn’t easy, but James Snell, a core member of the Node.js community, offered a simple suggestion:
Agreeing with a decision takes generally more commitment and cognitive load than not-objecting to it. It puts significantly less burden on those who may have less interest in the decision than those who have more.
— James M Snell (@jasnell) February 25, 2019
Snell goes on to explain that, by asking for objections instead of assent, “the individual making an objection can’t just say no and walk away,” and instead they have to actually defend their view.
The lesson is: sometimes, instead of asking "Do you agree?" … Ask, "Do you object?"
When you do, you'll find that it's often easier on everybody.
— James M Snell (@jasnell) February 25, 2019
Last week, we looked at the death of a programming language that offered, possibly, the only other alternative to getting everyone to agree — or rather, not disagree — that alternative being, simply don’t have a big team, and you won’t end up with a language plagued by controversy and feature sprawl.
Of course, Snell agrees, no process is perfect, but he sees this model (which one reply equates to “rough consent” and another to “lazy consensus“) as a way forward that treats all voices equally, as long as they are willing to defend their ideas.
… sometimes, when there are lots of opinions, it can be difficult to reach a decision. The Buffer constructor deprecation is an example. Another is ES6 modules. But larger more difficult decisions *should* be more difficult while simpler things… Well, shouldn't be
— James M Snell (@jasnell) February 26, 2019
This Week in Programming
- Git Adds Human Readable Times in 2.21: Version 2.21 of Git, the free and open source version control system behind popular tools like GitHub and Bitbucket, was released this week with features and bug fixes from more than 60 contributors. Featured prominently among the new features was the addition of human-readable dates with the –date=human command. As pointed out in the announcement, sometimes you just don’t need to timestamp down to the second, such as “Tue Feb 12 09:00:33 2019 -0800” and want something more… readable and relative. The –date=human command offers something more specific than –date=relative and varies depending on the context. In addition, the new feature also offers an auto switching capability depending on where the output is being written. Beyond dates, the new Git also includes the ability to detect case-insensitive path collisions and offers some performance improvements, among other features. For the full details, as always, check out the release notes.
- Visual Studio 2019 RC & GitHub Updates: There are a couple of tidbits from the world of Visual Studio this week — first, the Visual Studio 2019 release candidate is now available for download before general availability on April 2 at the virtual launch event. Second, GitHub has detailed the new features in the latest release of GitHub for Visual Studio, which includes “the ability to view conversations, new status circles in the pull request list, and an improved experience around opening and cloning repositories.”
Monorepos aren't cool anymore. Everyone is doing them. I'm going to start using megarepos.
— Abraham Williams (@abraham) February 25, 2019
- Go 1.12 Preps for Modules Support: That’s right, Go 1.12 is released and available for download, and this latest version includes “opt-in support for TLS 1.3, improved modules support (in preparation for being the default in Go 1.13), support for windows/arm, and improved macOS & iOS forwards compatibility.” According to the release notes, this latest version (which comes six months after Go 1.11) primarily involves changes to “the implementation of the toolchain, runtime, and libraries” and should be fully backward compatible.
- Flutter 1.2 and Dart 2.2: Speaking of Google-backed languages and the like, the company released this week Flutter 1.2 at Mobile World Congress, the same venue where it first introduced the beta of Flutter a year ago. The latest version comes with the standard efforts to improve stability and performance, but also works to “polish visual finish and functionality of existing widgets” and adds new web-based tooling for developers building Flutter applications. ProgrammableWeb writes that Flutter 1.2 focuses on refinements, noting that “it bodes well that the search giant has iterated on Flutter so rapidly.” With the announcement, Google said that developers could expect a 1.x update about once a month (including beta releases) and offered a dedicated YouTube channel for those interested in keeping up with the latest in Flutter news. In writing about the announcement, Techcrunch focused on Flutter’s web-based dev tooling, of which they write that “it’s worth noting that Google already built Flutter support into Android Studio and added tools for Microsoft’s increasingly popular Visual Studio Code. Now, it’s also building new web-based programming tools, the Dart DevTools. These run locally and include a widget inspector, a timeline view, a source-level debugger and a logging view.” Finally, Google also announced that “Flutter 1.2 includes the Dart 2.2 SDK, an update that brings significant performance improvements to compiled code along with new language support for initializing sets.”
- Google Cloud IoT Device SDK: In one more bit of Google-y news, ProgrammableWeb brings us news of Google’s Cloud to IoT Device SDK, which developers can use to “connect microcontroller-class devices directly to the Google Cloud IoT platform,” with many IoT-related platforms supported out of the box. Google offers full details in its blog post announcement and notes the SDK is available in its GitHub repository.
- Facebook Devs, Start Your Engines: Facebook has just announced that F8 2019 registration is now open, with the conference being held April 30 and May 1, 2019, in San Jose, California. A preview of the schedule is available and streaming is available for those of you who can’t make it. In other Facebook developer news, the company has released Hooks for React 16.8, which it calls “a powerful new way to write components and reuse code between them.” Hooks, the company writes, are fully backward compatible and work alongside your existing code, and don’t suffer from the drawbacks of mixins. For further details, check out the docs or Hooks on GitHub.
- The Continuing Evolution of Open Source: Finally, if you’ve been paying attention lately, there has been some controversy in the open source world over big players like Amazon taking open source projects and competing with smaller players in ways they see as unfair. Well, it’s not quieting down any and ZDNet has the story of MariaDB CEO accusing the large cloud vendors of “strip mining” open source. Read on for the dirt.
8 deadly sins:
Closing the Github issue without telling anyone how you fixed the problem
— Aaron Corso (@corsoa) February 25, 2019
Feature image: “The Battle of Vercellae” (detail), Giovanni Battista Tiepolo, 1725–29; New York Metropolitan Museum of Art.