Return to Home Page
      Blog     Consulting     Seminars     Calendar     Books     CD-ROMS     Newsletter     About     FAQ      Search
 

1-13-04 Rethinking weblogging (and everything else)

Feedback

It seems I have to struggle with a problem for awhile before "the simplest thing" begins to occur to me. It's also helpful to study solutions that other people have developed, to see what works and what doesn't. Perhaps there is a maxim "you can't be both simplest and first." Corrolaries would be "don't make it so perfect you can never deliver it," "worse is better," "stop after the first 90% (because the last 10% will take the other 90% of the time)," or simply "just solve the core problem." I guess that's the thing, though: knowing what the core problem is can be the major part of your struggle (This is certainly the case with design patterns). Elegance is inversely proportional to sweat.

Because elegance is difficult and time to market is crucial, many have come to believe that the former should be sacrificed for the latter. It's hard to argue against this. The rabbits that rush a half-working piece of garbage to market are usually the ones that are wildly successful, whereas the careful tortoises are never noticed. Of course, this is a description of an industry that is fueled with startups and innovation, rather than a mature industry. You're probably not going to make a dent in the world of tires or tv dinners without a lot of up-front research and investment. Perhaps there are businesses other than software with enough wildcards that it's possible to get a brainstorm and suddenly create a breakthrough product with very little investment, but I can't think of any.

My belief is still that "Elegance always pays off." The payoff comes after the initial flush of market success, when you are improving the product and making it more complex. The architecture and implementation techniques will then either spur you on to more greatness, or sink you. But it seems rare for a company to become successful with a bad design and implementation, and then stop and refactor the whole thing rather than rushing to add more features. So from the acorn grows the oak.

What is the balance between simplicity and expedience? "Do the simplest thing that could possibly work" is certainly not saying "do the most elegant thing" because the goal is to get something working, without too much effort, so that you can try it out and see if it solves any portion of the problem. "Trying it out" is what will produce the valuable information that can be fed back into the next iteration, and will also begin to tell you what's most important about the problem.

All this musing was precipitated by a mental retrospective about my weblogging experiences. I suppose it all started when I decided to stop creating articles from scratch for print magazines. I had begun to notice that people refer to a magazine article by mentioning the magazine, not the author, but with a book they typically don't remember the publisher, but only the author (O'Reilly has been the exception, but they've been sliding towards ordinary-ness over the last few years). So my premise was that (A) I want people to come to my seminars and workshops (B) they must remember my name in order for it to have any value (C) I should focus on books, not magazine articles. At that point, the only articles I wrote were adaptations from whatever book I was working on; some of you may remember a long series on C++ in Embedded Systems Programming that was taken from "Thinking in C++" as it was being developed. Since then, of course, the Internet has been strangling most computer print magazines.

As an aside, the fascinating effect of newsreader software is that it allows each individual to create their own magazine, filled with their own favorite columnists. This was predicted by futurists, but those predictions were inevitably a vision of some central newspaper-like authority assembling and delivering your customized paper to you. We have been so conditioned to think in terms of Big Authority Figures that the concept of assemble-your-own directly from the producer didn't occur to anyone until after it already happened. In hindsight, it's obvious: it's not only the cheapest approach, but also the most flexible and open, and serves the consumer best.

Putting "Thinking in Java" up on the web while I was developing it was the next step in the process. The myth that "all you have to do is put up a website and customers will flock to it" had passed by then (At the time, I was hoping that the web would go away, or at least get better, before I had to figure out the technology). My friend Richard Hale Shaw and I had done a series of seminars through the Software Development Conference which were marketed by them, through their mailing list, with lots of money spent on printing and mailing brochures, direct phone solicitation, and magazine ads. Richard and I weren't happy with the situation, but it seemed a very risky proposition to undertake on our own. However, if I could get people to come to the web site, I reasoned, I could tell them about the seminars without much risk at all. I decided that even if I never sold a single book, if people came to seminars it would be more than worth the loss. The publisher was very uncomfortable about this and did a small initial print run, which sold out quickly. Whew (they thought)! Print media has not been extinguished by the internet, and printing presses and trucks are still a viable business, even if people are able to download and print a book on their own. The convenience of the package is still valuable.

