Skip to main content

Engineer, startup founder, investor, and writer

benwerd

benwerd

benwerd

ben@benwerd.com

werd.eth

 

Fairness Friday: NDN Collective

I’m posting Fairness Fridays: a new community social justice organization each week. I donate to each featured organization. If you feel so inclined, please join me.

This week I'm donating to NDN Collective. Based in Rapid City, South Dakota, NDN Collective describes its mission as follows:

NDN Collective is an Indigenous-led organization dedicated to building Indigenous power. Through organizing, activism, philanthropy, grantmaking, capacity-building and narrative change, we are creating sustainable solutions on Indigenous terms.

As part of a journey to bring my mother's ashes to New England (which I'll write about soon in another post), I've been traveling through Montana and North Dakota. I've been profoundly struck by the level of poverty experienced by Native American communities there. Native Americans suffered a genocide at the hands of European colonizers, and have experienced generational injustices that continue to this day.

NDN Collective's restorative justice work includes climate justice and racial equity campaigning, as well as an important campaign to regain Indigenous land ownership. It has played a key part in campaigns against oil pipelines on Indigenous land. The Collective also makes grants and impact-orientated loans and investments.

I donated. If you have the means, I encourage you to do the same.

 

Photo by Joe Piette.

 

Every single time I’m in Portland - including just overnight, like right now - I don’t want to leave. There might be a solution for this.

I wish I had more time to see people!

 

Fairness Friday: Southerners on New Ground

Inspired by Fred Wilson’s Funding Fridays, which highlight a new crowdfunding campaign that he’s contributed to every week, I decided to start a series of my own. This isn’t a knock on him: I genuinely enjoy those posts. But I also felt like there was room for something else.

Starting this week, I’m going to be posting Fairness Fridays: a new community social justice organization each week. I will donate to each featured organization. If you feel so inclined, please join me.

This week, I’m donating to Southerners on New Ground. Based in Atlanta, SONG describes its mission as follows:

We build membership (or our base) as a way to build the skills, connection and leadership of thousands of Southern rural LGBTQ people of color, immigrant people and working class people – united together in the struggle for dignity and justice for all people. In order to transform the South we must build our collective power, our people power, which comes from thousands and thousands of us uniting to make the South the home our communities need it to be.

Its work includes bail reform, Black queer, trans, and gender non-conforming leadership work, and electoral justice. It’s all good stuff.

I donated, became a member, and offered to use my tech skills for community members who need them. If you have the means, I encourage you to do the same.

 

Photo by Nathania Johnson

 

10 assertions about the future of social

  1. It will be decentralized. The way to compete with Facebook is not to compete with its model. Decentralization empowers users in a way that Facebook can’t, while also undermining its core business model.

  2. It won’t be a decentralized version of something we already know. It’s not enough to build a “decentralized Facebook / Twitter / TikTok / whatever”. While there’s a core that’s attracted to the ethos of decentralization, it can’t be the core value prop for most users. It’s got to bring something new in itself.

  3. It won’t be a monoculture. Lots of different clients written by lots of different teams with lots of different user experiences.

  4. It doesn’t have to be web-based. As much as we love the web, we shouldn’t be constrained by having to build web-first. Apps like TikTok - and before it, Instagram - have shown that you can take advantage of native app platforms first, and use web for discovery second.

  5. We can’t solve identity. There will never be a single identity that we use across the web. Instead, there may be open protocols that allow us to auth with different providers.

  6. It won’t be built by an existing tech company. (Although it’s possible it could be built by a spinoff or protected internal team of one.) And it might not be built by a company at all: it’s likely to start as an open source collaboration, or even as a co-operative.

  7. It won’t be built by an existing standards body. And any attempt to build standards-first will fail.

  8. The ecosystem will be simpler than you imagine. The technologies that succeed will allow new developers to get up and running in an afternoon, armed with great documentation, easy-to-use libraries, and simple underlying protocols.

  9. It won’t be based on blockchain. But there’s nothing to say that you won’t be able to bring your own ENS domain, etc, if you want.

  10. It has to solve harassment and abuse. Any new network that doesn’t solve harassment and abuse will be co-opted by right wing groups and trolls, killing any nascent community before it has had a chance to get off the ground.

 

Now I’ve got a functional laptop again, I’m finding myself using my iPad as more like an ereader (and artboard, which is why I originally got it). I always start my day with my feeds, but I’m starting to get into (non-Amazon) ebooks, too.

 

The amount of administration you have to deal with when a loved one dies is mind-blowing. You know what people who have had their worlds torn apart and are barely functioning really need? Lots of paperwork.

 

Which are the best residential neighborhoods in PDX?

 

Decentralization and the templated society

My mother used to regularly tell me that I needed to work less; that she didn’t understand why I went for the positions I did; that it sounded like hell to her.

At the time, I didn’t respond well, although I mostly kept my grumbling to myself. Did I have the only parents who didn’t want their child to succeed? I was working hard to try and build a good life for myself by doing work that hopefully was ethical - why wasn’t that enough?

It was only more recently that I realized how much she was looking out for me. From her perspective, I was on a treadmill, part of a kind of grind culture that promotes hard work as a good in itself. I had intense days, and was spending a lot of my time thinking about the work even when I wasn’t at my desk. It’s certainly a life choice, but it’s not necessarily the same as living.

From the outside, you could reasonably describe my parents as radicals. They met at Berkeley in the seventies, after all, with everything that suggests: they fought for renters’ rights, against the unjust war in Vietnam, and for affirmative action. They lived collectively with people who also wanted progressive change. But I think the radical label is in itself unjust: it’s a derogatory way of saying, “these people live outside the accepted template”.

The accepted templates for living - the social norms by which many of us govern our lives and set our goals - weren’t created collaboratively from the bottom up. They were engineered to help create a certain kind of worker; the protestant work ethic, in particular, was intentionally developed to help colonize the New World. They create a deep drive to become wealthy, and a corresponding deep unhappiness when this isn’t achieved. For most people, it’s an illusion: the carrot is a mirage, always just out of reach. You work hard because that’s what you think a good life is, and enrich someone else’s life in the process. You work hard in the hope that someone with more wealth and power than you will grant you worthiness: a promotion, a raise, investment. Meanwhile, the stick is the social pressure to conform to the model.

In tech, I’ve met a lot of people who are motivated by the idea that they’ll get rich. And some of them, to be clear, absolutely do get rich. There’s probably more of a chance of that than in many industries, although to be clear, the people who already have wealth and power will generate more than you in the process. But leaving inequitous power laws aside, when you get a big, fat check at the tail end of an acquisition or IPO, what happens then? Do you suddenly become happy? Is your life worthwhile? Or do you find yourself trapped on that treadmill, either in order to maintain that lifestyle or to quieten the internal voice you’ve developed that tells you to keep working? I’ve noticed that of all the millionaires and billionaires I’ve met - and I’ve met quite a few now - none has radically changed their life. Even the billionaires, who have more means than any of us will ever see, go back to the office day after day. Despite their unfathomable wealth, they’re as trapped as anyone else.

Almost nine out of ten young people say that they would love to be a social media influencer: someone who posts on social networks to a large audience in exchange for money. Once again, this isn’t a goal that appeared from nowhere: it was engineered. Influencers grind to build larger and larger audiences in the hope that someone with greater wealth and power - in this case the network owners, brand owners, and so on - will grant them special powers. It’s a well-designed hamster wheel to encourage people to add value to the centrally-owned network. However much the influencers make, however many followers they have, the network will always have more wealth and power.

How do we unlearn this? How do we break out of these templates, designed as they are to harness our power in order to enrich other people?

