@Tantek Çelik The
“Don’t expect anyone to re-use your solution as it is” thing is something I have been thinking/writing a bit about recently. Designing primarily for ourselves is not actually as selfish an approach as it sounds, provided that the itches we’re scratching involve communicating with others in some way (social=people=communication).
I have found that building for myself puts the emphasis on interoperability with as many platforms as I can, instead of having an
“I built this cool thing, everyone else should use it too” attitude.
So I have two maxims I follow now (apart from all the other principles):
- Build Platform Agnostic Platforms (canon.)
- Build software for yourself which works with other software (canon.)
However easy to install they are etc, monolithic solutions are bad for open source. Much better to release discrete, useful building blocks (which you’ve found useful) which other people can actually use than to say ”I made this big web app”.
Same goes for protocols — big, monolithic standards put people off. Two reasons:
- Bigger barrier to entry — too much pressure to implement the entire thing, needless requirement to be “compatible”
- They try to do too much instead of being discrete, focused efforts
statusnet is a great negative example of my first point and a positive example of my second point. It’s big, so much so that it’s difficult to get any useful code out of. But whilst it’s “OStatus Compatible”, it also supports feeds which use just PuSH, not webfinger as well (which, btw, if implemented correctly, should handle fully qualified URLs as well as email-like IDs).