So that became my model: continually publish a developing book on the web, and publish it in print when it becomes finished and stable. All the while, give seminars based on the material. But a big problem with this approach is one of granularity: everything is now in book and seminar-sized chunks. Books are big; associated seminars are 5 days long. There's no room for other forms of expression that are smaller and/or more agile and flexible than books + 5-day seminars.

Several years ago I began seeking such forms of expression: how can I talk about things in units smaller and more nimble than books/seminars? Writing articles on the web seemed like a logical first step, and it also seemed logical to use someone else's article-publishing package rather than inventing my own ("buy don't build"). After a bit of looking, it seemed that the SlashCode software would do the trick, and it was freely available. However, it ended up being messy to set up and configure, and I think over a year of potential publishing time was lost while fooling around with it, and by the time I actually started using it I discovered that the whole thing was very awkward and unpleasant. This is a case where using someone else's solution was a costly mistake – If I had simply started putting up articles right away, working within the Zope system that I already had running, I could have been publishing and experimenting during that whole period, rather than being stuck. Because I was unable to do the experiment, I couldn't move forward.

Not that Zope is the perfect solution. I like Zope a lot because I've learned a great deal from it. I think that building an app server on top of an object- oriented database and integrated security, using URLs for object locators, using a single consistent, powerful language for application development, and the "product" concept for extensibility is all brilliant and has great potential (and making it free is especially attractive). But everything in Zope is most definitely invented from scratch, and not all the ideas have worked out. The Zope Corporation knows this and the whole point of rearchitecting Zope 3 is to make it easy and expedient to program. But as powerful and useful as it's been, I've also started to think that it's been holding me back in a number of places. For a long time I couldn't understand why other people were creating new application servers based on Python – why not just use Zope? But after all this time, I don't "Think in Zope" yet because I don't do it all the time and there are too many conceptual hurdles to absorb if I don't do it all the time. So while I'm sure I will not stop using Zope as an app server, I think I also need another Python-based app server running alongside which is much easier to program (possibly until Zope 3 finally appears and overwhelms me with its simplicity). The Twisted Matrix looks like a very promising candidate.

Part of what I'm trying to convey in this article is the subtle threshold beyond which a thing is just a bit too complicated to absorb into your toolbox, along with all the other tools. The subtlety is that it's possible to use that tool, but beyond a certain vague point it's just a little bit too hard to put down and then easily pick up again later, and for me, that's the crux – not whether it's usable at all, but how easy is it to put down and pick up? If I have some fantastic wrench that requires me to consult an instruction manual every time I use it (Java and IOstreams come to mind here – I know of colleges that have gone back to C++ as a first language just because teaching "Hello, world" in Java is so complex), I'll probably just hunt around for the plain old fixed-size wrench, ashamed that I'm not sophisticated enough to use the fancier tool. Making things effortless by lowering the complexity of accomplishment really does make a difference. This is why build systems are so important, for example. For me, the most enticing feature of the Mac notebook computers is the "instant on" feature, a perfect example of making something easy to put down and pick up (of course, running Unix is a big plus, too). Python's dramatic reduction in both finger-typing and type-check typing make it a far quicker and more functional tool than most other programming languages. And right now, if I were wireless and could drift around the house while connected to the net, that could seem like an excessive luxury but it would be helpful enough to make it worthwhile.

So phase two was to use Zope with a few enhancements (to create a master list, list the most recent articles, and create an RSS feed). I did this last February and started logging, reasonably happy with the system. But as Volume 2 of "Thinking in C++" became more intense, the tool became just a bit too hard to use – the aforementioned threshold of easyness got moved, in this case. Then I went to Burning Man (I will eventually collect my scribblings on that experience into an article) and had my head rearranged about what the world might look like, and after that it was nonstop C++ until the book was done, and in the meantime I fell back to maybe one entry per month (and suspended the newsletter for quite awhile, as well). It's not that I didn't have lots of ideas during that time, it's that even the small ceremony necessary to put them up had moved me into thinking in terms of articles (worth the effort to publish) vs. ideas (not worth the effort to publish using my Zope system).