The Matrix is a flawed movie, but its central metaphor is radical (if unsubtle) by the definition I’ve established. In its universe, everyone has been harnessed to be a battery in service of a more powerful entity, while an illusion has been carefully crafted to keep them in place. The story breaks down when it starts to talk about a chosen one, Neo, who is uniquely suited to break the illusion and set everybody free: rather than needing to rely on some kind of superpowered vanguard of the revolution, we’re all capable of breaking through. The more of us that break free of the templates that have been set out for us, the more power we all have.

Decentralization is a powerful concept. It’s not about protocols or technologies (although some tools may be created using particular embodiments of these). It’s also not just about individual empowerment. It’s about community empowerment: flattening hierarchies and giving people the ability to exist on their own terms, negotiating through a democratic, collaborative process rather than in subjugation to centralized wealth. Rather than anti-capitalist, it allows for a more granular competitive marketplace. It doesn’t preclude representative democracy - and therefore, it can exist alongside single-payer healthcare, social security, government, and all the social infrastructure we collectively need to live well - but it does sit in opposition to oligarchy.

To reiterate: representative government is not centralization of power, and we should beware of anyone who would prefer to reduce representative democracy and replace it with deregulated markets that encourage oligarchy. We should also beware of anyone who does not want the most vulnerable in society to be protected. Finally, we should beware of people who believe freedom does not involve getting to define our own identities or love who we want to. Those are not people who have our best interests at heart. Removing oligarchies doesn’t mean removing social protections or perpetuating an oppressive status quo.

That’s the core ideal: to move away from an oligarchic system to one where there is little centralization of wealth and undemocratic power. A world that is more equal and more free. One where we all get to choose how we live our lives; how we define ourselves; how we set our goals and decide what a good life is. Those things are too important to be dictated to us by people who need us to maintain their wealth and power.

As this radical future becomes more possible, we should resist voices that want to water it down into the same old templates; the same old hierarchical forces and cultural norms that sap our energy and strip mine our communities. The movement can be one for equity and equality, but we have to keep our eye on the goal.

 

I wish I could set my non-important mail to auto-archive after, say, two weeks or a month. Almost feel like doing this as a programming side project.

 

Answering your questions

At the end of last week, I encouraged readers to ask me anything related to my work. I wasn’t sure if anyone actually would, but I was curious about what kinds of questions people had.

I got a surprising number of questions! So much so that I think I’m going to make it a series. Let’s open it up: you can ask me a question about anything, and I’ll do my best to answer in a future post.

Here are my answers to the questions I’ve received so far. Questions have been edited for spelling, punctuation, and grammar only.

 

Burnout is common in our industry. What is your approach to avoid or recover from burnout?

My take on burnout in tech is that it usually happens when we are disempowered to make decisions that relate to our workload. For example, if you’re a developer, it might be because you’re being asked to build something at speed with ill-defined specifications and an unrealistic deadline. (We’ve all been there.) Or you might have a dysfunctional work culture. Or just be completely swamped.

Those things go together: a company’s dysfunctional culture might encourage you to work over the weekend, or pressure you to make commitments to deliver something that hasn’t even been defined yet. It might feel utterly Sisyphean: you’re working hard at the best of your ability but the nature of the workplace or changing goalposts makes success impossible. This is incredibly common in dysfunctional tech workplaces where non-engineers are empowered to make decisions about engineering without deeply understanding the problem - often while declaring, “it should be easy!”

I’ve also found myself burned out because of external factors. Being a part-time carer for my mother, for example, was something I felt privileged to be able to do. But maintaining the energy to do that and a demanding job wasn’t always possible. (I always, for what it’s worth, prioritized my mother’s care.) For many people, just having to live in the society we do, with its biases and prejudices, can be a really legitimate source of burnout.

I always start by talking to my manager, if I can, about my concerns. But particularly in a dysfunctional workplace, it might be hard to achieve any change. My coping strategies have been threefold:

Immediate: Intentional breathing exercises really help. So does, well, exercise: either going for a run or a really long walk out in the world. I’ve also found that constantly having a book on the go has been really helpful; the act of reading is, in itself, meditative. There’s a reason I mostly don’t read books that are directly related to work.

