John Hawkins likes Dave Cuddy for Ted Stevens’ Senate spot. Checking out his site, I would agree with Hawkins: I wouldn’t agree with him entirely, but he’s miles better than Ted Stevens, both on policy and on personality. I might even donate a few dollars to his campaign, as I dislike Ted Stevens that much, even more than George Voinovich (who was alright as Governor—certainly better than Bob Taft, who was no Robert Taft—but has been a bad Senator).
This afternoon, the development team met to discuss an application which is in production. Basically, we have a relatively big (very big considering our size) application which our IT director is going to present to a large number of other IT departments for different states. The program is rather innovative and conceptually works very well, but unfortunately, the people who developed the application did not, uh, have the foresight and skills necessary to make it an excellent app. In fact, the code is kind of an embarrassment and because our IT director is going to present it at the end of next month, we all have to work together to clean it up.
The short story is that about two years ago, they (I was not there yet) brought in a bunch of consultants to design this application. Eventually, they winnowed down the number to just a couple, who had a lot of freedom to develop because everybody else was so busy. They created a code generator which automatically generated data and business objects according to the CSLA framework from a database design and got an initial business framework designed. For that, I give them a lot of credit because from what I’ve heard, there was a mishmash of somewhat poor development going on before and very little structure.
Unfortunately, however, their design was, uh, of the quality of a first draft. For example, their code generator sometimes worked but sometimes it didn’t. It also was only good for tables, so any views or stored procedures were impossible, severely limiting the data processing capabilities of the database and basically using it as a glorified storage mechanism rather than a thing of relational beauty. The business objects they created were fairly weak and brittle, and the way that they hit the database left much to be desired—you could only “select * from [table]” and that was it. If you wanted to use a where clause, they had an XML file of additional SQL statements which would get turned into functions (yikes!). If you wanted to join two tables together, you had to join the business objects together (Holy O(n^2), Batman!). But the thing that I despised most was that they put metadata in the same table as data. For you kids reading at home, here’s what I mean:
In normal relational database theory, you have a table with a set of columns. So let’s say you have a table called House, which has a color, the number of windows, and an identifier for the owner. In that case, you would create a table House with three fields: color, number of windows, and owner (or, more properly, OwnerID which links to a table Owner). Each row in the table would have three values: the color (“green”), the number of windows (“5″), and the owner (“Bob”).
But what happens when you want to add on whether the house has a chimney? In normal relational databases, you would figure out where to put the column, see if you need to restructure any other tables, insert the column, fill in values, and perform any additional maintenance. Then, the application developers will update their data and business objects to handle the new field and then any applications which use those objects. This can be a fairly complex process, so somebody came up with what they thought was a brilliant idea: create a table with this information! That table would have an ID and a Type, so there would be four records in the table: 1 – Color; 2 – Number of Windows; 3 – Owner; 4 – Chimney. Meanwhile, there would be a second table which has an ID, a House ID, records for house attributes, and values, so you now have four rows in a table for each house. That’s not in and of itself necessarily terrible; rather, the bad part comes when you try to put things back together. If you want to get all of the characteristics of a house, you have to select the four records from the table and join on the house attribute type table four times. Then, if you want to turn this into a record which you can use for reporting, display, or business object use purposes, you have to pivot the table results. There are three major problems with this. First of all, it’s incredibly slow compared to the select statement above. Any time you’re doing four inner joins, there will be a performance hit. Second of all, you can’t index important columns. Say that we have a lot of queries based around the house color and would like to put an index on that. You can’t do it with this setup, so you lose a very important performance aspect. Finally, data integrity goes right out the window, considering that the “value” field is going to be different. You can’t guarantee that the “number” that you put into the number of windows field is really a number, or that the OwnerID really relates to a record in the Owner table. Instead, for any integrity, you’ll have to do that in the business objects, where it’s much slower and less effective.
Anyhow, enough ranting… The upshot of this is that we have to re-write this application in about a month, on top of any existing obligations. Just when I thought things were slowing down… On the plus side, that’s more comp time and I’ll probably be able to swing a vacation in Europe once ticket prices drop enough to make it reasonable (and fortunately, I’ll know some places to crash while I’m traveling…). On the minus side, their code was a horrible mess and we’re going to have to re-write it. In our meeting today, we started divvying out tasks based on our strengths: our TDD zealot will take the lead in testing, I’m doing database and business object work as well as workflow (oh, they integrated a workflow into the application; we’re going to separate that out), our GUI guy is doing GUI testing (because we don’t have to change the front end), the informal project manager is working with me, and the guy who “owns” the application now is working on getting a full set of requirements together (as he’s the only one with a rough idea of what exactly is supposed to happen) and assisting us with test development and the code-behinds. We have a good team, so I’m sure we’ll get this done, but I’m definitely taking a week-long vacation as soon as this is over, as I’m going to need it…
Ted Stevens has been indicted on seven counts of making false statements. As the National Review editors argue, he should retire. Stevens is a disgrace to his state and the number one example of Republican incompetence in Congress. He’s the Senator who struggled to get the Bridge to Nowhere as well as Mr. Intertubes (the Internet, you see, is like a series of tubes and sometimes these tubes get clogged). Fiscal conservative heartthrob (in every sense of the term) Sarah Palin sounds to me like she’s nudging Stevens toward resigning as well in the guise of asking him to show the public his innocence, and if she can keep cleaning up the mess in Alaska, she’ll go a fair way toward removing some of the stain on Republicans which they acquired over the past dozen years in power.
At work, we have a project which is in an interesting situation. Basically, we received a $4 million federal grant to, over a period of three years, perform a certain set of goals. In roughly six months, we’ve met or exceeded almost all of the goals, having used up roughly $175K.
In Normal World, this would be a wonderful success and a model for other states. In the Bizarro World of Bureaucracy*, however, it’s a big problem because they asked for $4 million and probably wouldn’t even spend $2 million at its current scope. Naturally, the idea of thrift and returning unused monies is entirely inimical to bureaucracies, and the reasoning here is that because we used so little, the next time we apply for a big federal grant, the grant writers will look and see that we only used up a small fraction, so they will assume that we’re over-estimating costs, even if the estimates are legitimate. So instead of returning the money, scope creep comes in to play, expanding the program into additional counties, including more services, and pretty much redoing the rules. This, naturally, will dilute the aims of the program and likely will affect negatively the quality, all so our bureaucracy doesn’t lose relative power.
If you want to improve the outcome, structure the terms of the grants differently. For example, this particular grant was relatively easy to track progress on because there were quantitative requirements. Bonuses to employees for meeting these requirements without a loss in quality and under budget (something which we could also track to a reasonable extent considering the circumstances) would allow returning the unused grant money to be a good PR move on both sides and an incentive to keep the program within its constraints. This wouldn’t prevent all of the problems, but it would help solve this particular one.
* – I probably should note that although the Bizarro World of Bureaucracy is usually associated with the state, I’ve worked in corporations which are large enough to have their own bureaucratic vortex of twisted interests, and as far as our bureau goes, it’s probably not bad considering the circumstances.
It recently came to my attention that a new edition of FA Hayek’s Prices and Production is now available. I read Prices and Production back in undergraduate school and it would be nice to go back and re-read it now that I have a stronger foundation in economic thought (though, sadly, not so much in capital theory, given that it fell into terrible disinterest over the past couple of generations). When you consider that Joseph Salerno is the editor and it also includes several of Hayek’s essays on monetary and capital theory, the book’s a steal.
Now that I’m settled in at my apartment (it took me long enough…), I can finally start doing the things that I kept putting off, claiming that I didn’t have time to do. The big thing is riding my bike to work. Now that I have a seat which is actually somewhat comfortable, I’ll scout out the route today and probably begin on Friday, when I know that I won’t have to deal with much traffic either way (because I leave at 11).
In the meantime, I was brought in on a softball game on Friday as a ringer. Considering that I hadn’t swung a bat in about a year and have never played organized softball, that’s not a good sign for the team that brought me in, but they really needed an 8th player. We ended up getting run-ruled in the 4th inning and the real shame was that if one more person were there, we probably would have made it a competitive game. I ended up playing center field (another bad sign) and going 1-3 with two strikeouts, a putout, and an error. Next week is their tournament and I’ll be playing then as well, so I hope to do a bit better. We’re guaranteed to play at least two games, thus giving me a good five or six opportunities to strike out…
After softball, I was pretty exhausted, so I only ended up walking about 3 1/2 miles on Saturday before my legs tightened up too much. Today I’m feeling a bit better and will probably end up riding 9-10 miles, as I’m heading downtown to see where I can lock up my bike and then going to the main library with Pat. There’s nothing better to do on a Sunday afternoon than go to the library and get a new library card because the one that you had expired a few years ago because you were out of town for roughly the previous six years and didn’t have the time or interest when you were actually around…
It’s a shame that I was a bit too young for Firing Line, as it’s exactly the kind of show that I would have liked, given that back when I watched a lot of TV, I ended up on C-Span way more often than I should have… Unfortunately, most political shows nowadays take two to three Democratic Party hacks sitting with one or sometimes two Republican Party hacks and have them yell at each other for a few minutes, trying to score debate points rather than actually discussing issues. There are some interesting things online, like Bloggingheads.tv (I particularly like the Jonah Goldberg-Peter Beinart discussions), but Firing Line was probably the only show on network TV where you could expect a serious discussion on eschatology…
While messing around on YouTube last night, I stumbled upon an episode of Firing Line with Kenneth Minogue, then-professor (now emeritus) at the London School of Economics, as the guest. Minogue had recently published Alien Powers (which is, happily, going to be re-released in October of this year) and Buckley was discussing the nature of ideology.
Things to watch out for:
- Minogue uses “Popperian” in a sentence. Even on PBS, that’s got to be a rarity…
- Sometime around part 4, Minogue lets loose his New Zealand accent but covers it back up not too long thereafter.
- Buckley uses my favorite phrase. It’s kind of hard to hear because Minogue was talking at the time and as soon as it registered to him, he laughed.
- The Q&A fellow reminded me of Shemp with a bad haircut. There were a lot of bad haircuts in the intellectual world in 1985…not that this has changed any…
- Assisting a woman by lighting her cigarette is an act of aggressive chauvinism.
- I can’t see Kenneth Minogue’s eyes under the Coke bottle lenses. For all I know, he’s a robot who shoots lasers out of where his eyes would be.
Here are the six parts in order: