Lukas Rosenstock's Blog

When I was in Lisbon for a month in 2019, I leveraged almost every opportunity to meet new people. One of the events I attended was called High Five Friending. It was a variant of a concept known as speed dating but taken out of the dating context to support a broader range of connections. A large group got together in a rooftop bar and had to install a mobile app that would ring every ten minutes to show you the picture of a person you should find as your next conversation partner. It was the first time I had participated in something like this, and I found it very enjoyable, even though it required a lot of energy to have so many conversations in a single night. This event gave me the confidence to participate in an actual speed dating event later that year, but that’s a different story.

Events facilitating one-on-one conversations are perfect, especially if you consider yourself shy or introverted. It may sound counter-intuitive initially, but I’ve noticed that I often tend to go quiet and listen without speaking in group settings. I find it hard to assert dominance and keep up with the speed of the conversation. A few people end up dominating the group. Having the undivided attention of another person, even just for ten minutes, means you can talk more and thus get more out of the encounter. Unsurprisingly, the Effective Altruism (EA) movement emphasizes one-on-one in its community-building strategy.

Local events like “High Five Friending” help find people in your vicinity. What can you do if you want to meet friends worldwide?! Luckily, a speed-dating setup works well with video chat applications like Zoom. For the Interintellect community, mingling salons have always been part of the other, along with the topic-based salons. Community members Brian Ahuja and Katrina Dela Cruz have hosted them a few times, but lately, the events happened at hours optimized for a primarily American audience. Anna Grigoryan and I wanted to attend the last one and voiced our discomfort with the scheduling in Discord. Instead of complaining or swallowing the pill of attending in the middle of the night, we spontaneously decided to team up and host our own mingle salon.

After that long-winded introduction, all that’s left for me to say is that I would love to see you at our salon. It will occur on Sunday, September 18th, at 18:00 CET. You don’t have to be an Interintellect member to come; you can book a ticket directly through their website.

Just nine euros to travel throughout the country! It was probably the most-liked policy the German government introduced this year, designed to help with rising energy costs. A highly subsidized monthly ticket granted access to the entire public transportation network in Germany, only excluding long-distance trains. You could buy it for June, July, and August, so it is currently the last month where it’s available. In our fight against the climate crisis, changing modes of traffic is a crucial building block. There was hope that it would move some commuter traffic from individual cars to buses and trains, but the effect seems small, probably because it was a temporary measure. However, the ticket supported local tourism and granted the financially poorer members of society the ability to travel.

One of the ticket’s effects was that it rekindled the discussion about public transportation prices. There has always been this idea it should be free for all. No tickets, no restrictions. Some countries or cities have already implemented it. The German government said they couldn’t afford to prolong the policy, but they want to evaluate and look into future approaches to make public transport more accessible. Political parties, transport groups, and NGOs have come up with suggestions such as a yearly 365€ ticket (1€ per day) or a tiered system with 29€/month for regional and 49€/month for national network access.

For me, the idea of whether public transport should be free or not is one for which I found it hard to form a clear opinion. As the discussion is ongoing, I’d like to share my thoughts. First, I find it hard to argue that something is too expensive when the price doesn’t even cover the cost. Long-distance train services are usually profitable, but local transport tickets sometimes cover as little as half the service’s actual cost; the rest is tax subsidies. If we further reduce ticket prices, we will eventually reach a point where the expense of running a ticket system (vending machines, etc.) exceeds the revenue. There is still an advantage to selling tickets, such as the ability to do yield management. For example, monthly passes only valid after 9:00 are often cheaper to dedicate earlier trains and buses to commuters who have to be in them and incentivize other passengers to wait till later in the day. It shouldn’t be the only reason to make people pay, though.

I have a general belief that makes me not too fond of subsidies: if there’s a person or group X that cannot afford a product or service Y, but we believe they should, we shouldn’t ask how to make Y more affordable; we should make sure X has more money (for example, by reducing taxes, increasing social security benefits or eventually through universal basic income). The problem with lowering prices through subsidies is that we minimize transparency and disguise the actual costs from the public. It also means that the government establishes preferences about the products and services it wants its citizens to purchase. It goes against free markets, so we should use it sparingly and only for good reasons. Of course, improving traffic and its climate impact could be a perfect reason. Finally, if people can’t afford or don’t want to pay even the subsidized price, they still pay for the subsidies with their taxes without getting access to the goods.

Due to the reasons laid out in the previous paragraphs, my reasoning is mainly between two alternatives: one is the current system or an even more expensive one, and the other is entirely free, ticket-less public transport. With the first option, we’d only focus on making buses and trains more attractive to use. I presume people who can get anywhere they want without a car will do so, and it will probably still be cheaper than the total cost of ownership of an individual vehicle. The second option begets the question of who will pay for it and how we can align demand and supply.

I assume we all agree that shifting traffic from cars to buses and trains is a desirable outcome because it reduces emissions and uses less urban space. However, we also know that public transport cannot cover every use case, especially in rural areas with lower population density. We still need cars, ideally small and electric, and we need to include walkability, bike lanes, and micro-mobility (think e-scooters) in the mix. Carsharing, ridesharing, hailed shared taxis, etc., can all help people get around. Which leads to another question: if all these other forms of transport (except walking) cost money, why should buses and trains be free? It would undoubtedly express a strong preference for them over any different mode of transportation. Our primary focus should be cars, though, since they are the most problematic form of transport.

One thing about privately owned cars is that they incur mostly fixed costs: purchase price or leasing rates, taxes, insurance, and checkups. The only cost that entirely depends on kilometers driven is gas or electricity cost. Still, the average car spends over 90% of its life in a parking spot, losing resale value and only 10% on the road. As a result, car owners are incentivized to use their car as the primary option to get around, and it will be mostly the cheapest option as well, as they already paid the fixed costs. If we want to minimize the use of cars, we have to reduce car ownership or move to usage-based models like carsharing, shifting from fixed costs to flexible costs. Those should be ideal for people who don’t need a car daily. The advantage is we also have to produce fewer cars because their utilization is higher. Alternatively, we need to make other forms of transport cheaper than the car you own. When we figure in the barrier of ticket purchase, I’m sure there’s only one price that works: zero.

Alternatives to car ownership, combining micro-mobility, public transport, and carsharing when you need it, already exist for those who want to use them. If we want more people to use them, we must make car ownership and use less attractive or the alternatives more attractive. The problem with the former is that it is politically hard to do. Car lobbyists and conservative politicians will frame it as “the war on cars”. Also, it will hurt people with no alternatives available who can’t afford more expensive vehicle use. Making other options more attractive, like introducing free public transportation, will likely meet less opposition. Therefore, let’s focus on this strategy. While charging for using buses and trains is fair, considering that all other options cost money and there’s no right to free mobility, I think it’s a viable way to lead the transition.

Some concerns remain when it comes to a free, tax-funded system. First, it will be considered unfair by those who cannot use it but still have to pay for it. Second, there’s a lack of incentive to improve the availability and quality of the system. Hence, I want to suggest an alternative approach.

Local public transport will be free, and there are no tickets or other access controls. However, it won’t be taxpayer-funded. Instead, there will be a mandatory fee for households and businesses connected to the network. This type of funding is not without precedence. In Germany, every home pays a media fee, separate from taxes, to fund public TV and radio channels. It is justified because everyone benefits from the existence of these media. In other countries, a TV license is mandatory for TV ownership, independent of the consumption of publicly-funded channels. There are also schemes where homeowners must pay for street maintenance in front of their homes. Why not apply something similar to public transportation? Everyone benefits from a good network, including car owners. A national government could define tiers of services, setting expectations on the quality of service. For example, a tier one household or business would have a bus stop within 300 m, from which buses run every 15 minutes during peak hours and every 30 minutes otherwise. Upon meeting the conditions, households pay a fixed fee for access to the network, and businesses might pay a minor percentage of their revenue. Another way to frame this is that the bus stop is a perk that justifies a higher rent.

The advantage of the system I described is that it doesn’t make households outside the network pay for something they can’t use, decreasing the likelihood of opposition. On the other hand, it incentivizes local governments and transport companies to extend their services to include more households and businesses and earn more money by capturing higher tier fees from more participants. The downside, however, is that some car-heavy suburbs might lobby for exclusion from the network to save money. Those who would otherwise lobby against public transportation, in general, may be the same, so at least the damage is contained within their neighborhood.

I’m not saying my system is perfect, but I think it’s at the very least an interesting thought experiment about funding public services. Let me know what you think! I’m curious to see how the discussion continues.

The climate crisis is here, and to prevent the average temperature from rising further, we need to stop increasing the amount of carbon dioxide and other greenhouse gases in the atmosphere. Doing so requires us to transition our energy system. In discussions about this transition in public forums like Twitter, I feel that many people don’t have a deep understanding of the topic. They might say things like “it’s impossible to produce enough electricity” for electric cars while suggesting synthetic fuels as an alternative or insist that we can’t store electricity from renewables and need a complete fossil fuel backup. I don’t claim to be an expert on the topic, but I’ve read quite a bit and will try to reproduce my understanding in a short blog article that aims to clarify some misconceptions. I may also make some mistakes along the way, so if you see any, let me know.

