27 February 2007

Software Architecture - Why it Matters

I have worked with a few people over the years whom I would describe as the "just get it done and soon" type. These guys (these few have all been men) eschew putting much thought into the software they build, or thinking about kaizen or continuous improvement. Working with them is frustrating because they tend to create systems that are better torn down than modified. In other words, thanks to their myopia and/or hubris (to the sales manager: "sure, we can do that in two weeks!"), the software they build has massive design debt and huge costs to maintain. (I am not going to get into the other extreme right now -- the guys who suffer from analysis paralysis -- but that, too, can be a big yet much different problem...)

The well known benefits of good design are written about throughout the software development world. But the one benefit that may be most important is this: good software architecture is motivational.

Working for a company that supports thoughtful software design ignites pride. Having people at all levels of a company that understand what good architecture is makes this possible. For me personally, it is a rush knowing that everyone from developers on my team to the CEO understands that this philosophy contributes to:
  • A positive perception of our product
  • Motivation among the team, and
  • Increased profitability.
Motivation and internal pride glue together the customer satisfaction and financial sides of the business. Good software architecture is necessary to have a successful software business. Customer satisfaction and long term financial health are keys to "success," in my opinion. That's not all that defines success, but for me those two things are required.

I have seen the architecture weenies that get so bogged down in design issues that they make slow and pained progress. However, that is usually when they are in an organization that is unbalanced and indulges them because it lacks good business people. It is more often, in my experience, that the siren song of "just get it done now, it's good enough" can influence people in almost any organization, and is therefore more dangerous.

26 February 2007

Adding Google Maps to your Site

Good post (yet another) from Scott Hanselman.

23 February 2007

OpenDNS

Scott Hanselman has a great post about OpenDNS which goes beyond what I know about it. However, a couple weeks ago I began using it due to frustrating issues with my ISP, and I think it's a good alternative to know about.

I live in an area that technological time has largely ignored. I like it that way except for needing seriously fast internet access. For the first year and a half, I used (and will not put a hyperlink to) Direcway, or HughesNet as they are now called. A satellite ISP. It was better than dial-up, and that is all I can say about it without bashing it.

Last summer I found out some of my neighbors used a local wireless ISP, which has several towers around the northern Shenandoah valley and will install an antenna for you to connect to its 802.11b access points. I am thirteen miles away from the nearest tower, but since I am 500 feet above the Shenandoah valley floor, I have a line of site to it. They hooked it up and it worked. It worked really well. The speed varies between 1mbs and 11mbs. A lot of the issues with satellite went away, such as weird timeouts with MS Outlook Web Access and the unholy bandwidth throttling (aka "Fair Access Policy"). Good riddance, satellite!

All seemed good for a while, but then I started having occasional trouble connecting. My calls to their tech support would usually end up with them saying, "we can ping your antenna, why don't you power it off and back up." Often that fixed the problem, but not always. Usually after some time things would work again. But I was getting really peeved with the lack of reliability.

I noticed one day that when opening a new tab in Firefox and experiencing the connection problems, some of my other tabs would still connect to their respective URLs. That made me think that this must be a DNS problem on my ISP's end.

I stumbled across OpenDNS in a podcast I was listening to (something from ITConversations, can't remember which podcast right now though). I modified my router's DNS configuration to use OpenDNS's servers instead of my ISP's. That was almost a month ago and my "connectivity" problems have not occurred since. So +1 for OpenDNS, and thanks to Scott for a lot more helpful info about it.

18 February 2007

ASP.NET ObjectDataSource and Business Objects

This past Friday's ASP.NET MVP Chat was very good, a lot of participation by well known experts. I learned a lot just sticking around reading both the experts' answers and the side banter.

Anyway, one issue that has been bugging me is whether to use declarative data binding in ASP.NET 2.0. So I asked Scott Guthrie if it was really a prime time thing or just something to "give good demo." He and Scott Mitchell both suggested it's the way to go, so I poked around and found the following:

ASP.NET 2.0 Data Tutorials
Peter Kellner's SQLDataSource Comments
Brendan Tompkins ObjectDataSource/GridView Experience
DataTableAdapter Article at CodeProject
Rocky Lhotka's ObjectDataSource Frustration

I am not liking what I see.

The gist of all this seems to be that the ASP.NET 2.0 data binding controls are fine for ADO.NET data objects, but when you have custom business objects, a lot of coding jujitsu may be required. In other words, not only are you not saving time because you have to code a fair bit to make things like sorting and filtering work, but you are taking a leap of faith that the magic stuff being done for you behind the scenes is going to just work. The posts on the ASP.NET forums indicate a lot of issues that may consume quite a bit of time to debug. Again, it seems like for ADO.NET data objects, it works mostly, but for custom business objects, the jury is out.

Peter Kellner's experience (above) is another twist. To use SqlDataSource when a query requires filtering based on the current user id (a pretty common requirement), he documents a somewhat arcane technique to get this to work declaratively. That's cool, but now we're creating more "maintenance debt," and I'm left wondering what else is lurking to trip me up if I go down this recommended path.

We really should be able to implement some well-defined interfaces in our business objects and just have this stuff work. That has to be the best approach, and I have to think this is very close to being possible right now. I am going to check this out a bit more before I give up and go back to "DataSource = " and "DataBind()" and other trusted but monotonous ways.

Microsoft Help Needs a Laxative

Help in Microsoft tools used to be great. Of course, that was ten years ago. In Access 97 or VB (was it VB 6 back then?), I could hit F1 and within two or three seconds the topic would pop up and show me concise information in a well-structured help file. It doesn't take over my screen. Searching is fast. Freaking brilliant!

That was the pinnacle of Microsoft Help, at least for software developers, before .chm files and whatever this new crap is in Vista.

Fast forward to 2007. I'm in the venerable Visual Studio 2005. I have a dual core processor, big ass hard drive and more RAM than I ever thought I would need. I land on a .NET Framework object instantiation in my code and hit F1. I wait 30 seconds. I finally end up in the Microsoft Visual Studio 2005 Documentation application, which by the way looks similar to the thing launched from SQL Server 2005 Management Studio (and THAT THERE is a constipated beast of a tool, my comments coming soon...). The index tool window is unfiltered, and the contents text box is not synchronized with the topic I'm viewing. Neither is the contents window.

I click Search from the command bar, enter something interesting and click the Search button. It looks all over various Microsoft sanctioned web sites (MSDN, Codezone and some forums). I click Cancel after it has found some things and a big red X with "Search failed" is displayed.

Anyway... if the thing were just fast and lean, that would be great. I can use Google to search everything else much faster. Microsoft, you have made this help tool bloated and slow, it's not really helpful.