
The 100:10:1 method: my approach to open source - dgellow
http://blog.fogus.me/2015/11/04/the-100101-method-my-approach-to-open-source/
======
philh
> Aside from the fact that much of the code that was “released” was sub-par,
> the very act of putting code out into the world implied (whether
> intentionally, or not) a willingness to participate in a social contract
> with those who chose to use it for their own purposes.

Not to disparage the 100:10:1 method, but I do disapprove of this implication.
I don't want people to refrain from putting things out there, just because
they don't want to feel obligated to support them.

I have a public blog, where I try to maintain quality, and a semi-private blog
where I try to allow myself to post stuff I'm not sure about, stuff that's not
interesting to anyone other than me, stuff I don't necessarily want associated
with my public persona, and so on. I know others do similar things.[1]

I think there's no particular mechanism to do that with open source, but it
might be valuable. Perhaps I could have two github accounts, one where I'll
put anything I feel like, and one where I put stuff I'm proud of and want to
remain proud of. If something's on my "real" github, I'm saying that if you
ask for support I'll try to help you, if you report a bug I'll try to fix it.
If it's on, let's call it my shithub, there's no social contract. Take a look
if you want, and feel free to report bugs, but I might just say "yeah, that's
a bug". Or even just "not interested in that project any more, I'm not going
to bother confirming this".

Then, if you want to follow this method and also want to make most of your
code public, you can write down the 100, put the ten on your shithub, and
publish one to your github.

[1] E.g. [http://slatestarcodex.com/](http://slatestarcodex.com/) versus
[http://slatestarscratchpad.tumblr.com/](http://slatestarscratchpad.tumblr.com/)

~~~
jerf
You can start on github just by being clear what sort of repo you have in the
readme. There's all kinds of projects on there, from "I accidentally the fork
button" to production grade stuff, and it's often hard to guess which the
author thinks they have.

~~~
oblio
Github could use the 1-alpha, 5-production system.

At least you'd get a hint at the intention behind the release.

~~~
voltagex_
I really wish there was tagging and categorization - I have so many little
repos, and now recruiters look at my GitHub as part of my resume. Is hitting
the Fork button going to have impacts on my future employment?

------
howeyc
Anything that I think "may" be useful to someone I put up on github. Sometimes
to my surprise people use it. I remember putting something up (not even one
star/issue or anything ever), then 1 year later getting a random email saying
"this is great, thanks." Yeah, no problem, anytime.

I went the opposite direction (kinda) from the author. I realized that people
assuming I would fix what I put up didn't matter to me. Sometimes I would make
fixes, or check issues, sometimes I wouldn't. Some people got mad, some
understood, some were drive by so they never checked back in anyway. Whatever,
it's up there, if it really bothers them enough, they can fix it, or use it.
It's up to them, not me.

However, I'm still a little like the author. I have a bunch of projects that
are "good enough" for my use, but definitely not for someone else (for
example, I wrote a password safe[1] cli program because I needed something
that would work on FreeBSD. It only handles the features I use and may croak
on a file that uses all field types). I keep these off my github.

[1] [https://pwsafe.org/](https://pwsafe.org/)

------
cubano
I find it somewhat mindbending that he advises working on a MVP for 10
projects simultaneously when it's all I can do to work on 1 plus, you know, my
real job that pays the bills.

More power to anyone who has that sort of energy!

~~~
mbrock
Maybe it's less about having lots of energy, and more about expending it
lazily and efficiently.

For many ideas, an MVP can be a five-line CGI script in bash. Or even a static
HTML page. Minimal means minimal.

The MVP is the most trivial thing you can do that will still give you useful
information and guide future development. The purpose is exactly to be able to
try things without investing significant energy.

~~~
cdmo
What you're describing, to me, sounds like a mockup or prototype. I think of
an MVP as something that could be put in the hands of an end-user.

~~~
davnicwil
I agree with you. My interpretation of MVP is weighted by my interpretation of
the words Product, and Minimal. A product should be something which really
solves a real world problem, and is built with the appropriate level of
quality. Good enough is not good enough, the bar should be very high. Minimal
in this context therefore applies only to the scope if the problem(s) being
solved, not to the effort put into execution or the level of quality.

Put another way, I won't call something a product unless it's something I'm
proud of and something that I believe solves a problem in a way which
approaches the best way (at least in my opinion at the time, there are
obviously always improvements to make based on feedback). If it's minimal,
this just means the scope of the problem it solves is very small, so that not
too much effort has to be expended building it, even though what it does do it
does at a high level of quality.

Anything which falls outside this is to me not an MVP, because it's not a
product, it's a prototype of a product or a way of testing an idea the product
may eventually be built to implement 'properly'. It's rarely something you're
proud of, or would be comfortable charging for. When you'd be comfortable
charging for it, that's probably the point where it becomes a product.

~~~
e12e
I think there might be two valuable ideas, that are somewhat at odds, lets
call your model the MVP - Minimal Viable Product, and the other one MVC -
Minimal Viable Commodity.

The Minimal Viable Commodity is the minimal thing that you could successfully
market. It can often be an idea+web page with an email form. It is the
sales/business persons idea of an MVP: The technical aspects are entirely
uninteresting - it's the business case that's being tested/evaluated.

Consider the case of a product idea for translating in some special domain,
eg: contents declarations for food stuffs. The MVC is a web page with a form
to submit the text. What happens after that (spend a week gathering samples,
manually translating, whatever) isn't part of the MVC. It's market research.
Maybe you manually translate the things and deliver results back.

The MVP for machine translation of the same idea is considerably more
involved. Even just connecting some machine learning legos and training on a
few million samples is much more (technical) work, than setting up a static
web page.

I think both ideas are good -- but it can get confusing when both concepts are
termed MVP.

~~~
sheepmullet
> The technical aspects are entirely uninteresting - it's the business case
> that's being tested/evaluated.

I find a lot of these tests provide junk data though because it is obvious the
site has no product and is just fishing for information. People have wiser up
a fair bit and will just hit the back button.

------
nickpsecurity
I agree that any OSS developer should recognize their toy projects will likely
not go anywhere and keep a few projects in mind to work on. Keeps things in
perspective, keeps one interested, and so on like author said. Doing 10
projects in parallel makes less sense to me. One can accomplish the same thing
sequentially while focusing on only a few projects. Just bounce back and
forth.

If I went with a rule, I think Google's 80/15/5 rule is worth further
exploration. Many of the best projects start with a clear need to solve a
problem. Picking one of them and making it happen should be 80% as others will
appreciate the problem being solved. Especially true if author understands
that domain. A significant step out of the domain or re-application of an
effective concept to new domain might be a 15%. A 5% project might be a wild
idea with potential but high risk and/or way outside author's domain
expertise. The main energy will go into 1-2 80% projects while the 15% and 5%
projects are a mental break from that.

This model seems more productive while still letting a person screw around on
side projects that might be fun, good learning experiences, or time-wasters
with a limit on the waste.

------
sesm
This resonates with author's famous blog post about reading [1]

In that blog post he recommends reading several books simultaneously and
abandoning boring books with no regret.

[1]
[http://blog.fogus.me/2012/02/22/reading/](http://blog.fogus.me/2012/02/22/reading/)

~~~
gedrap
Simultaneous reading is definitely great.

At any given time, I have 2 books, one fictional and one technical, open (made
some progress in reading it, maybe not literally open ;) ). I probably could
handle an extra technical one.

If I was reading only one book, some evenings I'd be like 'meh, don't feel
like reading it tonight'. But when I'm reading simultaneously, I have no
excuse to read a bit every single evening, which evolves into a habit and it
is definitely a nice habit to have.

------
sdegutis
I've written probably a hundred open source projects in my short professional
career. But only two of them do I actually use every single day: a simple OS X
window manager [1], and a hybrid command-line/native-GUI fuzzy string matcher
[2] (you'd be surprised how many ways/places this can be used). The rest of
them didn't serve well as practice like I'd hoped, they were mostly just a
waste of time I could have spent better elsewhere.

So lately I have new criteria for how and when to write open source projects:
(1) when I realize that I have need to automate something, (2) and it won't
take more than a weekend to get a basic functioning version up and running.
Anything else, and I nope on out of there. I've got too little time and too
many things to do already, I'm not about to waste it creating more unnecessary
software. The world has enough of that already.

EDIT: adding links as requested

[1]:
[https://github.com/sdegutis/AppGrid](https://github.com/sdegutis/AppGrid)
(note: I started to rewrite this in Swift locally, because Accessibility API
sucks without generics, and the Objective-C version is a bit buggy)

[2]: [https://github.com/sdegutis/choose](https://github.com/sdegutis/choose)
(note: I started to rewrite this in Swift, but the Objective-C version gets
the job done just fine)

~~~
unwind
If you want people to be less surprised, or maybe even help them understand
what you're talking about, links to those projects would have been handy. :)

~~~
sdegutis
Thanks for the idea.

------
webmasterraj
There's a tangential problem I've been thinking about a lot recently: the long
tail of open source projects on GitHub.

There are 20M+ repos on there. Which leads to a serious discoverability +
signal/noise problem around 'true' open source projects. As someone who wants
to put up an open source project for collaboration (with willingness to
maintain), it's hard to get the right eyes on it. Too often, it seems like no
one cares. Conversely, as someone who wants to contribute to open source
projects, it's a little hard to find small early ones where I feel like I can
make a meaningful contribution (yes, the big ones maintained by well known
companies are easy to find, but I much rather work on something put up by an
individual programmer).

How do you cut through the noise on GitHub to find projects you actually want
to work with (and want you too)?

~~~
colund
Sounds like a good idea for a better unofficial open source search engine. I
would be interested in contributing. It could do intelligent search of Github,
Bitbucket etc for projects which might be interesting (programming languages,
objectives etc).

~~~
webmasterraj
I was thinking of something maybe even simpler - a place for people to post
projects they're actually interested in maintaining as open source projects. A
subreddit could be the mvp.

Or go the other way, and train a searching algorithm based on a data set of
actively maintained open source projects on Github, with things like commit
history/contributors/etc as features.

~~~
sitkack
Using a subreddit, you basically have a marketing problem and no way to seed
the marketplace. One would need to do both. You are trying to restart
[http://freecode.com/](http://freecode.com/)

------
antirez
If I would reply to all the emails, pull requests, issues, people send me
about my OSS code, it could be impossible for me to write a single line of
code every day. Eventually I believe the solution is to take what you get from
the community, and to provide replies and feedbacks, by spending a fixed
amount of time, and trying to sharpen the sensibility to focus on the most
promising interactions, pull requests or whatever. It will sound gross to many
that expect a reply that does not arrive, but it's better than to stop doing
what you love which is writing OSS.

~~~
Cthulhu_
IMO if you've got enough projects that get that kind of attention, it's time
to do as any good manager should do, and delegate. Allow others to sift out
pull requests and issues, pre-filter emails about the project, so you can do
higher-level things (or just write code because you seem to prefer that over
dealing with issues)

------
elliotec
This reminds me a lot of the idea strategies that James Altucher promotes and
uses. They are mostly related to business ideas rather than OSS, but the
concept remains similar.

You can see some of his posts on it here:

[http://www.jamesaltucher.com/2014/05/the-ultimate-guide-
for-...](http://www.jamesaltucher.com/2014/05/the-ultimate-guide-for-becoming-
an-idea-machine/)

[http://www.jamesaltucher.com/2012/04/how-to-have-great-
ideas...](http://www.jamesaltucher.com/2012/04/how-to-have-great-ideas/)

[http://www.jamesaltucher.com/2015/07/the-magic-of-idea-
math/](http://www.jamesaltucher.com/2015/07/the-magic-of-idea-math/)

------
mikekchar
I really like this idea. I don't actually have the problem that people are
bashing my door down to have me support old code, but my github account has
accumulated a _huge_ amount of cruft. Much of it, while quite beneficial for
me for playing with something, is completely useless for others. I tend to use
Github as a backup system... I'd really like my Github account to be useful
for others and not swimming with half finished ideas. I think it's time to
clean house...

------
ehartsuyker
I have maybe five ideas for decent projects, and I work on two. Why should I
bother starting with a huge list and whittling it down?

~~~
fogus
Maybe you shouldn't. The post is a description of one person's method and
should not be taken as prescriptive.

------
MichaelGG
Strangely this sounds like it might work. I've been thinking about a lot of
different projects, and end up doing absolutely nothing. There's also a lot of
small stuff that, if I did an MVP, would actually be close enough to ship and
be useful. Though I'm not sure about the projects I'm most interested in; they
are fairly big and getting to MVP could be many months (so doing even 3 would
take a couple of years).

I'm gonna try writing these ideas down. Thanks for the idea!

------
cryptica
I personally couldn't succeed with this approach. It's only suitable for
polygamists. I'm more of a one codebase kind of guy. I know how to treat my
codebase right.

------
jononor
Just publish and put some clear indicator right there in the README of the
status/purpose/scope of the thing. I have bunch of them marked 'experimental',
more rarely something gets all the way to 'minimally useful' or 'used in
production'. Arbitrary example:
[https://github.com/jonnor/agree](https://github.com/jonnor/agree)

It is not for me to decide whether something will be useful for someone else
or not, that is up to them. Just give people enough facts that they can make
an informed decision.

------
mtw
I'm doing something similar where I publish all main and side-projects (good
and bad) and judge interest from retweets, stars and forks
[https://github.com/heri](https://github.com/heri)

However working on 10 projects simultaneously is not feasible imho. 3 or 4 is
more realistic, more maintainable and worthwile in the long-term.

~~~
voltagex_
How do you gain any popularity at all? Most of my stuff is little hacks, but
they have zero visibility. I'm sure _something_ I wrote is useful to _someone_
, but how do I know?

~~~
mtw
Actually I'm not planning to be popular. I'm doing it for myself and to
develop interesting projects. Of course, it would be cool if it becomes
popular.

In terms of popularity, if I see something is interesting, I make sure to add
it to Twitter, facebook, send to friends, add to reddit, add to awesome lists
and encourage participation (clear license, clear contribute.md) etc.

------
cryptos
I find it a bit strange to write down 100 ideas of what I could develop. I
think it would be much better to just develop some missing software or make a
better version of something existing. But just collecting ideas without a
real, deep interest in it sounds a lot like the beginning of abandoned
projects.

------
hyperchase
ain't nobody got time fo dat

