Work Stuff


Microsoft recently announced that they will be releasing the source code for .NET Framework 3.5 when Visual Studio 2008 is released towards the end of the year. That’s very unexpected news, indeed! Apparently VS2008 will actually let you step into the framework code while debugging. This is going to be immensely helpful in unwinding various evil bugs that cause errors deep inside the framework. It will also be (hopefully) educational to see how Microsoft actually implements some of the basic functionality of the framework. Here’s the announcement if you want to take a look.

We had a big meeting at work today kind of looking back at what we’ve done over the past year and looking forward to plans for the coming year. And I learned one really interesting thing during all of the discussion. One out of every fifteen patients seen in an emergency room in the Unites States is seen by a TeamHealth physician. I thought that was pretty neat! Sometimes in the daily grind of fixing bugs and trying to meet release deadlines, it’s easy to forget the larger picture. But the program that I work on is used to recruit, credential, enroll, schedule, and pay all of our physicians, so it’s a big part of keeping TeamHealth going. It’s nice to be reminded what the end result is: better medical care for millions of patients and their families.

With my previous job and my current one, I’ve had the chance to work with sets of third party controls from two of the major players in the Microsoft .Net arena. At my previous job, we used the DevExpress DXperience control suite, and at my current job we use the Infragistics NetAdvantage control suite. They both provide a lot of functionality beyond the in-the-box controls from Microsoft, and each suite has its advantages and disadvantages. To be honest, I had a part in selecting DevExpress at my previous job, and I had nothing to do with selecting Infragistics where I am now, just in case that influences my opinion in any way.

Comparing the two suites, I find the object model for DevExpress to be laid out a little more clearly. Infragistics seems to use more layers of inheritance and lacks a bit of consistency in their hierarchy from one control to the next. For example, Infragistics has a set of calendar controls that provide a month view, a week view, and a single day view. If you get a reference to a UI element representing an appointment, you can link directly to the associated appointment object with an “appointment” property from the month view or the week view, but not from the day view. That doesn’t make sense to me at all. I can understand that deeper layers of inheritance can possibly be useful if you are deriving a lot of your own classes from parts of the third party controls, so it’s not inherently a bad thing, but I personally prefer the simpler structure that DevExpress uses.

In almost every situation I have come across, the DevExpress controls seem to perform noticeably more quickly than the Infragistics controls. I see that mainly when you are dealing with a lot of data, such as loading up a grid or treeview with a lot of information. The difference is less noticeable with small amounts of data, but I think it is still there. This is a big issue for me, and the speed of the DevExpress components is one of the primary reasons we selected them at my previous job. When we were trying various controls sets, we had a large set of sample data that we loaded up into each control we tested, and the DevExpress controls were the only ones we found that were consistently as fast or faster than the Microsoft controls. That’s a big plus in my book.

One disadvantage with the DevExpress controls is that we found more bugs in them than I have found with the Infragistics controls. Most of them had to do with crashes deep in the .Net framework during various paint routines, where some referenced object was null or something like that. On the flip side of the coin, in my experience DevExpress was very quick to fix errors once we reported them (though occasionally we had to provide sample applications that caused the crash, they didn’t always require that). They have a very regular schedule for releasing updates (monthly) and if we reported an error at least a week or a week and a half before the next release, they almost always got our fix in. The one bug I filed with Infragistics took a little longer to fix, and their release schedule is less regular, so even when they tell you they fixed the issue, you still don’t know when the fix will actually be available to you, which is a little frustrating.

Related to bugs is the issue of feature requests. We asked DevExpress for several things to be added that we thought would be useful to us, and for the majority of the requests, they were happy to make the changes we asked for. On the other hand, if you look through the forums or knowledge base at Infragistics, you will see the same response over and over again: “our control works that way because that’s how Microsoft’s control works.” I really, really don’t like that response. It’s great to have a control that works just like Microsoft’s if you are trying to duplicate Microsoft applications exactly, but most people aren’t. I think most people buy third-party controls for the additional customization they can provide, and if requests for reasonable customization are frequently turned down because Microsoft doesn’t offer that customization, then why would you buy the third-party controls in the first place? I like the attitude at DevExpress a lot better.