Proximate: Take a damn vacation. Back when I lived in the UK, I would try to take three week vacations: typically I’d only start to really relax and decompress during the third week. In the US, which is a more psychotically workaholic culture, this tends to be frowned upon. So I always say to my team: know when your next vacation is. Not taking vacations isn’t a strength; it’s a character flaw.

Long-term: Get out.

I feel comfortable giving this answer in tech, which is the context the question gave, but I don’t take this privilege lightly. I know it’s not something everyone can do. But I’d rather have a sustainable position that doesn’t burn me out but pays less well than one that leaves me ragged and has a higher salary. I’ll do better work; chances are, I’ll do more mission-driven work, too. Like any dysfunctional relationship, sometimes it can’t be saved.

Check out Tricia Hersey’s Nap Ministry (and follow it on Instagram): it’s such a great collection of condensed wisdom, deployed to free us from the treadmill many of us have been conditioned to put ourselves on.

 

What do you look for in deciding whether a startup is worthy of investment?

I have to give two caveats here.

The first is that I’m not an active investor right now. I actually get quite a bit of dealflow, and I still have a small carry interest in Matter’s second fund. But I’m not making any new investments.

The second is that no startup is worthy of investment: it’s not a value judgment. There are plenty of startups, projects, and endeavors that are incredibly valuable, but don’t happen to fit a venture-scale investment thesis - or just one investor’s particular thesis. Because investment is an informed bet that a fund’s money will grow while invested in a startup’s equity - and not a grant, gift, or value judgment - everything comes down to how that investor thinks about becoming more informed.

I invested at a very early stage. At this point in a startup’s life, the thing that matters most is the team: who they are, what they’re capable of, and most of all, how they think.

I don’t care where someone went to school or what degree they earned, if any. (I feel the same way about hiring, for what it’s worth.) Their skills are important: I’m probably not going to invest in a tech company that can’t build software, for example, or doesn’t have domain knowledge relating to the problem they’re trying to solve. And their mindset is even more important than that. Can they identify their assumptions and de-risk them quickly, finding a well-defined core community to focus on first? Or are they quixotically ploughing ahead powered by blind belief, refusing to contemplate that they might fail, while declaring that “this is for everyone”? The latter mindset is really common and absolutely deadly.

I care deeply about societal effects and wouldn’t invest if I thought something was potentially harmful. I was also careful to source a pool of startups with diverse founders. Everyone was evaluated according to the same criteria. Nonetheless, a more diverse pool naturally led to a more diverse portfolio. Not only is supporting diverse founders the right thing to do, a wider set of perspectives can more effectively solve a broader range of problems.

And then there’s the big question: do I believe in the problem the team is trying to solve? Can they make me believe in it? Do I believe that other investors will also believe?

After that, there’s math, and there are logistics. Is the potential market size of the startup big enough to support the sort of financial growth the fund needs? Is the capitalization table (the list of who owns how many shares) clean enough to invest in? (Red flags here include people who are no longer involved in the company owning a potentially controlling interest.) Is it a legal entity that can be invested in easily - not just by me, but by future investors - and does it own all the IP? Are there debts? And so on.

This is a pretty narrow set of criteria. So it’s not that a startup is worthy of investment as such: it has to run such a tight gauntlet of restrictions that it just might not fit into the template.

Personally? I’m hoping to bootstrap my next startup. It’s genuinely nothing against VC: I’m just not sure I want to commit to a venture-scale market size, and I’m not sure I want to be beholden to investor commitments. Call me a control freak.

 

What’s next? (Big picture—technology trends)

There are a lot of trends I could be interested in. Here are some I actually am:

Ambient computing. Broad adoption of 5G is starting to mean broadband-quality internet in more and more places outside the home. These enable a new set of devices and experiences that go far beyond just the laptop / tablet / phone paradigms we’ve been tied to for decades. Moreover, as we move from one context to another, we’ll expect our services to seamlessly follow us. How do we build this future while maintaining personal privacy and freedom from advertising?

