Out with the old, in with the new (Technical Debt Part 4/3)
During the last month, I’ve been working on paying off some of the technical debt that has been collecting interest over the course of KitchenPC’s development. Most of these have been stability changes, or just things that, when fixed, remove roadblocks to a smoother development process. I’d like to go over these in a three part blog series that, like the Hitchhikers Guide to the Galaxy trilogy, will consist of five parts.
Part 4/3: Out with the old, in with the new
I’ve been using Visual Studio 2008 since the very beginning of KitchenPC. It’s fast, it’s stable, it works. When Visual Studio 2010 came along, I used it briefly but just couldn’t convince myself to make the switch.
Visual Studio 2010 suffered through a similar development cycle as Project Server 2007, the application I worked on at Microsoft for a solid chunk of my career there. Previously, Project Server was written as an ASP website (Yes, ASP, no not ASP.NET) and had a very mature code base mostly built in JScript (Yes, JScript, no not VBScript.) We decided to rewrite the entire server in managed code, while at the same time, cramming as many new bells and whistles into the product as we possible could. We decided to do all of this during the Office 2007 time frame, a two-year release cycle where most products weren’t changing anything huge, and certainly not being rewritten from scratch.
The result? A giant disaster. The product was unstable, buggy, most innovative features ended up getting cut anyway, and the new features that did go in were poorly thought out and implemented. On the plus side, we had a brand new, more modern code base. Albeit, that code base took a lot of shortcuts, ensuring that down the road, backwards compatibility would come at the cost of being stuck with a poorly laid out set of APIs. The amount of technical debt accrued during that release would make China shudder.
Visual Studio 2010 went through a similar release. The product was rewritten as a WPF app using managed code. They brought in two architects, both of whom came up with wildly unrealistic estimates for what could be done. They spent years on this redesign, getting nowhere. The result was a release that was unstable, buggy, slow, and really didn’t do anything new besides its support for the .NET 4.0 framework. When I tried VS2010, I ran into nothing but problems. Sometimes it would act like the shift button was stuck down, and highlight text when I moved the arrow keys. Often times I’d be editing an ASPX file, and the entire IDE would just spontaneously vanish. It was noticeably slower, and some larger files would just grind the entire thing to a halt, forcing me to do edits in Notepad2 instead. I never quite did figure out how to debug both .NET 4 server code and JavaScript code at the same time; I would have to detach the debugger from the web server and reattach it to Internet Explorer, wasting all sorts of time. In the end, this product was a huge step backwards from the 2008 release, which simply worked.
However, years past and we’ve now moved on to the .NET 4.5 framework. A lot of the open source projects I use now require at least .NET 4.0 to even compile. I find myself really wanting to take advantage of some of the new language features, and plus when I start doing Windows Phone or Surface development, I’m going to have to upgrade anyway. So I figured I would give Visual Studio 2012 a shot.
Wow, am I impressed with this release.
This IDE is beautiful, it works, it’s slick and it’s fast. You can tell they really took the time to pay off some of their own technical debt. It no longer seems clunky, it no longer crashes, and the debugger works flawlessly. It has all sorts of great new features, like the ability to pin a pane to any monitor, better code searching, and improved JavaScript support. I’ve also been taking advantage of new build features, which I’ll go into more detail in the next post.
Even more impressive was the fact that I could open my VS2008 Solution file and it was upgraded on the fly to target the .NET 4.5 framework, and everything compiled successfully on the very first try. What I thought was going to be an evening of work turned out to be a few minutes.
I also took the time to install Windows 8 on my dev box, which I’m equally happy with. It’s also a fast and stable environment that looks nice and is easy to use. The weird new metro-style start menu is a bit weird, but it actually works fairly well when you’re using two monitors. You’ll only get the start menu on one screen, and you can click on the second monitor for it to go away. Your shortcuts in the launch bar are duplicated on both monitors, so you can use those to quickly launch applications if that’s what you’re used to. I’m also getting fairly comfortable with the Win+Q key to find and launch programs, which works almost as well as Spotlight on OS/X. I also really enjoy the panoramic themes, which are collections of beautiful images that span multiple monitors.
I think upgrading to Windows 8, .NET 4.5 and Visual Studio 2012 sets me up for a much better development environment for the KitchenPC web site, as well as mobile and tablet apps in the near future. Needless to say, if there’s anyone reading from either the Windows 8 team or the Visual Studio 2012 team; fantastic work, and keep it up!