Cycle.js Author André Staltz: The Day Programming Stops Being Fun, I’ll Look for Another Job
We talked with André Staltz, an author of Cycle.js, creator of Manyverse, core contributor to RxJS, open source enthusiast, teacher, and public speaker
André Staltz is passionate about frontend, functional and reactive programming, and decentralized web. He’s currently working on Manyverse, a social network off the gird, that aims to change the world and address major privacy issues. In this interview, he shares his passion for programming, predicts the future for social media, reveals his long-term goals, challenges he faces and talks about major projects he worked on, like Cycle.js and Callbags. André is coming to Amsterdam to give a presentation at JSNation Conference, June 6–7, 2019.
Hello André, and welcome to the interview with JS Nation! Can you share your story?
As a teenager, I made a lot of small computer games in my free time, and from there it sounded reasonable to pursue a career in software development. To me, it’s always been about creativity and exploration. The day programming stops being fun and challenging, that’s the day I’ll probably look for some other career. There seems to be a never-ending puzzle of problems to solve, and you can solve them in multiple creative ways. This mountain of possibilities is exciting to me.
We’ve seen you’re a prolific public speaker and educator. Can you tell us more about your recent talks? For example, “Reinvent the Social Web.”
I gave this talk in September and it’s still relevant. I talked about the current state of the web (from a market perspective), and then how we, as programmers, can build — basically — the next web. We all use social media nowadays, and although these have roots on the web, they are no longer dependent on the web. They are largely accessed through mobile. This means that they have become a competing platform to the web, and they have grown so much that it’s probably not an exaggeration to say they are now larger than the web itself.
In this talk, I describe Scuttlebutt as an open protocol for decentralized social networking (without blockchains!), its Node.js stack of libraries, and how it can serve as a good foundation for social platforms of the future. If the web is to survive, then it must learn from the proprietary social platforms that are now dominating our screen time.
What about your experience at the last conference organized by GitNation?
Last year I gave a talk titled “Callback Heaven”, where I introduced Callbags, a new spec, and library for asynchronous programming. It’s basically an alternative to RxJS and other reactive libraries, but in reality, it’s not a heavyweight library, it’s just a pattern for writing callback-driven javascript. In this talk, I taught that pattern and showed how small and simple it is. I got feedback from Douglas Crockford, who was at the conference: he told me he really liked the pattern, and that it made a lot of sense to him. Knowing Crockford’s pioneering contribution to early JavaScript, this meant a lot to me.
You’ve also published more than forty articles on your blog; have you been published elsewhere, and if yes, then where?
Most of my publications are on my blog, but perhaps the most popular article outside of my blog is my introduction to reactive programming, hosted as a GitHub gist. Otherwise, I post a lot of smaller markdown documents on Scuttlebutt, such as development proposals for Scuttlebutt, as well as less technical documents, like thoughts on the economy, the internet, and communities.
Tell us about your social network project off the grid, namely Manyverse. What makes it different from other social media apps?
In features and appearance, Manyverse looks like a typical social network. What differentiates it is that the database is entirely local, not remote, so you never need to log in and you can use the app (read and write content) also when offline. Each of your friends with the app installed also have their own local databases, and in this way, it’s a network of friends that update each other’s databases with the latest content. In other words, it’s fully peer-to-peer, open source, decentralized, and non-commercial.
What about other OS projects? What are the main challenges you face while maintaining them?
I use Cycle.js as the UI framework to develop Manyverse, so there happens to be a nice synergy between these two, and I update Cycle.js whenever I stumble upon an important issue. I have discovered that most open source libraries actually don’t need constant maintenance unless you are releasing new features or doing rewrites.
Most of the maintenance is limited to bugs and basic updates, and if you keep on fixing bugs, at some point you will reach a mostly-bugless situation. So I don’t feel pressure to make constant commits to all these projects, but the challenge is managing expectations from users that want new features, and knowing where those new features should be hosted. Often, features don’t need to be added to core libraries, they can be hosted in dedicated utility libraries, and one aspect of a good library is how interoperable it is with community utilities.
On your Patreon page, we’ve seen you’re saying that you want to change the world. How do you think you are already changing it?
My Patreon covers the blog posts that I publish, and I have written a handful of articles that describe the state of the web, the grim direction it’s headed for the next 5 years, and the positive direction it should head instead. One way I found that these articles have already changed the world is with public policy and politics.
My blog got quoted by Elizabeth Warren, a US presidential candidate, and through these publications, I got invited to speak at Central European Forum on sociotechnical issues. You can see that non-developers with political influence are interested in hearing about this field from concerned developers like me. Writing my opinion is one thing I intend to continue doing, but by building software — such as Manyverse — is how I want to make a real difference in the future. For now, the software may be buggy and unstable, but after many years working on it, it can begin to be usable and reliable for the wider audience.
My goal is to reach the level of reliability and utility as other free and open source projects out there, such as Firefox, VideoLAN, Linux, Audacity, OBS. My motto is “what Wikipedia did for encyclopedias, I want to do for social networks”.
Apart from tech, what other interests or hobbies do you have?
I make music, here’s my Soundcloud account. I recently got a Maschine Jam device, and have been experimenting with it to make some music. I also recently tweeted how to use those kinds of MIDI devices on the web using the Web MIDI API.
Are you excited about the upcoming JS Nation conference in Amsterdam this year?
Sure, I am excited! This year I want to talk about functional lenses. Someone from the Cycle.js community introduced them to me some years ago, and since then we have incorporated lenses for state management in the framework, as a library called @cycle/state. I’m also using them in Manyverse source code, as well as in other apps, and can attest that it’s a flexible, powerful, and rather an easy way of handling state management in JavaScript.
In Amsterdam I want to show how you can use these functional lenses, but not just in Cycle.js. It should be possible to use these in other app architectures and frameworks.
The interview was prepared with the assistance of Marina Vorontsova, a copywriter from Soshace.com. Soshace is a hiring platform for web developers: hire a developer or apply for a remote job.
About GitNation
GitNation is a foundation contributing to the development of the technological landscape by organizing events which focus on the open source software. We organize meaningful and entertaining JavaScript conferences and meetups, connecting talented engineers, researchers, and core teams of important libraries and technologies.
Besides offering single conference tickets, the organization also sells a GitNation Multipass providing discounted access to multiple remote JavaScript conferences and workshops.