In a nutshell, modern civilization requires energy. We can save some of it through increased efficiency or sufficiency, but we can’t do without it. Our society uses energy in roughly two forms: fuels and electricity. For this purpose, “fuel” shall mean liquids, gases, and solids (e.g., wood and coal) that we burn. Let’s look at the origins of these two forms separately.

The vast amount of fuels is fossils, meaning we burn substances stored in the ground for a very long time. The problem: our current climate relies on their carbon remaining buried instead of released into the atmosphere. There is a consensus that we eventually need to stop burning them. The two alternatives are biofuels and synthetic fuels. Biofuels come from plants that bind CO2 from the atmosphere during growth, making them climate-neutral. We can create some of those from organic waste products, but to produce them at a large scale, we need to grow monocultures of fuel crops which take up a lot of space. Hence, experts generally consider it impossible to replace all fossil fuels with biofuels. For synthetic fuels, we use electrolysis, which requires electrical energy as its input. We’ll get back to those in a bit.

Electricity can come from three sources: we can burn fuels, we can harvest energy from nature (e.g., in the form of sunlight, wind, or streaming water), or we can split atoms. Burning fossil and organic fuels comes with the abovementioned problems, so they are no longer an option. Renewables like solar and wind aren’t reliable because their output depends on the weather. Nuclear power is climate-neutral, but it’s considered risky because of radioactive radiation in its waste products or released by accident. Outside of climate denier circles, there seem to be two groups: those who want to implement a fully renewable system and those who prefer to add nuclear power to the mix. I don’t want to argue in favor or against nuclear in this article, but I want to focus on overcoming the challenges of renewables.

Our electricity demands aren’t constant but follow a curve throughout the day and the year. Electricity production for the public grid must ensure that the production curve matches the consumption curve. If production is higher than consumption, we need to either decrease it or store the excess energy. If production is lower than consumption, we need to either increase it, release energy from storage or reduce consumption (I’ll get to that point later).

We cannot control the production curve for renewables (though we can make some predictions), and we cannot easily handle it for coal and nuclear, which only work efficiently with a steady output. However, natural gas plants can usually ramp up and down production quickly. The combination of renewables and gas works like this: renewables have immediate access to the grid. If their output isn’t enough, we switch on gas-burning plants (called “peakers”) to produce the remaining electricity demand. Our electrical system already does this. And ideally, the more renewables we add to the grid, the less fossil gas we need to burn because there will be smaller peaks to fill. Our current electrical grids already do this, which is why gas considers itself a “transition technology,” and the EU taxonomy for sustainability includes it.

Now, wait, you may now say that the argument that renewables need a fossil backup is indeed correct. However, you don’t need a full backup, and that’s for two reasons. First, renewable availability fluctuates, but not too much, especially if you combine a lot of solar and wind on a large, geographically distributed grid and include running-water and geothermal plants. The latter two provide constant output, and there’s always wind somewhere, especially offshore. So you don’t need to plan for zero. Second, this works with the assumption that we have no storage, which isn’t true. Even today, we have an extensive pump storage system. Admittedly, there is limited space to expand it, but other storage technologies exist, including, but not limited to, electrolysis and fuel production.

You may think we need to build more storage right now, but I’d argue it’s not yet the right time. We must first focus on building additional renewables and expanding the grid to bring them across vast distances from sunny and windy regions to consumers. Storing electricity is expensive and generally incurs losses, meaning you don’t get back the same amount of energy. It is always better to use it immediately, in other words, to control consumption. I understand this can invoke dystopian thoughts of power rationing and blackouts for crucial systems like medical infrastructure. Do we need to drop the idea that we can plug appliances into a power socket whenever we want?!

Control of consumption can comprise pricing strategies that make electricity cheaper when more renewables are available and expensive when there are fewer, ideally shifting loads. It’s called yield management, and it’s pretty standard in a market economy. For industrial use, it can make economic sense to implement the ability to stop production lines in exchange for cheaper electricity prices occasionally. Cars spend a lot of their time parked. They can charge whenever it is most affordable if you keep them plugged in. There are other examples, and a smart grid can manage them without inconveniencing consumers. Cars and commercial applications could probably cover it, so private households have no change (unless they want to leverage it as a discount). However, let’s get back to storage once more.

Due to the losses I’ve mentioned, storage doesn’t make much sense as long as there are fossil peaker plants on the grid. Please read that again because it’s essential. Burning fuel to produce electricity for storage requires more than if you just kept it and burned it later when needed. It’s neither economically nor ecologically sound. It also means that if you build an electrolyzer to produce green hydrogen and synthetic fuel, you should only turn it on when there’s an excess of renewable (or nuclear) energy and switch off all fossil fuel plants first. With the currently deployed renewables, this situation does occur, but it happens so rarely that it wouldn’t be viable to build electrolyzers and other storage systems for those occasions. At worst, we disconnect the electricity surplus and let it go to waste. We likely move through a phase where we have enough excess that it seems we’re wasting it but not yet enough to make it economically viable to deploy more storage. It’s the nature of transition, though, and not a flaw in the system. At some point, storage becomes more viable than fuel-burning plants, and we can dismantle the latter.

After talking so much about electricity, what about the situations where we use fuels directly? One option is synthetic fuels, but they are a form of electricity storage that incurs losses, so it seems evident that using electricity directly is the better option whenever possible. That’s why we should replace gas heaters with electric heat pumps and petrol and diesel cars with electric cars. Often this seems counterintuitive because if, on the one hand, we want to increase efficiency and save electricity whenever possible, why should we add more consumers to the electric grid?

The answer is straightforward, though. Yes, we add electric consumers, but at the same time, we reduce fuel-based energy consumption. Once we’ve accepted that fossil fuels are no longer an option and we don’t have enough biofuels to replace them, we can only choose between using electricity directly or producing fuels from electricity. In this battle, electricity wins practically all the time. Even when disconnected from the grid, such as in vehicles, batteries seem to be more efficient storage than fuels. There are exceptions where the higher energy density and lower fuel weight probably win over batteries, such as in jet fuel for airplanes. For cars and likely for trucks, the decision for batteries is clear.

In summary, to decarbonize our energy system, we need to electrify whatever we can and build a well-connected smart grid. We first must deploy as many renewables as possible on the grid to get regular excess energy. At that point, we need additional storage methods to capture the surplus and feed it back during low production. They gradually replace fossil gas peakers (if the form of storage is hydrogen or another gas, we can repurpose the same plants). The better we keep consumption aligned with production (e.g., through dynamic pricing), the less storage we need. If we decide to keep nuclear power alongside renewables, it can also provide some baseload. It doesn’t mean it solves the challenges in building the renewable-centered system because nuclear is not a peaker technology.

This post outlines my understanding of the coming energy transition. As I said in the beginning, I’m not an expert, just a curious mind. I hope it was helpful. If you find any flaws in my reasoning, please point them out.

I’m on a train to Berlin right now. Today I will make a stop on the way in Göttingen to visit a friend for her birthday. Then I’ll stay in Berlin for one night, before moving on to a small rural village approximately one hour away from Berlin. In that village, which is called Bad Belzig, there’s the Coconat Workation Retreat. The name “Coconat” stands for “coliving and concentrated work in nature”. Due to my interest in remote work and “workations” I’ve known and followed this place for a long while, but this is the first time I’m actually going there, and I’m excited how it will be like. The photos on their website and their Instagram account make it seem like beautiful spot with a very friendly community. I’ll certainly give you an update. Probably I’ll also do another day trip to Berlin from Bad Belzig mid-week. After one week of working from a different location I’ll go and see a friend who lives in another rural village outside Berlin next weekend, before coming back to my hometown. So, my time in Berlin is quite limited during this trip, but if you want to meet while I’m there I might be able to squeeze it in. Feel free to reach out.

Once in a while, you see a tweet that triggers all kinds of thoughts and deserves more than a like, retweet, or 280 characters reply. Anna Gát, the founder of Interintellect, wrote such a tweet for me lately. Here’s a quote: “I organise most of the things that exist in my life. Social, professional, intellectual events and impulses all come to me at my own effort. I’d love to be invited to other people’s parties, initiatives, idea-sharing as a guest sometimes.” Although I’m nowhere near Anna, who literally runs a community that is about organizing and hosting events for others, I felt this is relatable. Let me try and articulate my thoughts.

First, it’s a general rule of any community that most of its members are lurkers. Only a subset of the community actively participates in activities. And an even smaller group initiates anything in the first place. In fact, everything in the world exists because people are willing to take the initiative. We owe these people a lot, and it would be great to see more of them, but we can’t expect everyone to take on these roles. It takes effort and persistence, there’s always a risk involved that your thing fails, and you will face rejection and must not take it personally. On the flip side, you can be the one that makes the thing happen that you wish to exist.

Second, I feel I often enjoy initiating things more than participating in things others organize. It’s for two, probably related, reasons: One is that I like to be in control of what’s happening, and being in the lead lets you do that better. The other is that I sometimes find it hard to navigate social situations regarding roles and hierarchies and find my position in them. Being a leader or initiator gives you a predefined part, which helps. So … it’s all great, right?!

