Brainstorming about ecosystem, userbases and codebases
Elias Batek
desisma at heidel.beer
Sun Feb 4 21:29:14 UTC 2024
Hi everyone,
Today we had an interesting discussion on the matter of
“attracting new people” on Discord. This reminded me of a few
thoughts that I had originally planned to write down earlier in
January. So here we go.
Looking forward to hearing your thoughts, ideas and objections.
I might be wrong about certain things, but I’m certain that I can
thankfully rely on you to point things out. Thank you!
Preamble
========
So, there’s the issue that the ecosystem, tooling etc. heavily
relies on users and their time. Polished tooling – the “just
works” experience – requiring huge budgets, people come to the
conclusion this area might need corporate sponsoring. And in
order to achieve that we’d need more users. The chicken-and-egg
situation aside, I sometimes see an uncomfortable focus on the
“new users” part of the growth.
If you focus on people that don’t use D, you won’t focus on
people that use D. Implication is, at worst, the second people
start using D, you’ll cold-shoulder them too.
Nothing new, probably; we’ve had a bunch of threads on that.
On the other side of the coin this focus on fresh users is a
“threat” to (not only the size but) the quality of ecosystem as
well.
The “user zero” problem
=======================
Ideally, code that is written would have a known use-case and
user.
While there’s nothing wrong with code written for pure personal
interests, it doesn’t add direct value to the ecosystem and isn’t
exactly meaningful to consider in this discussion. Such programs
were written with the goal of writing them, learning something
along the path and trying things out. This sure is not only a
reasonable thing but also valuable; nevertheless, neither a
potential user of the code nor the ecosystem is a concern in that
case; it’s all about the process not the end-product. So let’s
focus on code that is written with the intention to be used by
someone instead.
There are several options who could serve as the first user (aka
“user zero”) for a piece of code:
- The author themself. – That’s great! Not only can issues and
shortcomings be reported bypassing complex official channels, the
people in charge of writing are also aware of practical
limitations and chances of in the field application.
- A friend or coworker. – Shiny! Feedback will easily come in.
And the author will likely get to see how the code in question
performs in practice (usability, applicability, correctness etc.).
- A client or employer. – Awesome! In this case it doesn’t matter
whether the code will actually be used; as long as the money
comes in.
- A target group or target audience. – Alright… So we don’t have
an actual user here yet, do we?
The reason why user zero matters is because they are the first
entity that gives the code a purpose. (Remember, we’re still
referring to code that wasn’t written for the sake of
learning/experimenting with it/writing it.)
Their experience helps to identify bugs, shortcomings, missing
features and in general ensures that the codebase is fleshed out
well. User zero eventually gives the author a reason to maintain
the code, too – given enough altruistic nature in them.
Code with no users tends to lack all that. And when finally
someone tries to use it, they might run into unforeseen issues
and the codebase crumbles down. Not to mention the disappointment
of the user who will find themselves left with the decision to
either try to fix a codebase (that was never truly designed to be
actually used) or having to look into alternatives.
So, in my humble opinion it’s a common misconception that in
order to get bigger, D would need to attract new users. Instead I
think the community should focus on strong company and writing
code for an actually existent user.
Because targeting the current users is what keeps them from
leaving.
Unless fluctuation/turnover is the goal, retaining existing users
is at least as import as recruiting new ones. Keep in mind, any
new user that isn’t retained nullifies themselves in the user
count. If they leave on bad terms, we’ll need 10 more happy users
to make up for the negative word of mouth – according to what I
remember from the economy class in school.
About “target groups”
=====================
“Target groups” is a marketing term. It doesn’t refer to a group
of users. It refers to a group of potential users. Those may or
may not even consider using the product – the code, in this case.
The unfortunate implication of writing code for a target group is
that it isn’t code written for a an actual user. There is no user
zero.
What can be said about a piece of code, can also be applied to a
programming language as a whole. A popular target group here
would be employees of big tech that could bring in manpower
and/or money to improve ecosystem and tooling.
But, unlike users, one doesn’t reach target groups with providing
or offering a product. That’s where marketing comes into play.
And marketing usually needs a sales pitch or similar. “Tooling in
D isn’t great because we don’t have big money. Give us money and
we will make tooling great again! (Oh, and we have a great
programming language.)”, doesn’t make a good elevator pitch.
People often don’t realize that substituting themselves with a
target group in their statements actually hurts their arguments.
In this regard, Paul has observed the following:
> Also, "what new users/users of other languages want" is 99% of
> the time a justification for some individual’s personal
> preferences, rather than, like, a statement backed up by any
> kind of data.
While a single user might not be a suitable demographic in the
context of a programming language in the first place, when
mentioning a group of potential users instead, it even removes
the first (and only) actual user from the equation.
If we do it for someone who isn’t using D, we could instead let
it alone in the first place.
Comments
========
I’m not here to tell anyone how they should write their code or
what they should spend their time with. Neither do I want to
imply any authority on judging how other people should spend
their time. All I want to say is, if you want to see the
ecosystem and user base grow, you should probably look forward to
participate in that as well. And write code with an actual user
in place (not in mind).
By the way, this whole user zero thing reminds me a bit of
Walter’s stories about programs he wrote where other people said
they would see a use-case for, but ended up not getting used by
them. I don’t want to put words into Walter’s mouth, but to
connect things together: I see the lack of a sustainable user
zero in those cases.
--
PS: Feel free to start your own newsgroup thread for off-topic
discussions. Please do me a favor and don’t derail this one.
Thanks in advance!
More information about the Digitalmars-d
mailing list