Human-centered data. The aforementioned future requires that all our data can be pooled together and kept under our control. We’re going to see an end to data that is locked up in silos belonging to individual services. A lot of investors call these customer data platforms because of the implications for commerce; I think the implications go far beyond.

Decentralization. Blockchain isn’t the trend: it’s a technology, in the same way that the web is a trend and CSS is a technology. Decentralization doesn’t need to depend on blockchains, although they’ve captured the zeitgeist right now because of the earnings potential. My interest continues to be in the potential to empower co-operatives, collectives, and other alternatives to centralized wealth and power structures. I’ve been a part of efforts to do this for as long as I’ve had a tech career; what’s super-cool is that mainstream interest it now enjoys.

The creator economy. There was a time, not so long ago, when I thought this was all about influencers, which I’m explicitly not interested in. But empowering individual creators - artists, writers, independent journalists - to make money on their own terms from their own sites and experiences? Sign me up.

And some trends I’m not:

Self-driving cars. Say it quietly, but I think this might be a red herring? I can easily imagine self-driving mass carriers though: think anything that has a set route along well-maintained roadways, like a bus, a sort of longer, rail-less tram, or a cargo truck transporting goods between distribution centers.

Machine learning. Again: call it a technique or a technology, but not necessarily a trend in itself. It’s too often described in magical terms that downplay the inherent problems both in its use and prerequisite data collection.

Audio rooms. See: Clubhouse, Twitter Spaces, whatever the Facebook thing is called. Someone took panels, which are the worst part of every conference, and turned them into a 24/7 product? Great.

VR. Maybe I need to be more of a gamer, but I don’t see this becoming more than niche.

 

What’s scary and what should we be doing about it? (Are we?)

Two growing trends genuinely scare me:

Global warming. We’re not doing nearly enough about this. Like many people, I’m worried about the focus on individual responsibility vs widespread industrial change. To be clear, both are necessary - particularly as we live in a representative democracy - but the onus of change can’t be placed on individuals over the industrial forces that are ultimately responsible for so much of the underlying pollution.

We’ve got to change the way society works, and we’ve got to make and enforce far stronger rules. A lot of global climate policy amounts to rearranging the deck chairs on the Titanic. And I think ideas like carbon trading just perpetuate the problems we need to solve. We need massive, government-led change, and we need it decades ago.

Rent-seeking. Just about everything is available on a subscription basis these days, with true ownership diminishing. The effect in housing is well-documented: generations of people are being more or less locked out of home ownership. But it’s also true in everything from software to cars. The effect is to create a stratum of wealthy property owners, whose property continues to expand and grow in value, and a much bigger one of less wealthy people who are forced to pay rent on an increasing number of things. The property owners get to set the terms by which their property is rented; the renters must abide by them.

We’ve always had a disparity in rule-making, where the wealthy held more of the cards, but it grows the more the gulf between property owners and renters widens. A lot of this situation has been enabled by the tech industry, VC-enabled business models, and the desire to maximize recurring revenue at all costs. I don’t see this trend slowing down, let alone reversing, but it only leads to widespread poverty and, with it, unrest.

 

What’s exciting and promising and what should we doing about it? (Are we?)

Decentralization! Renewable energy! Better mass transit! A move away from selfish individualism to a better collective future! Better societal infrastructure!

I’m also really excited about remote working. Being able to work in your own home empowers people who couldn’t necessarily make it to an office before; it also spreads wealth across the country and potentially across the world. Everyone’s comfortable with it after a year of doing it; in my opinion all of the reasons to go back into an office come down to personal preference rather than it being inherently better.

Consequently, when we look back a decade or so from now, I think we’ll find that tech companies which have embraced remote working after the pandemic will do far better than those that don’t. They’ll be more attractive, they’ll attract a broader set of candidates, and they’ll have solved communication problems that allow them to work more efficiently.

Do I want to go back to an office? I do not. And there are a lot of people who feel the same.

 

You once wrote a blog post suggesting that a 4th 'bubble’, sustainability, be added to the traditional design thinking bubbles of 'desirability, feasibility, viability’. I found this while researching Design Thinking for Social Innovation for a presentation I was doing. I explored it with the audience, themselves all heavily vested and involved in Social Innovation, but the resulting debate led us to the conclusion that if the existing 3 bubbles are used appropriately, then the 4th is not needed, and that between 'Desirability' and 'Viability', Sustainability is covered. My question is, have you explored this further in your work, have you since changed your perspective, and have you encountered further widespread support (for or against) your thoughts on this?

I agree that if the existing three principles are used appropriately, the fourth is not needed. That’s a big “if”. I think, in most cases, that it’s important to have a model to explicitly consider these issues. It’s possible to have a desirable, viable product that you can feasibly build - if you only evaluate first-order effects - that also has negative societal effects. Some teams understand that sustainability is baked right into desirability, viability, and feasibility once you evaluate how the product sits in its context over time; for others, calling it out directly as part of the model may be helpful. And it may not be possible for a product team to properly evaluate in which group they sit: some may think they don’t need it, while in reality they could still benefit.

In teaching our Designing for Equity session in the Google News Initiative / Newmark School / News Catalyst Product Immersion for Small Newsrooms course, Roxann Stafford and I talk about reframing from building a Minimum Viable Product to Maximum Distributed Equity. While this isn’t a direct continuation of the Sustainability idea, it lives on the same spectrum. It’s not that maximum distributed equity is the only lens you should use; it does, however, force conversations and design thinking that would not occur if you didn’t evaluate it intentionally. Some teams might think (and often say so, vocally) that they don’t need to explicitly consider equity; generally, they’re wrong. It’s something we all need to work on, and naming it helps us remember to consider it carefully.

 

Can you share your thoughts on where you see crypto going in the future and projects / possibilities to keep an eye on?

I see a few things as inevitable:

Moving away from proof of work. Possibly legislatively. These algorithms, and their environmental effects, are absurd. Great proof of concept, well done, now let’s move on. I think proof of stake is a great v2, and I’m sure there will be something better in the future.

Stronger smart contracts. Again, Ethereum was a pretty fantastic proof of concept here. But let’s keep an eye on Algorand, Polkadot, and others that are pushing the envelope of what can be built.

Privacy. I don’t see a network that is completely public as being desirable. Privacy is a prerequisite for democratic freedom.

Blockchain as part of a delicious, decentralized breakfast. Right now, as described above, blockchain is often considered to be the trend in itself. It’s just one decentralized technology; it wasn’t the first and won’t be the last. It also has enduring limitations. We’ll do more off-chain than we do on-chain, and making that more seamless will be part of building the decentralized future.

 

Should I code indieweb or fediverse protocols?

Yes.

Longer answer: it depends on what you’re trying to build! The indieweb and the fediverse are two complementary ideas. Both are sets of protocols that allow people to communicate with each other from their independent websites and platforms. Neither is a monoculture. So I don’t see it as a debate: start with the experience you want to build for the user, work backwards to figure out the best way to build it, and go from there.

 

"Specialists know everything about nothing, generalists know nothing about everything". Should person attempt/claim to be a full-stack developer+ops+dba+tester, or welcome specialists within a broad team/community/church? In my opinion we should foster mutual co-ed training to raise cultural awareness without claiming expertise in every field. What ever happened to brown bag lunch sessions as bite-sized learning?

Speaking as an unashamed technical generalist:

My answer to most questions about engineering approaches like this is that it comes down to the human context. There’s the perfect situation, and then there’s the one you’re actually in.

So the answer to this question depends on the organization you’re a part of, and what you’re trying to do. In a larger company, you’re more able to have people who occupy specialities and can go deep on those. In a smaller one - let’s say a three-person startup - you’re forced to be a generalist, whether you like it or not. It’s not so much about what you claim to be as what you have to do in order to get the job done.