Although I’ve said that organizing things can be better than just participating, sometimes it’s nice to invest less effort into it. Also, sometimes not knowing what is happening is precisely the point. However, the sentiment of the original tweet that I can relate to isn’t about just that. It’s about being invited in the first place. Or, instead, not being invited.

When people attend events or activities you organized, you may start wondering why they showed up. Are they interested in the thing itself? Are they showing up because of you? Or are they just happy that something is happening that they can attend? It would be awkward to ask. I’d assume many people wouldn’t be fully aware of their combination of reasons anyway. But why does it matter? Someone showing up but not inviting you in return feels like rejection, just a different kind. Yes, the other person may be one who never initiates, but what if they do but not invite you? You start realizing you’re having a one-way relationship with that person, where you care about including them, but they simply don’t care about you at all, or, worse, they don’t like you. If they followed your invitation, they didn’t do so because of you, but despite you. Ouch!

The above paragraph may sound full of ego, but it’s the truth that humans, or at least most of them, are social creatures and want to be liked. Or even before they are liked, at least their existence and relevance wants acknowledgment. We want others to care about us. Some of it may seem superficial, like worrying about “likes” or follower-to-following ratio on social media. Still, these are just modern expressions of deeply human desires.

(A consolation for people who are already well-networked and lead a visible social life: others think you are already fully booked and wouldn’t accept an invitation anyway. So, they don’t receive invitations due to anticipation of rejection. If you are one of those others: don’t be afraid! Yes, these somewhat famous people receive many requests and invites and may likely turn you down, but there’s still nothing wrong with asking.)

In the past years I’ve increasingly spent time trying to build connections and participate in communities, both personally and for business (and at the intersection of both). I believe in the importance of a network of strong and weak ties to get ahead in life and work. I’ve invested some time in reaching out, following up, and building a personal CRM. Sometimes I wonder why I did this and whether these efforts pay off. Then, at some point, it hit me that one of the big reasons why I’m doing this is so I can receive the same in return. Again, this may sound shallow and self-centered, but I want to be honest. Every outbound connection is made in anticipation of an inbound connection. Every introduction creates the desire to be introduced to someone in return.

(To avoid misunderstanding, I have wishful goals for myself, and there’s nothing wrong with you having similar purposes. Still, I don’t think you should communicate these as expectations or attempt to run your social life in a tit-for-tat mode. For multiple reasons, including my first thought in this article, there will never be a perfect balance. Some people are natural givers, making others natural takers. And there can be a lot of joy in giving even if you get no return.)

A north star goal could be a life in “inbound mode”, where you stopped doing the work of reaching out and still have a pool of people who reach out to you instead. And I feel the tweet captures the sentiment for me. Yes, being invited to things is about experiencing new things and meeting new people that aren’t part of what you’re doing so far. However, it’s also about the safety of knowing that you still had an active social life even if you ceased any investments in it. The confidence of having people caring about you.

I am unsure if it’s possible or even desirable to live in “inbound mode”, because you will also receive a lot of unwanted attention and people aren’t taking rejections nicely. But it would be nice to get even part of the way there. Until then, let’s continue making the things happen that we want to happen and reach out to the people we want to include.

Scott Stevenson’s article “How To Finally Make Something” came up in a Twitter conversation that started with a tweet on problems with most productivity stuff by Sasha Chapin. In the article, Scott claims that people struggle in their creative process and their most important work because they engage in so-called fantasy games. These games seem to help us progress towards goals, but they can often be a distraction and become a method of procrastination. Scott identifies learning syndrome, tool syndrome, process syndrome, and maintenance syndrome. In a nutshell, people spend time learning (e.g., reading books, taking courses), improving their setup and toolchain, figuring out the best productivity system, and getting bogged down in small maintenance tasks (that they could probably delegate, automate, or remove). If you want to read more about them, check out Scott’s article.

I want to extend his thoughts around these fantasy games, focusing on why we engage in them. A common explanation is that they are easy, and doing the real work is hard. When the real work is creative, we’re putting ourselves out there, making us vulnerable. Our work can be a hit or fail, and unpredictability can be hard to swallow. If we’re unsure about the goals, there may be negative emotions associated with it (which was Sashas point in the original tweet). These are all great points, and I have observed them within myself. Around a year ago, I wrote about “exploration and exploitation”. I connected exploration to procrastination, communities, and the self-help industry (in a follow-up post, I talked about exploration and FOMO as a trap). Reading Scott’s article somehow gave me an epiphany and a new perspective on them.

Let’s talk about the industry first. People understand the value of education and good tooling, so it’s evident that we sell them. Authors, toolmakers, and course creators typically make profits selling their products and not through the outcomes of their buyers and students. Yes, they need success stories or testimonials, but buyers who don’t follow up on their intentions have still brought them money. And those addicted to buying tools and learning material drive down prices for everyone. There’s no criticism of anyone involved here, but we need to understand that there are economic incentives that drive these fantasy games as well. Even if you’re not in the business of selling information, if you want a visible personal brand and be known for something, the best way is to curate information. Your work doesn’t provide enough content to get started (and likely under NDA anyway).

Now let’s talk about community. Of course, commercial communities around exploration are a part of the industry. But even if we remove the profit incentive, humans are (generally speaking) social creatures who like to be part of a network of like-minded peers. Now, there’s the catch. Social connection relies on conversations, but what should the subject of these conversations be? Work is a prominent topic with people in a similar field, and you joined a professional community for that purpose.

Talking about your work to show what you’ve done and asking for feedback can be challenging and makes you vulnerable. It can also appear selfish if everybody talks about that. And now we’re back to the fantasy games. Tools and processes can provide unlimited fuel for conversation and create bonds and sub-identities, all without the discomfort that comes with revealing too much of what you do. A tech industry veteran and a recent boot camp graduate can fight or bond over whether vi or emacs is the better text editor or whether you should indent code with tabs or spaces. If you’re not in tech, I think you can find plenty of examples in your industry or creative field. As I already said earlier, your work doesn’t provide enough talking points, and you don’t want to appear full of yourself, so it’s essential to consume a lot of stuff not just for its own sake but also so you have things to talk about that others may know as well.

Now here’s the flip side of the coin. If you want to build community and bond with peers in your field, it can be instrumental to geek out over tools and processes. The minimal investment you need to make in these areas to do your work may not be sufficient for contributing to a community that rewards knowledgeable members and opinionated takes. Of course, you don’t need to be a top community contributor. You can be happy and productive toiling for yourself and not care about status games and peer recognition, but I believe it makes it harder to socialize. It’s a trade-off.

This realization (which makes sense, I hope) is vital for me. I think I am not very prone to these fantasy games. Sometimes I feel that I should learn more stuff, but I quickly understand that it won’t help me with my goals because I need to put what I already know into action. I also realize that the tools aren’t what is holding me back. If anything is stopping me, it’s perfectionism or lack of resources (due to trying to do too much). I feel I’m now on the other extreme, and sometimes investing a little more into processes and maintenance could be beneficial, but that’s a topic for another day.

For now, I’m getting at the following: I feel I’m not good at socializing and connecting with peers because I’m focused too much on myself and my work and don’t pay enough attention to the talk of the town. Yes, this talk might be just gossip that’s distracting me, but I still feel I want to join the conversation. However, doing so would demand making myself more dependent and connected to what others do and think, something I generally avoid and that would feel inauthentic to me.

I wish I could offer a conclusion to this blog post, but I don’t have any yet. It’s just a point that has gotten clearer to me, and I’d love to hear your thoughts.

Unit testing is mainly used to test smaller parts of your code, like a single class or function. But you can repurpose unit testing frameworks into API testing frameworks with libraries that combine an HTTP client with assertion functions that cover things you typically expect from an API response, such as status codes and headers. Apiritif is one such library for the Python language. My latest guest post for BlazeMeter is a quick tutorial that shows you how to build an API test with Python, nose, and Apiritif. Check it out on the BlazeMeter blog. You can also find a small code snippet on thiscodeWorks.

Disclosure: This work was paid for by BlazeMeter.

Moxie Marlinspike, the founder of the Signal messaging app, wrote a widely shared piece called “My first impressions of web3”. The article explains how many things around blockchain, cryptocurrencies, and NFTs aren’t as decentralized as people think. Running blockchain nodes requires computation power, so crypto wallets and “dApps” need an intermediary that provides a traditional client-server API between them and the blockchain. According to Moxies observations, the ecosystem is highly centralized around just a few of these intermediaries. They have the power to moderate and censor the ecosystem, such as blocking access to NFTs that still exist somewhere on the blockchain.

He starts the blog post with two statements. The first is that people don’t want to run servers, and the second is that platforms move faster than protocols.