As far as using the controls themselves and setting their properties and all of that, I think that the DevExpress controls are a bit easier to use, but perhaps slightly less powerful. I think the Infragistics controls directly expose a few more properties (which you would have to set in code using the DevExpress controls), but on the other hand, some of their visual designers are terrible. Specifically, the grid layout designer is one of the worst I have ever seen. You are supposed to be able to drag columns around to reorder or resize them at design time, but very frequently resizing one column will cause other columns (that you did not touch in any way) to resize by a few pixels. Why in the world does that happen? It’s incredibly frustrating when you are trying to resize several columns to the same width, and each time you adjust one is messes up the other that you have already set.

Both control suites provide a great deal of customization for the look and feel of the controls, way more than you can easily do with the Microsoft controls. That was a big selling point for us at my last job with the DevExpress controls. We wanted a straightforward way to get away from the default dull gray look of the Microsoft components, and DevExpress really provided that for us. As far as I can tell you can do the same things with the Infragistics controls, but I’ve spent more time on that with DevExpress, so I’m just used to the way they do things.

So overall I probably prefer the DevExpress controls. That’s not to say that the Infragistics controls are bad (except for the grid layout designer), because they aren’t. They just seem to have a less straightforward class hierarchy, they tend to run slower than the DevExpress controls (at least in my experience with large data sets), and I haven’t been as impressed with their customer support. On the other hand, the Infragistics controls seem to be more stable and I’ve found fewer bugs and quirks with them than I did with the DevExpress controls. So it all comes down to trade-offs regarding what’s most important to you. I think either of them are a great step above the in-the-box components from Microsoft.

As of today I have officially completed my first 90 days at my new job. That means two big things:

1) They liked me enough to keep me after the standard 90-day probationary period for initial hires (Yay!)
2) I can start taking vacation now. You earn it from your first day, but you can’t take it until you’ve worked 90 days. (Just in time for Christmas!)

I still really like my job, and I think the switch has been a very good thing, especially because I get to spend so much more time at home with Joy and Charis. I’m thankful for the opportunity that God provided in his timing, and for his continued provision for me and my family. What a blessing!

Last Friday I was able to meet a couple of people from my old job for lunch. It was really great to see them and catch up with each other a little bit. I really do like my new job a lot, but I also miss the people from my old place. I guess that’s normal if you work at a place for that many years. Anyway, we met at Fuddruckers for lunch and had a nice little visit over some tasty food. So thanks to Carrie and JP for meeting me, because I really enjoyed it!

Today was my first day at my new job. Being a larger company than the one I previously worked for, there was quite a bit of HR stuff to do the first day, but once all of that was out of the way, my new boss gave me an overview of the software product I will be working on. Tomorrow I should get to starting poking around on the source code to begin to familiarize myself with how things are organized in more detail. Everyone I met today was very nice and made me feel welcome, which is always comforting when undertaking a big change like this. So I would say the first day was good, and I’m looking forward to heading back tomorrow to learn more.

Since tomorrow is my last day at my old job, they had a lunch for me today at the office. Ron made his delicious lasagna and meatballs, Sherry and Bill brought desserts, and I think Debbie brought salad and garlic bread. I thought the lunch was a really nice thing for them to do. It’s a bittersweet thing leaving the place I have worked for the past eight years. I’m definitely looking forward to the challenges and adventures that await at my new job, but on the other hand I’ve been through a lot with these people. I’m certainly going to miss everyone, but since I will still be here in town, I hope to keep in touch. My new office will be very near an area with a lot of restaurants that are popular for lunch, so hopefully I can meet up with the old folks there on occasion.

Next Page »