1. It started by me thinking "hey, an FPS counter would be nice."
2. I realized that the current font rendering method (creating a texture out of the string) isn't suitable for dynamic (often-changing) text, so I would need to implement glyph-based rendering.
3. Then I realized I needed a blit method in my texture class for building the texture containing all the glyphs.
(4. At this point I researched bin packing algorithms, and found a decent quick-ish one.)
5. My implementation of the Image and Texture classes didn't lend itself too well for implementing a nice blit() method, so I had to change that: image is now a plugin category (eg. Pygame plugin, PIL plugin...). On a related note, the font package will probably also become a plugin later.
6. Realizing that constantly updating a texture that was already created would be incredibly slow, I changed Texture creating so that it's only uploaded to the GPU when it's actually used for rendering. You can also upload it manually before that.
7. And at this point, I'm about to implement blit() for the Texture class so that it actually updates the texture with the blitted region, if the texture is already uploaded.
*PHEW* I think I can finally start working backwards up the chain to implement that FPS counter this all started with...
EDIT: Inspired just a bit by HopeDagger, I'm thinking of moving my development journal off Gamedev.net to the Spineless Jelly web site. Either using the Drupal blog module or Wordpress, I'm not yet sure (or even sure if I'll move).