After mostly sitting on a mostly functional, if not feature complete, build of POP Forums v8 for almost a year, I deployed it as a part of the second coming of PointBuzz, the most popular unofficial fan site for Cedar Point amusement park. It was kind of the step child site I haven't paid enough attention to over the last couple of years. My partner on the site and I decided to scale back what we were doing and stick to what we were good at: forums, photos and news, instead of duplicating a ton of content that the official site already provided.
For the most part, I'm extremely pleased with it so far. There are quite a few things I look forward to adding, and now that the AJAX framework is very much a production piece of ASP.NET, use more of it. So far, here is what I've learned since putting it in the wild.
First off, templated controls rock. Placing ads inline is easy, and easy to programmatically turn off for our premium members. When I write the additional plumbing to show moderated posts and/or topics inline, it's as easy as putting another template in the various controls. Adapting pages to the "look" of the site is super easy as well. For this site, we ditched five-column grids and focused on the titles because we think that's what's important.
Using non-rendering controls to control other stuff on the page is cool, but it grows messy. My plan was just to get as much display logic out of the page itself as possible, and it does, for the most part, do that. However, when I look back at the code, some of which is now three years old (like I need to be reminded of that), I have no idea what the hell is going on.
I finally have security logging that works. I admit it's not something I'll use often, but it was something I always wanted when someone was doing unpleasant things. Perhaps my biggest shocker is that my home-grown session manager works as well as it does. Only 0.4% of session starts lack a session end. I must have rewritten that code four times, so it feels good to see it work.
While I'm generally happy with the performance, most pages rendering in .05 seconds or less on average, I still have some indexing weirdness to deal with. For example, I want to index the user ID column on the posts table, because it makes looking up "my posts" easier, and to some degree makes counting posts by users faster, but it's taking a pretty big hit when it inserts a new post. I've tried to index as little as possible, and in a way that I think makes sense, but I might have to bug a "real" SQL person to help me on that.
Surprisingly, worker threads to send queued e-mail and keep the session data current are living pretty well out of an HttpModule. There have been a lot of philosophical discussions in various blogs and forums about whether or not this is a good idea, but for someone who doesn't have access to the box, they don't have a lot of choices. I know it's the only way to truly kill a Web app that I've found (it'll even crash the dev server in Visual Studio if the session tables, for example, are not available), but it has been surprisingly stable. I still think there's a better way.
I've come to the conclusion that the UI to code approach is a better way to do things. The class library unfortunately only half-does that. I still have some older stuff that's stuck on that objects-mirror-data mindset, which doesn't really align well to specific use cases and the enforcement of certain rules.
There are still quite a few things I want to add. Even then, I don't know what I intend to do with it, if anything, outside of my own use. I've talked about selling it again, giving it away and asking for money only if you use it, or just keeping it all for myself. I don't know. At this point, I'm just happy that it's getting used at all, given the time I put in to it.