I want to address the second statement first. It reiterates a previous post in which Moxie justifies that Signal is centralized. Being centralized allows them to move fast, while open-source and cryptography provide the necessary trust and insight in the platform and guarantee privacy. Apart from end-to-end encrypted messengers like Signal and Threema, Keybase is an excellent example of this model. I agree with him, and I disagree with decentralization purists who believe decentralized systems are always better. Not to be mistaken, I like distributed and federated systems and would love to see more for reasons I’ll get into soon. Still, centralization isn’t evil by definition and can sometimes work well, especially when there are measures to ensure that the interests of all stakeholders are aligned.

Going back to the first statement, I think Moxie makes the common mistake of a false dichotomy. It’s not a choice between everyone running a server or participating in a centralized platform. There’s a lot of middle ground. Think of managed hosting for open-source software—hundreds of companies of all sizes offer this. Smaller SaaS providers that interoperate with each other don’t even need to be open-source to interact with other small SaaS; open protocols are enough. Yes, protocols make change harder, but there’s still potential to innovate at the edge as Hey.com did with email. An intermediary between the end-user and a somewhat messy distributed protocol can do excellent business. It’s a level playing field for different companies competing at the edge without suffering from network effects that let consumers stick with incumbents due to lock-in. It’s my idea of an actual free-market economy.

In other words, it’s not wrong or hurting the decentralization of public blockchains to interact with them through a mediator. Problems start when one of these mediators becomes a monopoly or so strong that it could also be a centralized service. According to Moxie, this is what happens, but web3 proponents generally dismiss the concern because, in theory, there are other mediators. So, why are we seeing so few competitors? And why does the entirety of managed hosting services and micro-SaaS look like a dwarf compared to large cloud computing infrastructures or productivity suites from companies like Google, Microsoft, and Amazon?

Any price for a product on the market contains the R&D and marginal costs for each piece. For software, marginal costs are minimal, even for SaaS, because hosting has gotten cheap. The more you sell, the fewer R&D costs each copy includes. And because dominating a market is both possible and rewarding, venture capitalists are willing to fund unsustainable free products that outcompete bootstrappers trying to build sustainable businesses. Hosting has similar scale effects. Running a website for a few hundred visitors is easy because you only need a single server. Once traffic grows, you need to think about separating web and database instances, vertical and horizontal scaling, and other deployment and operations issues. Getting from a hundred to a million visitors is challenging. However, going to ten million is easier because you probably already have the necessary systems in place. You only need to deploy more instances. Neither markets nor technology rewards beings medium-sized, even though that could be the healthiest option.

Moxie ends his piece with two suggestions on improving our relationship with technology. The first is finding more ways to distribute trust without distributing infrastructure, effectively pushing the Signal/Keybase model. The second is making it easier to build. He claims that creating software has become harder in recent years and that distributed systems could accelerate the trend. I don’t think creating software has become harder per se or continues to do so. It could become even more accessible with better (AI-assisted) developer tools and the proliferation of no-code and low-code platforms that help people become citizen developers. Better technical writing for developer content can also lead people on this journey. In my opinion, one reason building software feels harder is that there are increasingly more tech stacks to choose from, which leads to analysis paralysis. There’s also a tendency to overengineer, such as believing you need to build a React app when static HTML with two lines of jQuery also does the trick. And not every app needs a sophisticated build and deployment pipeline. Finally, our expectations for good software have risen.

APIs are essential for (no-code) creators as they can be an abstraction layer for complexity, whether from underlying protocols and distributed systems or advanced algorithms like machine learning. The crucial question that we need to address is how we can make sure that not everyone relies on the same API and makes the API provider the gatekeeper it shouldn’t be. We need to determine how to build resilience into the API ecosystem by making it easier for upstarts to provide APIs and harder for incumbents to outcompete everyone and dominate the market. I don’t have answers to these questions yet, but a healthy API ecosystem needs to find them eventually.

Moxies piece is valuable because it helps people understand how the crypto and blockchain world works. It’s also refreshing to see more nuanced takes that go beyond uncritical web3 cheerleading on one side and complete naysaying or dismissing it as a scam on the other side.

It’s the time of the year that we Germans call “zwischen den Jahren”, which means “between the years”. One week bridging two holidays - Christmas and New Year’s Eve - the old year seems already over, but the new one hasn’t begun. A little bubble outside of normal time. An excellent opportunity to review and reflect on your life.

However, this isn’t one of those yearly review blog posts that others have written. I’ve decided against doing an annual review, neither publicly on this blog nor privately for myself. The reason is that I don’t see the point right now. That may sound overly negative, but the truth is I didn’t have set specific goals, so I’m not sure against what I should compare the past year. I laid out a few thoughts in my blog posts in January, but I didn’t check in further, and they weren’t actionable enough. Also, the ongoing COVID pandemic still influences our lives, and I don’t want to blame myself for not doing things that the virus prevented. Instead of looking backward, I’d rather look forward.

One of the risks with New Year’s resolutions is that people write down huge lists and believe that a number on the calendar can change their entire personalities and routines overnight. As lovely as that might be, human beings don’t work that way. We need to establish tiny habits and constantly reflect on our progress to compound results. Hence, this blog post isn’t a list of resolutions either.

At this point, I’m setting one single goal for next year. I will bring back something I did a few years ago, a monthly review and goal setting for the next month. I want to get more mindfulness and self-reflection into my life regularly. So yes, there will be goals and resolutions and probably a few experiments with self-improvement in terms of productivity and other areas of life, but on a shorter timescale. Maybe I’ll even add a quarterly review on top of it, but I only commit to the monthly assessment for now.

Still, I want to share a few general thoughts about a few things I want to look at and improve in the future without setting actionable goals at the moment. I want to revisit them in my monthly review sessions.

Many of the things I’m interested in are related to my work. The rest of them fit the labels of either “intellectual” (politics and current affairs, effective altruism, basic income, future of work, etc.) or “nerdy” (board and roleplaying games, sci-fi shows). Time spent with these interests can be solitary (reading, writing, thinking) or social (reading and discussion groups, salons, and meetups). And here are two problems with that: one problem is that all of this stimulates (and strains) my brain, but nothing makes use of my body. A healthy mind can only exist in a healthy body, and I’m sure if I don’t take care of my body - which probably means taking away some time from serving my brain - I will regret that in the long run. And the other problem is that even though I spend time socializing around these interests, I won’t improve in social situations outside structured interactions around topics.

The other theme is mindfully living in the moment and experiencing gratitude for tiny day-to-day experiences. I tend to walk through the world, and my mind is mostly somewhere else, processing thoughts and ideas that are already there instead of soaking up the surroundings. Also, I hardly appreciate the things I’m doing and experiencing. Instead, I often think about what I’m missing out on or what I should have done instead. Sometimes I see tweets and posts from people who seem to be capable of enjoying their life’s moments much better, and I tend to get jealous.

To end this post, let’s reframe these thoughts as questions:

  • How can I exercise and experience my body?
  • How can I find and enjoy different kinds of social interactions?
  • How can I be more present in each moment?
  • How can I appreciate these moments more?

I’m looking forward to finding some answers to those in 2022!

Procrastination is one of the most annoying human behaviors. Even though we realize that it’s often small tasks that we’ve been putting off, and we’d probably feel better if we did them earlier, we can’t seem to go against our tendency to procrastinate. Understanding how procrastination works doesn’t mean we can stop it. At least not immediately. I still believe that understanding how and why we procrastinate may help improve our habits in the long run.

Anne-Laure LeCunff of Ness Labs has published two articles lately, sharing research around procrastination and introducing mental models for understanding the reasons behind this behavior. The DUST model contains four adjectives to describe tasks that we put off: difficult, unclear, scary, or tedious. Another model goes beyond that and includes eight procrastination triggers: boring, frustrating, difficult, stressful, ambiguous, unstructured, unrewarding, and meaningless.

I wanted to write this article to explain my personal experience with procrastination because I found both models not fitting well with what I experienced. I can relate to “unclear” and “ambiguous/unstructured” because I’ve found myself procrastinating when I don’t know exactly how to get started. Apart from that, I found others that I would like to explain.

For me, the main procrastination trigger seems to be a mismatch between the time I would like to spend on a task and the time that I should reasonably spend on it. It’s the choice between building a solution that works or a perfectly engineered solution. It’s the trade-off between executing a process or optimizing the process in ways that take more time now but could eventually (but not guaranteed) save time later. In other words, it’s a perfectionist’s problem—the fear of doing something in a mediocre way results in not doing it (maybe this fits “scary” from the DUST model). My difference is that I’m confident that I would have the skills to do it better, but I don’t have enough time (or the client doesn’t have enough budget). It may be a delusion, but I think it’s an interesting angle that I haven’t seen anywhere else yet.

In some cases, you can deliver what appears to be the same result with a perfect process or one that barely holds together. Whoever asked for the result may not care about the process, and I’m not sure how much the better one pays off in the long run. In these cases, “unrewarding/meaningless” may be good words because I’m doing something just for myself. I may care, but do I care enough to invest extra effort?