Given this reality, should there be cross-team collaboration and learning? Absolutely. We should do better at that as an industry. As an engineering leader, I should also be better at doing this within my own team; in all honesty, I haven’t found a way to effectively replicate brown bag lunches / continuous group education in a remote context, and it’s something we all need.

 

I am guilty of debugger-based development to muddle towards an eventual solution. Is there any hope for this repentant sinner?

You’d be surprised which engineers write code by using console.log all over the place. Just do what works for you. We all code differently, and coding sucks for everyone. Wear it proudly.

That said: I can’t overstate the utility of automated testing. It’s not a fun habit to get into, but it’s so much better than having to go back and add them later on. You don’t need to engage in test driven development (where writing the tests comes first), but you really should write those tests. Every language you write in has a test framework; use it.

 

Patterns and interfaces = good, over-engineering (ability to change DB etc but seldom required) = bad. Newbies always overwork the latest read/fad instead of pragmatism. Do cyclomatics etc help dictate the tipping point?

Pragmatism is learned, and the opposite comes from nervousness. The solution is not to apply more metrics to force the issue, in my opinion. It’s about laying out good team / project principles.

Engineers often overlook the “soft stuff”: team principles, coding culture, communication, and conveying why we do things. They’re crucial. The non-deterministic aspects of engineering are at least as important as the algorithms and data structures. This is one of those questions: how much abstraction is too much abstraction? The answer will vary depending on the needs of the project you’re working on.

If there is a hard and fast rule, I think it’s around readability and flexibility of architecture, and speed of execution. Abstractions shouldn’t interfere with ease of comprehension: too abstract and you may have to learn to play four dimensional chess just to figure out how it all fits together. Not abstract enough, and you may find your architecture is largely defined by the structure of external services or libraries. There’s a sweet spot in the middle.

Finally, of course, spending your time on building abstracted interfaces that you don’t have an obvious use case for is just yak shaving. Ship that code.

 

Should you be a polyglot language speaker [coder] or accept that your favorite language/framework/OS/protocol/Db is good enough to meet your requirements?

Again, this is a fuzzier, less-deterministic question than it appears. It depends!

You should use the best language for fulfilling your requirements. Probably, that’s the language you already know rather than one you need to learn. At the same time, not everything is interchangeable: Ruby on Rails is not like-for-like with Node, for example. They work in different ways (one’s a framework, for one thing), and therefore some tasks can be done better with Node than Rails. They have different ecosystems of libraries and supporting documentation, and so on. Whether it’s worth switching to a technology you’re not an expert in yet depends on how much better it’s likely to be.

Nobody can be an expert in every language and framework, so there’s always going to be some level of shoehorning requirements into what you already know, and there’s always going to be some level of learning something new.

An unsatisfying answer if you’re looking for something deterministic, perhaps, but it’s an insight into why programming is both super-fun and terrible.

 

There are many open source software packages but the huge time it takes to assess whether they’re good/bad/ugly is largely wasted. How do you find the right package before you build? Then how do you best keep it updated [or replace it] without finding yourself in dependency hell?

First assess: do you need an external library to begin with? Every addition does create a dependency. The story behind left-pad is a great example of why care is needed.

Then it’s about social proof. Who wrote it? How many people are using it? When was the source code repository last updated? Is it active or abandoned? Is the maintainer a jerk? Are there reviews or tutorials on the web?

Don’t forget to assess if the license it’s distributed under is compatible with your project. Are you legally allowed to incorporate it?

This kind of due diligence takes a little time, but it’s worth it. And a little friction means you don’t end up adding libraries to your code without thinking about it, which is probably a good thing.

As for dependency hell: there are plenty of useful tools that can keep your projects up to date. As a GitHub user, I like Dependabot, alongside its dependency graph tools. I’m not even remotely interested in keeping my dependencies current manually. Who has the time? But this is another reason to maintain robust automated tests: because an automated update could break your code, it’s important to have a test suite that Dependabot (etc) can test its updates against.

...

Those questions were fun to answer. I’d love to do this again in a future post; ask me anything at this link and I’ll do my best to answer in the future.