After going to Gerald Weinberg's "Amplifying Your Effictiveness" (AYE) conference in Phoenix this past November, as well as creating the article on UML drawing tools where reader feedback was so useful, I found myself wanting more feedback. Initially, I tried making wiki pages and asking appropriate friends and acquantances to comment upon my chosen topic, but it wasn't always interesting to them and most of these conversations drifted to a stop before I was satisfied. Also, the effort to start such a topic puts in too much of a threshold. The obvious alternative is newsgroups, but these have always been far too noisy and meandering to me. Because they must be under one vast umbrella, they are not topic-oriented enough and it's too hard to follow the thread of a conversation that interests you. This assertion is more than supported by all the thread-management software that's been developed for newsgroups.

For each of the last couple of articles I've posted (and notice that I'm calling them articles, because it's clear to me now that's what they are), I've added a simple wiki page (using the Zope ZWiki product), which just allows adding comments and not editing the page (I'll consider the latter if the need appears). This seems to have worked quite well, and the article becomes the topic and all the comments are directly associated with it, so there's no effort to read the full conversation about a particular topic. I suppose a logical extension of this is to use a single wiki page with the article at the top and the comments following. This would end up looking much like Ward's Wiki at C2, and right now it's a little depressing to think that all of my mental effort would simply bring me back to using an idea and structure that they thought of years ago, so I won't go there just yet (I also think it's helpful to separate the topic from the comments, so you don't have to see all the comments if you don't want to).

I now believe there are three modes of written communication: books, articles, and ideas. The first two I have long experience with, but I lack a medium for ideas. My friend Bill Venners, who created Artima.com, notes that his weblogging structure at Artima also seems to motivate people to produce articles rather than ideas. Daniel Will-Harris observes that the weblogs he finds most interesting are the ones that have small idea-sized entries appended together on a single page.

That's what I'm missing, I think. I will certainly continue to have article- sized entries that come up from time to time (Bill dubbed these "blarticles"), but I'd like a medium of expression for ideas that is so simple that I won't hesitate to put something up. This will be more about brainstorming than producing fully-developed concepts. So I think I'd like it to be email-based, so I can just email entries to my weblog. I think the mailblog could enable weblogging for a lot of other people, as well.

Some time ago we figured out how to add FAQ entries to Zope via email, so that may be the right place to start. However, I'd be interested in knowing if there are any systems that already do this out of the box (as noted above, I'm not interested in learning a whole new world view in the process).

I also wonder if, in addition to an RSS feed, some people might find it more helpful to just add their names to a list and get an email containing each new idea (and a link back to the associated wiki page if they want to make comments). Most of the people I know haven't acquired RSS readers, and the few readers that I've tried have been remarkably awkward so I'm still in wait-and- see mode on that (if Mozilla incorporated a slick RSS reader into their browser it could become a must-have that Microsoft would have to catch up with).

A related problem I've been struggling with is to create other new modes of expression. The seminar and the seminar-on-CD have been versions of this and certainly effective in their ways, but are notably high-ceremony operations that don't lend themselves to being easily thrown together as experiments to see if there's anything to a particular concept. I've been looking into Flash development tools to see if there's an easier and better way to turn a slide- based lecture into a Flash presentation, as a way to distribute "article-sized" multimedia experiences, but so far the amount of effort required to produce these things seems quite high; not something you can just dash off in a few minutes. Still looking for the magic solution there. Daniel and I have discussed ways to use a phone bridge for distance learning, along with HTML slides and something like NetMeeting (yes, a phone bridge rather than streaming audio, which has never worked satisfactorily. Sometimes old technology is the best solution).