Another procrastination trigger is that when it’s apparent that I will miss a deadline or have already missed it, I find it even harder to get started. At least partly, this is the same perfectionism and time problem because I have to do something fast rather than doing it well in those cases. On the other hand, it requires facing yourself and your mistake. It’s easier to forget the looming deadline when you’re distracting yourself than when working on the project with that deadline itself. You may feel like whoever set that deadline, e.g., a client, might appear at every moment, and you have to explain yourself. Luckily, this is relatively easy to solve: ask for an extension of the deadline. Own your failure of delivering on time, and the stress dissolves. Then, you can focus on completing the task for the new deadline.

There’s another trigger that one could consider a combination of the previous two. I assume that I share this problem with other freelancers, entrepreneurs, and people who have a lot of priorities to juggle without clear order or who don’t like saying “no”. When you’re doing multiple projects in parallel, you will often end up overcommitting, and you will not be able to fulfill everything. It means you may have to deliver a flawed product or deliver too late, and you have to choose who you’re going to disappoint in which way. In these cases, I find that perfectionism leads to resignation. If I can’t satisfy all requirements, what’s the point in doing anything at all? I often find that I end up being tired, and I’m not sure if I’ve genuinely run out of steam or if it’s just a convenient excuse. However, once I’ve entirely accepted the situation that I’m in and then take a good rest, it’s easier to get back to my tasks the next day without procrastination.

I’m interested in your feedback! Can you relate to my experiences, or have you noticed some others for yourself?

Our book’s pre-release (MEAP) received two more updates since my last post. Now the missing chapters 18, 19, 20, and 21 for “Designing APIs with Swagger and OpenAPI” have been published as well. In chapters 18, 19, and 20, we’re looking at various advanced OpenAPI topics that help API designers refine their API definition and include as much machine-readable meta information as possible.

Chapter 18 is about filters, pagination, and sorting, topics of utmost importance for any API that provides access to an extensive dataset. Chapter 19 covers error handling. Finally, chapter 20 gives an excellent overview of the data validation capabilities of JSON schema that API providers can use for input validation. All three extend the PetSitter sample API that we use throughout the second and third parts of the book.

Our final chapter, 21, covers the next steps you have to take once you make a private or partner API available to the general public. We highlight the most critical API design issues and introduce the “API exposure index” as a way to decide and describe how much of your API you want to publish and which parts you want to keep private.

We’re getting closer and closer to the finish line. We only need to complete the final review and add the appendix(es). Then, the book enters production.

If you haven’t preordered the book yet, it’s a good time to do so. I am looking forward to your thoughts on these topics as well.

Polywork is a new term that describes the concept of choosing multiple part-time jobs or freelance contracts over a single full-time job, primarily when those jobs or gigs cover various areas of interest. I first heard the term when the namesake social network Polywork launched, which considers itself an alternative to traditional business networks like LinkedIn, designed with “poly workers” in mind. The term appears beyond the company, for example, in Neville A Mehra’s “Polywork, Personal Brands, and Jobs of the Future”. It also describes what I do, being a freelance entrepreneur who always works for different clients at the same time and covers various tasks such as software development, technical writing, and consulting.

Last night I saw a tweet that triggered writing this article. It featured two screenshots of articles describing polywork as a new trend embraced by millennials and Gen Z, captioned with: “They’ve come up with a new word for desperately working multiple jobs just to be able to afford rent.” Many of the comments agree with the original tweet, adding other words like “exploitation” in the mix. Now, what’s the truth about polywork? Is it “desire or necessity”, as a Forbes article titled it?

We live in exciting times with a lot of things changing around us due to digital transformation. We further live in times of rising economic inequality and insecurity in a lot of countries. There’s also a vast diversity of (sub-)cultures and lifestyles. One of the problems with this world is that it makes it increasingly difficult to throw large parts of the population together and describe them accurately. Any attempt to define millennials or Gen Z (or any other generation) as a whole is an oversimplification that ignores different economic realities and levels of privilege.

The truth is that one person can be forced into something that is a choice for another. You can be a freelancer because nobody wants to give you a full-time job, or you can choose it because you value freedom and diversity and don’t want to make yourself dependent on a single employer. Of course, the economic reality of the first person is terrible, and we should improve it, but that doesn’t mean that the choice of the second person is invalid. It’s wrong to assume that they’ve just been gaslit into believing they made a choice and they’d be happier with stable employment.

There’s the widespread belief among some in the political left, especially those closely aligned with worker’s unions, that the best way to end economic precarity is to make sure that everybody has a 9-5 job with strong worker protections. While I welcome the availability of jobs for those who want them, I believe it’s challenging to organize the whole economy around them. The necessities of modern companies require on-demand expertise that flexible contractors can bring to the table. Instead of forcing the 9-5 model on everyone, we should have different ways of social protection for freelancers and other poly workers, such as a universal basic income.

The whole concept doesn’t just apply to work but also to consumption habits. Let me tell you a story from my childhood. Our neighbors used to go on a skiing vacation every winter. Once, their son came to us and said: “I feel sorry for you that you can’t afford to go on vacation.” This child’s assessment was wrong because my parents could well afford it. They were just not interested in skiing.

One of the reasons for overconsumption is that people want to signal their purchase power. There are counter-movements like minimalism, but they’re still a niche. Again, some people may want to own a single-family home, a car, etc. but can’t afford one. Others prefer to rent an apartment or use carsharing for flexibility and avoid the responsibility of ownership, even though they could own more stuff. It’s crucial, however, to not mistake one for the other. We must improve the economic circumstances of the poor, but at the same time, there are benefits when the rich choose to work and consume less or differently. Having to do things due to poverty is not a “trend”, but neither is it helpful to force the middle-class and the rich into a “normal” lifestyle of overwork and overconsumption.

Path traversal attacks are a typical attack vector that compromises the security of APIs and web applications. It’s an injection attack where the perpetrator tries to access or modify private files on the webserver. I recently wrote a guest post for Stackhawk about path traversal attacks in PHP applications built with the Laravel framework. In the piece, I’m discussing what path traversal attacks are, how they occur, and how to prevent them. It was the second piece I wrote for Stackhawk after covering CORS in Laravel applications.

API security (and web application security in general) is a crucial topic if you care about the integrity of your systems and the privacy of your users. And still, things go wrong, so it’s necessary to raise more awareness, which I’m happy to do.

Disclosure: This work was paid for by StackHawk.

I have news to announce regarding the book about designing APIs with OpenAPI and Swagger that I’m writing together with Josh Ponelat. We finished all chapters except for the appendixes and are now in the exciting final review phase. While the whole book is probably still a few weeks from production, this was an important milestone on the way, and we’re proud we made it this far.

Also, the first two chapters of the third part of the book - 16 and 17 - are now available on Manning’s website as part of the Manning Early Access Program (MEAP). In the third part, we’re taking the API from the sample application we have built during part two and refine it to improve the developer experience for an eventual release of the API. We also extend its functionality and discuss bringing in a new version of API. In chapter 16, we’re outlining the whole process and update our user stories and domain model. In chapter 17, we’re adding a new feature, which leads us to discuss composition keywords in OpenAPI that help design more complex and still reusable schemas.

If that’s something you’re interested in (I bet you are!), please pre-order the book, read the new chapters and let me know your feedback.

Universal Basic Income (UBI) is the idea that every citizen should receive a monthly sum of money with no strings attached, regardless of other income sources. The idea isn’t exactly new, and it has supporters and opponents anywhere on the political spectrum. It also featured prominently during the pandemic. So far, no country has implemented it, but there are a variety of experiments. None of these reflect the universality of a basic income, but they’re helpful nonetheless. I hosted an Interintellect salon - my debut as a solo host after my Personal CRM salon co-hosted with Vajresh Balaji - to discuss the idea with fellow curious minds.

As is usual with salons, I asked an intro question, which was: “Who do you think would benefit from UBI?” We talked about cash transfers for low-income countries through charities like GiveDirectly, an approach popular in the Effective Altruism community. We also mentioned creative and innovative people in rich countries who may not currently have the freedom to invent or express their creativity as they’re stuck in their jobs. It reminded me of the description of basic income as “venture capital for the people”.

How high should basic income be? Public discussion centers around round numbers like $1000/month or a minimum livable wage equivalent. An alternative would be defining it as the percentage of the average or median income. The definition of what a minimum livable wage is may change, so tying it to existing wages avoids the discussion. Another idea is to look at current government spending per person and pay it out directly. The latter leads to another question, whose answer seems to depend on whether you’re more on the left side of the political spectrum or more libertarian. Which public services can and should basic income replace? Should we even see it as a replacement or more as an add-on to the current services? While large infrastructure projects such as flood defense should probably remain with the government, they could privatize communal services like swimming pools. Of course, it’s too early to propose anything specific, so we didn’t spend a lot of time discussing this point. There should be more research first.

If there was a way to implement basic income on a global scale, it could give people additional opportunities to move around the world and find the life that fits them. Even though it’s a fascinating idea, it’s probably even further away than national basic income. There are, however, exciting approaches for voluntary funded basic income that doesn’t stop at national borders. Most use blockchain and cryptocurrencies. Examples include Circles and GoodDollar. We’re not yet fully convinced, especially since these often create custom coins that don’t have serious trade value, so they need a lot of trust and buy-in into their currency first. How far can voluntary approaches go anyway, in terms of funding basic income or other worthy causes? High-income countries and businesses could do more to drive people to give to charity, for example, by offering benefits in exchange for (zero-knowledge) proofs of donation. They could also give people more say in where their tax dollars go, although that may be unfair and undemocratic when it gives high-income individuals more influence on the state’s budget.

