In my last entry, I discussed complexity in evolution, and how the most highly complex software is, in fact, the edge case. Far more software is less complex; more people have written a "Hello World" program than have written an application of the complexity of, say, Microsoft BizTalk Server.
This begs the question - how can I maximize my experience in building less complex applications? How do I do it at all? For anybody who loves to build fantastic software and change the world, it's important to leverage these opportunities to both improve and enjoy yourself.
Chris Sells writes, "I found out something about myself: I'm really good at digging into the state of the art, whether it's one technology or a feature across technologies, if I have a problem I'm trying to solve. However, if I'm just wandering in a space w/o an explicit goal, e.g. give a presentation, build an app, write an article, I'm lost; I just can't muster any juice."
I find this to be true as well. Say that I decide to come up with a piece of software to write which I can complete in a reasonable amount of time, gain some new experiences from, and share with as many people as I am interested in impacting. Frequently, I will spend more time coming up with the idea than I do actually implementing the project.
There are a couple of useful tools that I have found for overcoming these obstacles. The first is the Coding for Fun website. There are tons of starter ideas, as well as fully fleshed out ideas here. This is a great place to start, because you may find something you've been interested in learning here.
More importantly, Microsoft is starting to define a platform for making your smaller, less complex applications more globally useful: gadgets. Not that this is a new approach. Stardock supports the notion of gadgets with its DesktopX software. Konfabulator has desktop gadgets. Desktop Sidebar has sidebar gadgets. The difference is that these gadgets ran inside of an applicaiton. They are now coming at the platform level. Check out Microsoft Gadgets to read more and to find links to other information.
I think this is important for a couple of reasons. First, it makes it easier to write something fairly cool in a short period of time. Why? You don't have to write all of the platform-level technologies such as containers and windows. You can just create the gadget to do something neat. Second, since there will always be more software that is less complex, we can expose that less complex software more robustly, make it more useful, and generally improve the overall ecosystem.