More important to me is live experiences. I've been struggling to escape the straightjacket of the full-scale seminar for years now. After organizing seminars through the web, I began to imagine what I called a "self-organizing conference," one that would involve the speakers in the structuring of the conference, and use web technology to do most of the rest. Although I still think this idea has potential, Martin Fowler rescued me from the throes of my imaginings when he suggested that we try something like it on a small scale, which we have done with great success for several years now and are beginning to expand (we call them "summits"). This takes self-organization to a whole new level by making it spontaneously self-organizing. You get a bunch of interesting people together and decide what to talk about. At the Python conference last February I was exposed to a variation of the "open space," where someone puts up a topic and people show up to participate in the discussion. It's like a BOF, but it doesn't require so much planning; you can come up with the idea right then rather than being required to submit your BOF for approvial weeks or months in advance. At the Python conference, they only had a single big room for this (usually the spaces are physically distinct), which actually made it more interesting because people could easily drift around the room from topic to topic. Another activity that I first saw at a Python conference was the "lightning talk" where people could get up and speak about what they were working on or interested in for 3 minutes, just long enough to get the ideas across but not long enough to get boring. Notice there is some parallel between these structures and written "articles" and "ideas."

Over the past number of years I've also been evolving my seminars towards being less "teacher talking, class listening" and more interactive experiences for everyone. The more I do this, the more that I find that people learn much more and we all have a much better time (my friend Matt, a physics teacher, is fond of telling me how studies show again and again that lecturing is the single worst way of transferring information). The closest I've gotten to a good mix, I think, is the design patterns seminar, where I briefly describe a single pattern and then we turn around and do an exercise that develops that pattern. I find that we not only move forward faster, but that everyone's energy level (most notably my own) keeps increasing because there are no long, drawn-out lectures (I've heard there is an ideal length for lectures, something under 15 or 20 minutes).

What I'm looking for, I think, is a spectrum of in-person experiences, just like ideas and articles and books are a spectrum of writing experiences, and the Web and MP3 and Flash and phone bridges are a spectrum of media experiences. One dimension of this spectrum includes working with other people, friends whose minds I enjoy interacting with, such as Bill and Richard and Daniel and Martin and Dave Bartlett and Jeremy Meyer and Scott Meyers, and some of the people I've met at the summits. I think it would be stimulating and educational for people to see and participate when it's more than just me there. In fact, I know this is true because when Bill and I have done seminars together and have gotten rolling back and forth, people have invariably commented that it's entertaining and stimulating.

Speaking at user groups is certainly one end of this spectrum, and the user group experience seems in general to be beneficial (although I have never found one to belong to myself, probably because I have this tendency to move around and live in obscure areas). But I would also like to create events that have various levels of remuneration to help support my other habits. One of the wiki-discussions I launched was based on an idea of having myself and one other person available in a hotel suite in a city for a few days for team consulting. The idea was that if we were already going to be there for some reason we could stay a few extra days and save the travel costs for potential customers. Also, customers could easily book a few hours or a couple of days, depending on their needs and budgets. Although I think there's a germ of a good idea buried somewhere in there, the general concensus among the discussion group was that this would be too hard to package in an understandable way.

However, the concept of the package did get me thinking about what works for customers. A seminar is a clearly-defined package with a lot of structure so people see exactly what they are getting, and it's much easier to sell to managers. But consulting – what does that mean? Everyone who isn't an employee says they're a consultant, even if what they're doing is contract programming. If I say "I consult," it always requires further explanation ("I come in for a few days and do a design or code review, or help solve a specific problem"). Perhaps what I need to do is create a "consulting package" with clearly defined activities and durations (and the ability to customize). That gives people a much better idea of what I do and what the possibilities are. I am currently ruminating on how this should look.

In the grand scale, I still think of books and seminars and conferences, of course, but I'd like to think that tools and modes of experimentation that allow thinking-in-the-small-and-experimental could allow me to create more interesting and exciting experiences (both for me and for you), and to develop these experiences in a more organic and evolutionary fashion. I am coming to believe that both the results and the process will be not just more desirable, but more exciting and energizing for everyone concerned.

Feedback

    Links I Read
Cafe Au Lait
Artima
Daily Python URL
Martin Fowler
Joel on Software
Paul Graham
Cringely
Search     Home     Web Log     Articles     Calendar     Books     CD-ROMS     Seminars     Services     Newsletter     About     Contact     Site Feedback     Site Design     Server Maintenance     Powered by Zope
©2003 MindView, Inc.