A common criticism against basic income is that it’s people’s fault when they’re poor. Therefore, we shouldn’t give to “undeserving” people. However, we believe that poverty is mostly the cause of bad decisions, not its outcome. We should also look at the future where society benefits when we allow people to recover and grow. Another point of criticism is that, because basic income is a substantial money redistribution machine, it gives too much power to the state. The government might eventually use that as an excuse to increase demands on their citizens. Asking how basic income influences the job market, people are forced to take any job to survive without it. As a result, it currently creates pay rates below market rates, leading to an unfair market. That would change.

Our last point of discussion was whether technological unemployment would become so common that it’s a solid argument to make basic income necessary? We’re unsure. On the one hand, there is no precedence for new technologies destroying more jobs than they create. On the other hand, it’s much more likely now, primarily due to the differences between manual work and knowledge work.

Overall, the salon was a good discussion and exchange of ideas and thoughts. I’m looking forward to continuing the conversation some other time.

Racket is an exciting new social audio platform. Unlike other recently hyped real-time social audio apps such as Clubhouse, which Twitter copied with its Spaces product, Racket is a fresh take on podcasting. If you wanted to make an “X for Y” pitch for the product, you could call it Twitter for podcasting. Twitter is micro-blogging, and Racket is micro-casting. Every podcast episode, if you even want to call it that, on Racket has a limit of nine minutes. That makes them great to listen to during a short break. They don’t require the time commitment to listen to an hour-long podcast. Recording on Racket is an excellent exercise in bringing your message across in a world with short attention spans, as the medium forces you to be concise with your spoken word.

I have shared my thoughts about Racket and audio as a medium in my first solo recording and a conversation with my friend Clo. And that brings me to the second advantage of the platform. It makes recording podcasts with multiple people as easy as it can be. You can record directly on their website with the studio feature, and you can share the URL to that studio page with anyone. When they go to that page, and you approve them, you’re immediately connected. First, you can have an unrecorded conversation to get ready. Then, the studio owner hits the Record button, and the recording starts.

At the end of the recording, your podcast episode goes live immediately. If you recorded with two or more people, it appears on everyone’s profile. The latter feature improves discovery because people following just one of the participants can discover another person and their profile from this recording. It also solves the use case that some people have voiced about finding and listening to interviews with the same person on different podcasts. Of course, it works just within the walled garden that is Racket and not throughout the whole decentralized podcast ecosystem, but it’s a start.

Even though Racket takes out the complexity of recording conversations and interviews, you still have to schedule time for them. That’s where another appealing feature comes in: “Ask me anything”. Every Racket user has an AMA page where others can record a question for them. The user can then decide that they want to answer. Racket stitches question and answer together into one recording. Here’s my AMA page, and here’s the first question I received and the answer I’ve given. There’s also a related feature called “Volley” where multiple people can answer the same question, but I haven’t tried that and won’t comment on it.

My main concern with the platform right now is that I don’t see a business model yet. Will there be pre-roll ads or subscription fees? There’s no information yet, and a conversation I had with Stu from Racket wasn’t reassuring. I’m generally enthusiastic about new social media platforms (even centralized ones) because they stir things up and provide new means of expression outside the existing platforms like Twitter and Facebook. Without a sustainable business model, though, there’s always the chance that the company will get acquired (and listed on “Our Incredible Journey”), and their network ends up as a feature of a larger platform that boosts its dominant position that way. Although, to be fair, acquisitions happen even for companies that have found their product-market fit and are profitable, so that’s always a risk when you put time into a social network.

If you want to try Racket, please use my AMA page or contact me if you’d like to record a conversation with me.

Mishka Orakzai is the founder of thiscodeWorks, a Pinterest-inspired website for developers to share snippets of code. Lately, she hosted an Interintellect salon about coding to discuss the strong push towards learning to code. That coding literacy movement includes, for example, coding boot camps and events like Hour of Code. In our conversation at the salon, we took a step back first and tried to establish the meaning of coding literacy.

One way to describe coding literacy is thinking of it as a spectrum, with no-code being the low floor and advanced software engineering the high ceiling. The first and foremost goal is to demystify computing and develop a judgment of what’s even possible. Also, coding is a way of thinking, which I like to describe as algorithmic (or computational) thinking: being specific enough in your instructions to a dumb machine. Computers are deterministic and cannot understand ambiguity like humans. It’s possible to establish this mindset with a bit of self-taught coding without becoming a developer yourself. One participant mentioned he’s doing a “coder dojo” with his 10- and 12-year old kids. Even “toy programming” (think Roblox and Scratch) is still “real programming”, which makes it exciting, especially compared to other forms of building.

We talked about the education system as well. Compared to other subjects, high school computer science is relatively young, and the way it’s taught isn’t always good and sometimes doesn’t even cover coding. It may explain why few kids are excited about coding. On the other hand, maybe we’re expecting too much. Most children learn to pass tests and not because they’re passionate about every subject and want to continue learning in their free time. And nobody should feel guilty about not wanting to code. A more project-based way of teaching could improve education, though.

What’s the benefit of coding? Is the coding literacy movement’s purpose solely filling the demands of the growing tech sector? While that’s possibly true, coding can have additional benefits even when you don’t become a developer. For example, people in marketing can benefit from HTML knowledge. Again, the way of thinking can help in various ways. In the API sector, which is my primary field of work, there’s a lot of conversation about making the technical capabilities of APIs accessible to non-developers and more mainstream (lovely quote: “business developers are developers, too”). These capabilities can go beyond what the API provider intended. Coding can be a creative tool to unlock new possibilities (think of using a cup as a paperweight instead of a cup). However, it’s not the only one.

People like to have a creative outlet. It can be coding, sometimes it’s something else like homemaking, and for others, it’s creating TikTok videos. Sometimes we tend to think that previous generations were more creative, and our modern devices (like the iPad) are primarily consumption machines. For us nerds, it’s often the nostalgia of 90s websites. It’s important to remember, though, that in any community, it’s always few who create for a majority of consumers (look at the 90-9-1 rule). We believe that coding is an excellent outlet for creative building because you don’t need physical tools and material, driving the marginal costs to zero. That makes it accessible. Builders can avert the downside of non-tangible results with hybrid forms where digital things manifest physically, for example, through 3D printing.

Going beyond coding, Mishka had Marc Andreesen’s article “It’s time to build” on her reading list for the salon. Andreesen complains about a lack of desire to build stuff to solve problems in the world. We believe that there’s certain laziness and comfort in the Western world, and we make things for sufficiency rather than resilience. COVID-19 was a good wake-up call. Countries like Israel who are in a perpetual crisis mode were more capable of handling the pandemic than the West who’s invested in the good-enough status quo. Some people may have thought of themselves and their country as limited in the developing world, but remote work, often including coding, helps them grow out of that.

At the end of the salon, we discussed whether coding would remain an in-demand skill. We believe that digital transformation will change everything. No-code automation may make coding less critical, but related roles like user experience or management are growing. With artificially intelligent systems, new skills will become necessary. One participant described coming up with good prompts for GPT-3 as a coding-adjacent skill but more like writing magic spells. Interdisciplinary thinking becomes increasingly important, and the mindset learned through coding can help combine things and assist in learning other skills.

In summary, coding remains an excellent skill to have, but it’s not the most critical skill. Building the future is more than building apps. However, the coding literacy movement could provide a good blueprint for other fields to teach their skillset to a broader public.

Dominic Duffin’s recent Interintellect salon had the title “Time versus Space: The Geographies of a Digital World”. After having a good time at Dominic’s previous salon about our spaces on the Internet, which I summarized on my blog, I wanted to participate in this follow-up conversation. Once again, it was a smaller group of participants, which I found astonishing, considering how important the topic is, in my opinion. The pandemic has driven us to spend more time in digital spaces. As the world, or at least parts of it, slowly return to normal, it will be fascinating to observe the next transition.

Before writing about the salon, I want to mention another conversation I recently had with members from different effective altruism local groups in the GSA/DACH region. Group events had moved online with COVID-19, and most members can’t wait to meet in person again. On the other hand, there are certain benefits to virtual meetups. You don’t have to find a space, you save time going there, and it’s much easier to bring in guests and speakers from different places. The theory is that interest-based groups will eventually operate in a hybrid model, with events focused on working and learning happening online and social get-togethers happening offline. We see that happen with Interintellect as well. Most topic-based salons and series are still online, and the first IRL meetups are less topic-bound and more social. Since some salons are very niche, it may be hard to find enough interested participants in a single location, and you’d lose the benefits of international exchange.

Now back to Dominic’s salon on virtual geographies. His intro question was: “How relevant are your physical location and your timezone to your online life?” Timezones are the big differentiator and remind us that we don’t live in a single global village but on a round planet, even online. A participant from the US west coast remarked that the big political news of the day has always already happened by the time he wakes up. However, timezones can be an advantage, too, by distributing work shifts around the globe and providing 24/7 support even in a small team with everyone having regular workdays. Big global business used to be 24/7 for a while, and now it seems that it’s happening for all, leaving us to wonder why stock markets still have opening hours.

Even though the salon description used the analogy of a city where many activities happened, interestingly, most of our discussion at the salon focused on remote work. The pandemic has accelerated the information age. The upcoming significant difference after remote, on-site, and hybrid work is synchronous versus asynchronous work. Not every company can work in either model, but it can have vast advantages to implement the asynchronous model. Pieter Levels described the benefits for individuals in one of his articles, and we talked about hand-off between different timezones, which suits the asynchronous model well. It requires other tools and a distinct skillset, mainly writing. That leads us to the next topic, language.

Regarding languages, a participant from India gave us fascinating insights into their country. India has many local languages, and people are proud and protective of their native tongue. That makes it difficult to establish a shared Indian identity, for example, when the prime minister gives speeches in Hindi, a language that not all of his citizens understand. English is the standard business language in metropolitan cities, but language creates a division outside of them. As India’s relevance as a market for international companies grows, they’re increasingly localizing their products in Indian languages instead of just English.

Culture is another crucial aspect. For those spending a lot of time online, the global Internet culture can override local culture for the individual, especially younger generations. It can also influence local culture in general. Currently, global Internet culture’s strongest influences come from the US, but that’s changing as more people from other countries appear online. That change comes from countries with large English-speaking populations, though, like India and Nigeria. So far, we don’t see any attempts from China to push Chinese culture into global culture. They appear more focused on isolating themselves.

Is the Internet a single digital megacity or multiple cities? While there are overlapping spheres, filter bubbles are a real thing. The Internet influences what happens offline, for example, when a Facebook post causes people to form violent mobs in the real world. The division itself isn’t an online thing, though. In the US, self-division happens, and people choose to live in either conservative or liberal areas. How important is it to have diversity, though? Just bringing in different people is not sufficient. They also have to be willing to listen to each other. Something you always have to be aware of is that the loudest voices aren’t necessarily representative.

Later in the salon, we went back to COVID-19 and how it will change things. We believe that the “genie is out of the bottle” for remote work, and nobody can put it back in. There will be more options and more flexibility. However, remote work may affect those who can’t work remotely as well. If white-collar work happens remotely within the same organization, whereas blue-collar work happens on-site, it can create a divide between these groups. However, if we’re honest, often this divide already exists. Outside of work, we believe that arts and culture will go back to taking place in the real world, but movie theaters may no longer be the only place for the first screening of a new movie.

One participant mentioned that he wouldn’t have joined Interintellect salons offline. The online events allow for a broader range of backgrounds and viewpoints, and some conversations and connections probably wouldn’t have happened outside the Internet. However, there is still some division between digital natives and those who feel less comfortable using digital technologies.

At the end of the salon, we briefly mentioned relevant topics that we didn’t touch. Remote worker compensation and digital tools in government are just two of them. Maybe Dominic will host another salon for them. For now, he has planned “Digital Collectibles: Ownership and Scarcity; Infinity and Ephemerality?”.

Browsers restrict API requests to the same origin domain. CORS, or cross-origin-resource-sharing, is a method to overcome this restriction in a well-defined manner. If you’re on the receiving end of a CORS request, or, in other words, if you want your API to receive requests from different origins, you need to configure CORS in your web application framework. Assuming your framework is Laravel, you can read my introduction piece, “Laravel CORS Guide: What It Is and How to Enable It”, which I wrote as a guest post for the StackHawk blog (my first for them!). In it, I cover what CORS is, whether you need it, whether Laravel is the right place to control it (e.g., instead of a reverse proxy), and where to enable it in different versions of the framework. My emphasis is on minimizing the exposed surface. Check out the article now.

Disclosure: This work was paid for by StackHawk.

Interintellect member Dominic Duffin hosted his first salon. The topic was “Our Spaces on the Internet: Personal Websites and Social Media”. I was curious about this discussion, considering my engagement in various social networking apps, communities, and the IndieWeb. We started the salon, one of the smaller ones, by sharing our online spaces. Some of us had websites. Others were active social media users, and some just curious.

Within the group, there seemed to be a trend towards a unification of our online identity. One participant mentioned two websites, another had three Twitter accounts, but they want to combine them. I’m not sure if this trend is general, but people are willing to show a more holistic image instead of limiting them to one aspect. Undoubtedly, the Interintellect, with its emphasis on multifaceted people and interdisciplinary thinking, is to blame.

However, the ability to bring your whole self to the Internet is a privilege and depends on your risk budget. For example, you need to decide whether or not to show less proud parts of your past. There is a cultural difference in how much, for example, employers are will to accept. Also, you’re less likely to experience adverse effects from your non-professional online activities in an in-demand industry.

In other parts, the online presence became more sanitized, more corporate, with people trying to establish a professional identity. That is in stark contrast with the Internet of the 90ies which was a wild west that had no professional aspects for most people. Of course, people still build purely personal websites, but they are comparatively rare. Enormous social media companies, now turned cultural forces, drove standardization of online representation. However, can Facebook and Instagram represent us? And should Silicon Valley have that much power?

The IndieWeb and decentralized social networks like Mastodon can be a solution. However, it’s almost impossible to avoid mainstream social media in some professions and industries, so you have to use them even if you don’t love them. And there’s value in them for networking because they provide additional context compared to, let’s say, a cold email when reaching out to people. Next, you can leverage these networks and funnel your audience into a place you control. The IndieWeb community, for example, promotes POSSE: Publish On (Your) Own Site, Syndicate Elsewhere.

When it comes to the spaces under our control, we talked about building websites that are fun to explore and feel like the person they represent but are still cohesive. It’s nice to put some fun elements and show off what you can do. However, that begs the question of how website building skills create a divide between those who have them and the rest. Hiring a developer doesn’t seem to have a good track record. Doing it yourself using no-code tools like Squarespace and WordPress seems to be better. It’s also crucial to only build what you can maintain. Otherwise, your website becomes stale.

Our personal spaces also suffer from decreasing attention spans and instant gratification from social media. Asking our audiences to jump from a social media app to our websites can already be too much friction. That’s an unsolved problem.

Finally, we talked about real names and pseudonyms. The loss of pseudo-anonymity has been a massive issue with the expectation of using real names online in public spaces. That’s why the cozy web, the parts of our online lives hidden from the public, is growing as well. To explain the naming shift, I suggested a model of three generations. The first is online-only, a parallel world where the first nerds interacted solely through pseudonyms - from early BBS to IRC. The second generation is offline-first, where online spaces primarily represent our offline social circles - think Facebook. The third generation is hybrid communities, where people virtually interact under their real identities and may eventually meet in the real world. Online and offline is no longer a different sphere but just two different modes of interaction.

Dominic may be following up with other salons on related topics, so make sure you stay tuned to the Interintellect.

It’s time for another update on “Designing APIs with Swagger and OpenAPI”, the upcoming API design book from Manning Publications that I’m writing together with Josh Ponelat. Since my last update, we’ve made a lot of progress, and we’re near the finish line for the book. We’ve slightly adjusted the table of contents in the previous months and restructured the material into three parts instead of four. While we’re busy working on part three, the second part is now fully published on MEAP (Manning Early Access Program).

At the beginning of the second part, which was part of our previous MEAP release, we introduced a fictional development team and their project. The team decided on an API Design First approach and created their OpenAPI description based on a domain model and user stories. In the remaining chapters of the second part, we’re going on the journey from design to implementation. Our topics range from auto-generating code with OpenAPI to additional crucial issues such as authentication. Throughout, one of our major themes is the workflow for handling API changes to ensure that the OpenAPI description remains the single source of truth upon which every developer can build. Through a great process, frontend and backend developers can work independently, and in the end, their components will still work together.

You can preorder the book “Designing APIs with Swagger and OpenAPI” on Manning’s website now, get immediate access to MEAP and receive a full ebook or physical book later.

Performance is a crucial aspect of APIs. Stress testing is one way to determine an API’s performance and behavior when load levels are critical. Will your API fail under stress or behave in unusual ways? For BlazeMeter, I wrote an article titled “3 Things to Look Out for When Stress Testing Your API”. The first thing I highlight is the environment in which you run your tests. The second aspect is the traffic patterns you test. Finally, the third issue is the assertions you include in your tests. Head over to BlazeMeter’s blog to read the full article.

Disclosure: This work was paid for by BlazeMeter.

With COVID-19 still preventing in-person conferences in most parts of the world, API the Docs started the third season of their virtual events series. As usual, I’m attending these events to learn more about APIs and developer experience and gain insights into the problems and solutions from different companies in the space. Here’s my subjective summary of the latest installment.

First of all, I find it impressive that they did an event with an all-women speaker lineup, rare for technical talks. I enjoy this arrangement because it normalizes women in tech while avoiding direct comparisons between speakers that are (subconsciously) based on gender, which is a risk of token representation.

Yantian You, the first speaker of the night, shared the journey of SAS as they moved from code-first to design-first when it comes to creating APIs. Yantian also showed where the design process starts: with post-its on whiteboards, not API design tools. Those come next, of course, and SAS has built a pretty impressive internal toolchain in their continuous integration (CI) pipeline. It even includes server code generation to assist backend developers after API changes. There’s also a custom tooling package with features such as linting and contract testing that works locally and in CI.

Next in line, Anna Tsolakou from Amadeus made her case for building a developer relations (DevRel) team. She said that DevRel is a diverse team with different roles representing the customers internally and, on the other hand, the API outside of the company. According to Anna, there are three rough areas of activities. The first is developer experience, which includes SDKs and documentation. What I found impressive is the massive impact of SDKs on developer productivity, even for senior developers. However, I’m wondering how reproducible these tests are for different API designs and tech stacks. For documentation, Anna quoted that they got 300% more visits to their blog after increasing the ratio of educational content (now at 80%) over promotional content. In combination with video content and open source sample apps, it is totally in line with my take on the relevance of developer content. The second area is community-building. Events like hackathons are excellent for feedback. Amadeus uses Discord as an online forum, and engaging with OSS communities and collecting feedback outside standard channels are essential activities. That is the third critical area. The DevRel team collects feedback through various channels and aggregates it for internal use.

The last speaker of the day, Mihaela Ghidersa, gave a critical perspective on the backend-for-frontend (BFF) design pattern and suggested GraphQL as an alternative. She spoke about the changing responsibilities and shifting complexities of backend and frontend, which may lead to a “war” between developers in each area who blame the others for problems. Those usually start when the frontend needs additional data and developers need to negotiate the balance between fat payloads and chattiness. The BFF design pattern allows frontend developers to build a custom backend as middleware in front of the backend API. A BFF is typically more complex than an API gateway, but the key differentiator is ownership by a single client team. With GraphQL, there is just one backend API. Frontend developers can formulate queries to get the data that they need for their clients. It’s no silver bullet, though, and developers should take a full-stack perspective and choose which architecture works best for them while having empathy for different teams and perspectives.

The following virtual API the Docs event takes place on the 5th May, and tickets are available for free.

Making friends and staying in touch with friends are essential parts of our shared humanity. More than ever, the whole world of people is available to us through our computers and smartphones. With the communities we belong to, we can continuously make friends. Staying in touch, however, is a different beast. I started using a Personal CRM and hosted a Ness Labs community meetup earlier this year to discuss the subject. The hour-long meetup was an excellent opportunity to demonstrate technical setups. Still, it wasn’t nearly enough time to dive into the “Why?” behind our social networks and reaching out to people. To give the philosophical side of it the time it deserves, I teamed up with Vajresh Balaji, and we co-hosted a three-hour Interintellect salon. We titled it “Cheating on Dunbar”, cheekily referring to the popular Dunbar number that states that we can only maintain around 150 people in our heads.

With nine participants, the salon was one of the more intimate ones. At least some mentioned not being good at socializing as a motivation for attending, feeling that it limits them. As an intro question, we asked them to tell an exciting or unusual story about making a new contact. We heard about someone finding a co-worker they didn’t know they were working with through Twitter. Someone else mentioned a life-long friend they made in college, even though initially thinking they had nothing in common with that person. Another story included a random encounter at an airport.

Interestingly, online communities came up quite a lot. Most of us introduced ourselves by mentioning communities in which we participate. We talked about how every community has a different feel and how even interacting through text-based media as forums and Twitter gives you many insights into other people. Each community can also be a springboard to find the next. Their advantage as social gathering spaces over schools and workplaces is that these virtual groups can stick with us over a more extended period.

On the other end of the spectrum, though, we also talked about offline activities like CampContact and improvised dancing, including physical touch and authentic relating to connecting with people. The sensual part is often missing in our interpersonal encounters, especially during the pandemic where hugs are a no-go. As a virtual replacement, some people remain on video calls during the night, and there’s even a thing called “Lullaby Club” on the Clubhouse app where people stay connected to others while they’re sleeping.

Of course, there are also offline communities we’re part of, like neighborhoods. Those are not usually the people we have most in common with, but they are necessary as a local support network. My neighbor is more likely to notice when I’ve gone missing than a person who follows me on Twitter where someone else easily captures the attention instead. Rebuilding these local bonds can be challenging after moving to a new place.

Whether online or offline, only a subset of the people you meet “graduate” into being your friends outside the community you initially met. We talked about how communities can facilitate this. Our take is that there’s a need for (pseudo-)proximity and repeating interactions, both planned and unplanned. Hence the best online communities are well-organized and have regular events or meetups as well as a space to stay connected (a forum or chat, for example). They need to provide opportunities where connections can happen. It’s also essential for deep and meaningful relationships to have a setting that allows people to let their guard down.

Can we measure the ROI (return-on-invest) for relationships and community participation? We found no framework to describe this. It’s just an intuitive thing. One problem is the timescale, considering the return may be coming much later. In general, though, friendships are not transactional, and socializing usually feels valuable. And if it meets your need, why would you look too hard at the cost?! There are also potential adverse reactions when we think of relationships, especially outside of professional contacts, in these terms.

The next part of the discussion was about note-taking. Most of us did take notes about online events and conversations. Still, we also pointed out that a lot of communication is self-documenting, e.g., in messenger apps, in social networks, or the camera roll on our phones. There’s no need to write down everything, only when it’s insightful. As one participant put it nicely, one goal in any relationship is to have conversations that are so rich and valuable that you want to take notes about them.

Even when notes only capture the surface and contain mostly facts and only a few emotions, we wouldn’t necessarily want the other person or anybody else to read them, for example, because they might include wrong impressions of a person (in line with Rockefeller). There shouldn’t be any stigma attached to note-taking as a way to invest in a relationship. We can frame it as an accessibility tool instead. Something we briefly touched upon was the danger of losing access to digital tools and how open-source and export abilities counteract those.

We also talked about reconnecting and regularly staying in touch. Reaching out on a schedule can be awkward, as the other person probably will notice you’re reaching out as an obligation, but there can still be value in it. One participant mentioned a strategic list of people she’d like to be closer with and how she could achieve it.

One of the objectives of excelling at maintaining notes about your contacts can be to connect other people, for example, when they’re looking for a job or based upon shared interests. None of us did that strategically or tracked the impact, but we relate to the joy that it brings.

Overall, the salon was an delightful conversation that, as expected, didn’t answer all our questions but probably brought us all a step closer to being better at relationships. As these free-flow discussions always turn out different than anticipated, I didn’t expect us to have such a deep focus on communities. Maybe I’m underestimating their function.

Perfectionism is a topic of interest for me, so I was pleased to learn that Anwar Al-Kandari hosts an Interintellect salon on the subject. The event time wasn’t working well for me, so I could only attend for the first one-and-a-half hours, but I found these already quite valuable. Hence, I decided to make another little salon write-up for my blog to work through my notes.

Interintellect salons typically start with an intro question. Anwar asked us how perfectionism affects various aspects of our lives. Most of us had stories to tell about the negative aspects of perfectionism, with one participant going as far as calling it a “disease”. Another one said she saw perfectionism destroy other people, which made her views turn 180 degrees. But why is perfectionism so dangerous?

The most significant risk is that nothing ever gets done. We either never even start or spend time doing research (“procrasti-learning”) instead of doing the work we need to do and learn-by-doing. Perfectionism is incompatible with finite budgets, and we all have limits. Another danger is that we become unable to celebrate small wins and only focus on our shortcomings. Quite likely, the practice of “ghosting” another person comes from applying perfectionism to communication and conversations. It can also hurt relationships when we enter them with ideas about, e.g., the “perfect marriage”.

A recurring theme of the conversation was comparisons. We tend to compare ourselves with people we want to be like, but these people are often the best in a specific field. That can set an unattainable standard. A root cause for perfectionism could be that a person develops a taste for quality within a particular area, let’s say music, before acquiring the skills to produce the same quality themselves. A critical thought from the salon that I previously expressed in my musings on “parallel focus” and “serial focus” is that you can hardly compare, for example, the results of your part-time passion for playing music with full-time professional musicians. We also talked about comparing ourselves to people who are at a different stage of their lives. An older person had more time to refine their skills while at the same time there’s some pressure on succeeding young. Competitiveness in your childhood, such as being compared with siblings, doesn’t help. From my experience, though, I can attest that the focus on age becomes less as you grow older yourself. Once it’s physically impossible to make the “30 under 30” lists, life gets more relaxed. Getting to know people who “made it” at a young age can also be eye-opening to see that not all that glitters is gold.

On top of that, what can we do to become less perfectionist? There is no simple cure, but the approach should be to set focus on the process of creation rather than the results. Try to reframe your inner critic as your inner editor. The voice inside your head doesn’t want to criticize you; it just wants you to improve. Humans are always changing and growing throughout their entire lives. Nevertheless, we also have to remind ourselves that even being our best selves is different from perfect. And be careful not to become a perfectionist about not being a perfectionist!