Articles from November 2006

New Egg/A-Data Aggravations

By Michael Flanakin @ 11:01 AM :: 1987 Views :: Technology, Other :: Digg it!

Back in September, I put in an order to New Egg Mobile-ready link for a couple of LCD monitors. Since I just got a new phone which supported SD, I figured I'd go ahead and throw a 4GB SD card on top of that. Life was good. A few days ago, I decided to give ReadyBoost another try since I updated to the Windows Vista RTM. Low and behold, I only had 800MB or so available. Now, this is definitely odd. I also use the card for my camera, so I figured I'd go ahead and remove any photos I had saved. The problem is, there weren't many. After removing them and formatting the card, I got a whopping 970MB available for ReadyBoost. Looking at the card in Windows Explorer shows the same. From here, I'm thinking that there might possibly be some issue reading the card, so I switch to an XP machine and guess what... 970MB. Now, this aggravated me, but let me just see what I can do about it; the problem seems fairly simple.

Here I am, on the phone with the first round customer service rep, Anthony. The guy asks for my invoice number and I ask where I can find it since I don't have the paperwork from the order. He tells me he's "frazzled" and wants to start over. Again, he asks for the invoice number.

Let me pause here to say I have no patience for stupidity. I can, however, understand when someone's having a bad day. One thing a lot of people notice about me is that I'm very understanding -- usually moreso than the vast majority of people. It's hard for anyone to make me mad unless I just don't like them or they continually do stupid things -- I'm also pretty good at focusing my frustrations, for the most part. The thing people don't usually know is how bad my temper is. Let me say that, if I don't feel like customer service is helping me, I can be customer service's worst nightmare. Don't take that lightly, either. I can be the biggest bitch you ever knew, if you make me mad. Anthony, here, was on his way to getting to know that side of me...

I kindly told Anthony I didn't have any of the paperwork from the order, so he'd have to tell me how I could find it. He stumbled for a moment until I asked if there was any other way he could look my info up. "Oh, can I get your email address?" Here we go... progress. We go thru the motions and I tell him I received the wrong item. Of course, Anthony isn't a tech guy, which is why he's answering phones. He proceeds with a line of questioning that basically amounts to, "How did you not know you got the wrong thing when you opened it?" His problem was with the fact that it's been over 2 months since I ordered the card. I understand the time delay, but knew I could get around any barrier they'd try to setup. I told him the packaging all specified 4GB and there's no way to discern the difference by just looking at the box. I admit, I could've loaded it in a computer and checked it, but I can honestly say that I've never done that, and I've bought dozens of these types of things in the past. Beyond that, he still didn't understand how I couldn't tell, so he changed the subject. Remembering I mentioned I didn't have the packaging, he said I couldn't return the item without it. Now, this is stupid. I knew it was something I could overcome, tho; however, first level customer service probably wouldn't be able to do that, so I pushed for the next line of defense, Gabriel, Anthony's manager. Of course, Anthony assured me Gabriel would tell me the same thing, but I wasn't jaded. "I don't care. I want to speak to him, anyway."

Apparently, Gabriel's busy; but he didn't have one tidbit to add: the packaging wasn't required. Alright, that obstacle's out of the way, so I'm fine with continuing on with the declining value of Anthony's support. He goes back to the issue of me not knowing the difference when I first got the card, so I asked if he even knew what an SD card was. He said no. Of course; that explains it. Apparently, he's thinking the difference would be as obvious as 14" CRT and 24" widescreen LCD monitors. This annoyed me. How can you provide support for something you have absolutely no knowledge about? He put me on hold again, for the 3rd time. His bumbling idiocy was starting to get to me; but that definitely peaked when he told me to call the manufacturer to have them troubleshoot the problem. I just laughed. This is where I stopped being nice. With language in check, I told him that no troubleshooting would resolve the problem and that I purchased the card from New Egg, and New Egg would be who I talked to about it, period. On hold again... Anthony checks back once and asks me to hold a bit longer...

Gabriel asks me to re-specify my problem and then starts a search to see if it's happened before. I don't like repeating myself, but I try to give every new level a slight chance to redeem their predecessors' stupidity. After a while, Gabriel finds out that this isn't the first time this has happened and will issue a refund. I'm fine with that. More pain than I'd like, because I have to go purchase a replacement on my own, but at least the problem will be resolved.

Just so y'all can watch out for the same issue, the card I purchased was the A-Data Mobile-ready link MyFlash Turbo 150x 4GB SD card. Fortunately, it did work with Vista's ReadyBoost (in the RTM release, at least); but I'll have to find another one, so it doesn't really matter, I guess.

Dell Expanding Services Offerings

By Michael Flanakin @ 5:54 AM :: 1721 Views :: Technology, Microsoft :: Digg it!

Any Dell shareholders out there might be interested in the recent acquisition Mobile-ready link of ACS Mobile-ready link, an IT services firm. The move will expand Dell's service offerings and possibly make the company more of an enterprise player when it comes to end-to-end solutions. I can see a move like this changing the corporate buys by offering enticing services packages along with their servers. Given the right deals, Dell has a good chance and making some shareholders pretty happy over the next year as ACS gets settled in. I'm sure Dell is hoping enterprise buyers will look at this as, "Who knows how to better service my Dell servers than Dell?" After all, that outlook is why IBM, Sun, and Microsoft have such lucrative consulting offerings.

Changing Power Options in Vista

By Michael Flanakin @ 4:16 AM :: 1840 Views :: Technology :: Digg it!

As Shawn Cicoria Mobile-ready link (and plenty others have) pointed out Mobile-ready link, Windows Vista tries to take a bit more control over your shutdown capabilities. The reason for this is because Vista wants you to have as much up-time as possible, so it's streamlined the shutdown/start-up process. One of the things you'll notice after using Vista for a while -- especially on a laptop, where you constantly turn the computer on and off -- is that Windows now starts up faster than ever. Obviously, there's more going on behind the scenes than determining how your computer handles the shutdown, but I know I've seen several people who prefer to hibernate rather than sleep.

For those not keen on the difference between sleep and hibernation, hibernation puts the computer in a more "deep" sleep, where the computer saves it's current state to the hard drive and shuts everything down. This is why all of your open programs are returned to their previous state. When you tell your computer to sleep, it doesn't shut down completely and will still use your battery power. Obviously, this is important for laptops because if you run out of battery power, you'll completely lose whatever state was saved. This is also why hibernation is better if you'll be leaving the computer for an extended period of time. For more detailed information, see the Advanced Configuration and Power Interface (ACPI) specification Mobile-ready link.

If hibernation is more your cup of tea, then check out the Power Options in Vista, where you can configure this to your heart's content. Just go to the Windows (aka Start) menu, type power options and press Enter (Note: there is also a link to Power Options in the Control Panel). Click Change when the computer sleeps (on the left) and then Change advanced power settings. Phew... Ok, so it took a while to get here, but now you simply need to decide what you want to do. There are tons of options here, so check them all out when you get a chance. The ones I want to point out are under Power buttons and lid. For laptops, you may be most interested in the Lid close action settings. Beyond that, the Start menu power button option may be the most important to you, but you're also able to change the power button and sleep buttons react. The default is to use the sleep mode for all.

Vista Power Options Dialog

One last note about Vista's power settings. Typically, laptops stay on while plugged in; however, I've noticed that my laptop tends to turn off after being on for extended periods of time. I haven't tried to track this down, but I believe there this is due to a 18 hour power rule. In the aforementioned Power Options dialog, the Sleep / Hibernate after options are both set to 1080 minutes, which is 18 hours. I haven't decided if I care about this or not, tho. Sometimes I leave long-running downloads going on my laptop, which would be stopped by hibernation; but that isn't really the norm, so I think I'll keep the setting. It'd be nice for my computer to get a "real" nap in since I rarely give it a rest outside of the typical sleep option.

Week of Oracle Database Bugs

By Michael Flanakin @ 6:47 AM :: 2854 Views :: Technology :: Digg it!

On the heals of the SQL Server is more secure than Oracle Mobile-ready link post yesterday, I had to mention that security firm, Argeniss Mobile-ready link, is planning on releasing 1 security flaw in Oracle's database every day for a week Mobile-ready link. The purpose is to raise the awareness of Oracle's apprarently lax view on product security. The announcement acknowledges that other database vendors also have problems; however, Oracle has had the most security problems for the longest time.

While the claim states the company could do this for a year, I highly doubt it. If that was the case, there would be no problem in going a month. Honestly, I'd urge them for a month-long venture. A month shows more of a problem than a mere week. Despite that, I think the whole thing is interesting. I'd like to see something similar for SQL Server to see what came up. Considering the fact that no security patches have been released, I'm curious as to how many issues have been brought up and/or exist.

Simon Guest's 10 Tips for Setup Programs

By Michael Flanakin @ 5:21 AM :: 1558 Views :: Development, Technology :: Digg it!

Simon Guest Mobile-ready link mentions 10 tips Mobile-ready link he'd like everyone who creates an installer take into account. I have to agree with his list. Here's a paraphrased version of his list with a few comments of my own...

  1. Include prerequisites in installer
    If your app requires something else, at a minimum, create an extra installer that bootstraps the prereqs. This is handled by .NET and I know I've seen a lot of Java apps include the JRE, so that's good. I still end up seeing this rule violated every once in a while, tho. One instance is when a Visual Studio add-on required another add-on. The one in question should've checked for its prereqs and installed them if they weren't there. The task isn't that hard.
  2. Don't require a restart unless it's absolutely mandatory
    I have seen a lot of apps that don't really need a reboot, but I've also seen the ones that do. What I'd like to see is a note for more information on why the installer needs a reboot and/or what will happen if you don't. Not rebooting can cause consequences. I'd like to know what those are, so I know whether or not I should really stop what I'm doing just to reboot.
  3. Avoid unnecessary animation and menus
    I don't know that I've seen any violations in this area that often, but I can definitely understand how over-use might be an annoyance.
  4. Limit options
    Installers need to be simple. The best installers are the ones that don't need a lot of thought put into the actual installation process. Sometimes options are necessary, but what I'd like to see is different automated installs. For instance, give me an option for a typical, complete, and custom install. Also, when you do give these options, try to describe what's included in each so users aren't guessing what the difference between typical and complete is.
  5. Ensure uninstaller removes everything
    This used to be a huge problem a few years ago. The biggest thing I'd have to say is, don't use the registry. I admit that the registry is required sometimes, but not always. Be judiscious when using it or any other system-wide resources and when you do, be sure that your uninstaller knows about them so it can remove everything. There's nothing worse than having to manually clean out the remnants of uninstalled programs... ok, maybe there is.
  6. Make necessary permissions known
    I'm one of the many people who runs as admin, so I don't see this too often; but I have worked for organizations that don't allow admin priveleges to get out. When a user doesn't have the necessary privileges, tell them. If your installer doesn't, you're risking a install errors, which could essentially leave the system in a half-installed state, which could corrupt further installations or even the system, depending on what your installer does.
  7. Add ability to close necessary applications
    This is pretty simple. If you need apps closed prior to install, give an option to do it for the user. The only thing I have to add is, if it's possible to bring an app back to its previous state, do so. One example is a browser add-on. The installer should see if the browser is open, save as much state information as possible (even if it's only the URL), install the product, and return the user to the state s/he was at prior to installation. If I found an installer that did this, I'd be very happy. I usually do this manually to get around it.
  8. Display accurate time remaining
    This is pretty simple. As a user, I want to know how long the process is going to take. Figure in average network and disk access time, where applicable. Don't use the current time because that's probably not going to be consistent. Don't tell me about a percentage of files, because some files are larger than others. Be smart and determine the best installation metrics for your process. Where possible, group actions in steps and show the user where they are in that whole process.
  9. Automate unpacking and clean up after yourself
    This is another big one for me. There aren't too many installers that do this, but it does happen. There's no reason an "installer" should unpack files to a directory and quit. At least run the installation. Oracle's .NET data provider does this, for instance. And when the installation is complete, remove the files you created. Simon also mentions that the system %TEMP% directory should be used. I whole-heartedly agree. I don't like temp files clogging up my directory structure any more than they have to.
  10. Is an installer really necessary?
    I have to say that this is probably the biggest one for me, personally. If an app doesn't require system resources and/or is going into one directory, give me an option to not use an installer. Personally, I like to keep my apps which don't need to be installed into the system separate from the others. These are typically more portable, which allows me to take them from one computer to another without any repercussions. These tend to be small apps that I can't live without -- in part because of their portability.

I'm sure, with some thought, we could all come up with our own 10 installer annoyances; but I think Simon came up with a good list to start with.

Minimize Outlook to Tray

By Michael Flanakin @ 4:45 PM :: 1682 Views :: Technology :: Digg it!
I've wanted the ability to minimize Outlook to the system tray Mobile-ready link for a long time. I typically work with a lot of windows open and this is one that just sits there and does me no good, since I don't switch to it all that often. Apparently, these past few weeks have been perfect for new discoveries in old tools... well, maybe not old tools, but tools I've been using for a while. It turns out that Outlook has had the ability to minimize itself to the tray since Outlook 2003 was released. All you have to do is right click the Outlook notification icon and select "Hide When Minimized". That's it! It's that simple! I can't believe I've missed this for so long.

SQL Server vs. Oracle Security

By Michael Flanakin @ 6:33 AM :: 3781 Views :: Technology :: Digg it!

Recently, two reports came out claiming Microsoft SQL Server is more secure than Oracle's database. The first, Microsoft SQL Server Runs the Security Table, is primarily focused on Microsoft's new Security Development Lifecycle (SDL), which is probably the main reason these reports are even coming out. The second report by David Litchfield Mobile-ready link, Which is More Secure? Oracle vs Microsoft, is very short and simple, so I'm not going to say it's 100% correct in it's underlying claim; but I am willing to stand behind what it does show. Plain and simple, this report depicts that SQL Server has had less security patches released than Oracle in the past 6 years. That's it. Does that mean SQL Server is more secure? That can be debated, but it sure does make you want to trust SQL Server a bit more than Oracle -- that is, unless you're a zealot who tends not to believe factual reports dethrowning the tools you love.

I did see a comment pointing out the fact that the report doesn't take the database version patches were released for into account. I do admit that this is a key factor and should probably be noted; however, even if you break out the report into patches for the most recent releases at the time, Oracle still has more patches. Other questions that I can see come up are reported, unfixed issues, unreported issues (which would be hard, if not impossible, to quantify) and even the fact that all dependant code which has security issues should probably be included (namely, the MDAC flaws Litchfield pointed out). Honestly, I'm not surprised there was kick-back and I do expect to see more. The simple fact is, the report is valid. How you take the information it presents, however, is completely up to you.

Windows Photo Gallery in Vista

By Michael Flanakin @ 9:51 AM :: 1753 Views :: Technology :: Digg it!
I love it when you've been using software for a while and think you've been exploiting all the new goodness it has to offer and then, one day, low and behold, you find something new. It happened a week ago with IE7 Mobile-ready link and now it's Vista's turn. When Windows XP released the Picture and Fax Viewer Mobile-ready link, I was very happy. While the app doesn't do a lot, it's my default for every image format. I hate when I'm on a computer and it's setup to use some image editing tool to view pictures. I like having that step in between to look at it and/or flip thru a directory of pictures, which is usually what I'm doing, anyway. P&FV is perfect for that and it just got better... With Vista, came a completely rewritten version of Picture and Fax Viewer under the new moniker, Windows Photo Gallery Mobile-ready link. Along with a host of other new features, Photo Gallery supports movies. I'm glad to see this change. Despite the fact that it's minor, I often take a lot of pictures and movies with my digital camera, and this will allow me to look at them all at the same time, instead of having to go back to Windows Explorer to view the video files. Now, if they could do the same thing with audio files.

Lundquists' 2007 Tech To Do's

By Michael Flanakin @ 5:01 AM :: 1726 Views :: Technology, Microsoft, Predictions :: Digg it!

Eric Lundquist Mobile-ready link talks about 5 things you should be thinking about for your technology road map in 2007: open-source/Microsoft, mobility, simplicity, people, and customers. I wanted to comment on a few of them.

The first thing Eric touches on is the somewhat controversial deal between Microsoft and Novell to share patented information/technology. I have to say that Microsoft is not necessarily the wolf in sheep's clothing that most seem to think it is. Don't get me wrong, Microsoft -- as well as Novell -- is in this game to make money. My unofficial view of the deal is that Microsoft honestly wants better interoperability between the two operating systems. Novell just got lucky it was with them, in a sense. I don't expect Microsoft to ease up on any Linux vendor, tho. If anything, this will position them better to replace Linux. Microsoft has long had the "if you can't beat 'em, join 'em" strategy, tho. I believe this is exactly why this deal happened. Not that I'm saying one or the other can "win;" I honestly don't think it's a fight anyone can "win." They both exist and for different reasons. Sure, you can do what you need in both, but that doesn't mean everyone can live in one world or the other. That's why there are so many choices in every realm of technology -- beneath the covers, it's all the same game.

Next, Eric brings up the fact that we need to be looking at mobility. Mobility is something I feel very strongly about Mobile-ready link. I started a post a few months back that I haven't posted yet that touches on this very topic. This is almost a spark to get me to finish and post it.

Simplicity is always important. The one thing that has been fairly constant over the years is we continually increase simplicity. Granted, complexity is probably growing at double the simplicity rate, but at least there's somewhat of a balance. Software as a service (SAAS) is definitely a step in the right direction, but we can (and will) go so much further. I remember seeing something about hardware as a service being a possibility. I'd have to say that's been happening for years, but it isn't really a mainstream thing, so it defintely has room to grow, as well. There's something beyond that, tho. All of the big technology shifts we've had in the past 10 years have all been relatively known concepts that simply get applied on a macro scale. The question is, what's next? We're always looking to make life easier, so the next 5 years will most likely prove to be more interesting than the last 10. Honestly, Vista is one big step in that direction. The simplicity I've found in Vista is outstanding. (This wasn't intended to be a shameless plug, it's just how I feel.)

The last two items Eric mentions, thinking about people and customers, really resonates Microsoft's new people-ready campaign Mobile-ready link. Beyond that, I'd have to say that the mobility and simplicity points both have their own less obvious people-ready aspects, as well. Honestly, there are a lot of facets of being people-ready, but I think Microsoft hit the nail on the head when they coined this phrase. We've known it for years, but with the triple launch of Vista Mobile-ready link, Office Mobile-ready link, and Exchange Mobile-ready link, Microsoft really wanted to bring it home. It seems like Eric would have to agree.

Ctrl+Enter Handling in IE7

By Michael Flanakin @ 10:12 AM :: 2481 Views :: Technology :: Digg it!

One of the great unspoken improvements in IE7 that I only realized a few days ago, is the handling for Ctrl+Enter. I admit, there are a plethera of other changes I will probably enjoy more, but I was delightfully surprised when I found this one. In IE6, if you pressed Ctrl+Enter, whatever was in the address bar would be surrounded by www. and .com. Now, the string is actually parsed and IE7 figures it out intelligently. So, if you have in the address bar, IE7 will only append .com. I love it! This makes my browsing experience a touch more productive. Thank you, IE team.

Evaluating .NET Data Providers for Oracle

By Michael Flanakin @ 1:15 PM :: 1618 Views :: .NET :: Digg it!

Over the past week, I've been looking at a few different data providers for Oracle. Because of this, I've had to gather a lot of information from a lot of places and go thru a few heartaches here and there in trying to see what was viable. Unfortunately, priorities shifted before I could finish what I was working on, but I decided to go ahead and publish what I have so far Mobile-ready link. Hopefully, I'll get a chance to return to this; but for now, I just hope others can benefit from what I did put together.

Coding Standards

By Michael Flanakin @ 7:14 AM :: 1792 Views :: Development, Patterns & Practices :: Digg it!

Having been in a consulting role for some years, now, coding standards have become very important to me. I'm not going to weigh in on what coding standards I think are most important, but I do have plans to get a document up sometime. Beyond that, Jeremy Miller Mobile-ready link posted his thoughts on coding standards Mobile-ready link a few weeks ago. I have to say that I really like the basis of his ideas. To sum it up, creating a 100-page document covering every aspect of software development may be the best way to document all the standards that probably should be applied to any given project; however, we all know developers won't read it and/or remember the standards therein. The best you could hope for with this approach is that developers and code reviewers together cover the foundation of those standards. Even this is a long-shot, in my opinion. Jeremy likes the "by the team, for the team" approach, where coding standards grow over time and are truly (or, at least closer to) a shared vision of what standards are appropriate. I like the comradery and team buy-in this method would generate, but I don't think it really gets to the heart of the problem. For instance, what happens when, after a year, a project now has a 15-page coding standards doc and a new developer joins the team? Well, this would be almost the same as handing an existing doc to a team and telling them to work with them -- that new developer will most likely not go thru the entire document. The problem isn't really solved with this approach.

Personally, I like the idea of grabbing existing standards and changing those as you see fit. There are reasons people put these things together. Again, this doesn't resolve the problem at hand: developers don't want to read standards docs. What's the solution, then? Well, having a document might be a good idea to solidify the standards in their entirety. I don't think we can get away from that. The real problem is getting people to abide by a document that sits in an arbitrary directory and has no real effect on whether or not the software functions as needed. This is a maintainability and extensibility issue, in most cases, which is an afterthought for most projects... unfortunately. What we really need is automation. We need a tool that will tell developers when the code doesn't abide by standards.

The first tool that comes to mind is the built-in code analysis feature of Visual Studio (or the stand-alone FxCop application Mobile-ready link). Anyone can write rules for this that will be used to analyze code and point out problems. While I like what the tool offers, this is a lot more explicit than I'd like it to be. I want something that the developer doesn't have a choice with. I want to say, "HEY! Look at this! You're not supposed to do this!" In my opinion, this is the best way we have to-date to ensure standards are abided by. Think about it. When using Word and you get a squiggly saying you spelled your last name wrong -- that happens all the time for me -- do you tell Word to ignore the error or add the word to the dictionary? Or, do you just leave the squiggly on the page? More often than not, you'll find that people don't want to see the squiggly because it's saying that they're wrong -- or, might be wrong, in this case. I admit, when it comes to my last name, I've grown to ignore the squiggly, but in code, that's a different story. No developer will want to have squigglies all over the place if someone else is going to look at it. Sure, maybe a small handful would be ok, but nothing extreme. Either way, this is better than not applying any standards between developers.

The next potential solution I found was something new (to me): Code Style Enforcer Mobile-ready link, by Joel Fjorden Mobile-ready link. Now, this is what I'm talking about! The tool does exactly what I want: it tells the developer what's wrong. The only problem I have with it is that it doesn't cover nearly enough of what would be in a typical standards document. All it covers is implicit vs. explicit implementation of interfaces and abstract classes, naming, and what visibility settings should be available. This isn't nearly enough. Also, I have a problem with the way some of the naming standards work. For instance, you typically don't want a method name with an underscore (_); however, the standard control event handler is in the form of <control>_<event>(). Obviously, this is a direct conflict. So, the only way you can avoid a warning on these event handlers is to change the rule to accept an underscore. I don't like that because I don't want underscores to be in other methods. I do have to admit that this is better than nothing, tho.

I need to do some more looking to see if there are any other VS add-ins out there. If not, I may work on 3 things, which I think would bring the best level of coverage. First, I'd create code analysis rules for all the coding standards. This way, a team could bring them into their project and select the ones they do and don't want to apply. Second, and probably more useful on a broader range, would be to create an implicit code analysis execution for the current page. The only problem with this is that code analysis typically runs on compiled code. I'll have to look into that to see if there's a way around it. Probably not. Lastly, I'd like to have something that could auto-generate a standards document based on the approved code analysis warnings. This would be helpful for new developers and process/documentation enthusiasts. I honestly think this 3-parter would be very valuable; but before I commit to anything, I'll have to do some looking to see what else is out there.

When to Generalize Classes

By Michael Flanakin @ 5:58 AM :: 1800 Views :: Development, Patterns & Practices :: Digg it!

Sijin Joseph Mobile-ready link wrote about his experiences with abstraction/generalization Mobile-ready link (in the form of interfaces) a few weeks back. I have to say that this is a very common problem developers face when they hear about best practices. All too often, people will hear about how good something is and they'll almost blindly apply it everywhere. Then, when they run into problems with their overuse of the practice, the deem it as useless and go on a crusade against it. This is obviously an extreme case and I'm not saying that's what Sijin has done. I'm merely stating that this is a common problem that we must all be aware of so we don't fall victim to it.

Whenever you hear about a new best practice (or, new to you, at least), you really need to take a judiscious approach to applying it. Definitely give it a try on something small, if you have that luxury. The problem there is that we don't always have something small to try it out on; and, when we do, you may not see the full benefit of the practice in a small environment. This is why software architecture isn't for all developers. Some of the best software architects have no development background. I'm not going to get into that, tho. Knowing how and when to apply best practices, such as abstraction, is something you have to grow into. Honestly, I know I'm not completely there. I tend to over-design throw-away projects because I enjoy the art in my creation (one day, I'll post my thoughts on the art and science in software development). Before you can really determine when to and when not to apply a given practice, tho, you have to have the vision to see its benefit and the experience to know when that benefit will help.

As for my opinions on when to generalize classes into interfaces and/or abstract classes, I typically take a few approaches. First and foremost, I look at the solution and determine whether it needs to be build with extensibility in mind. If I'm creating something that needs a plugable environment, it's a given. Honestly, there are probably a handful of obvious situations like this one, so I'll skip those. Outside of those, I'd take a 1-2-3 approach. When you create the first class, take about 5 seconds to think about extensibility. Is it necessary? Think about the overhead of creating that extra layer. It's not always as simple as an interface. Ok, it's never that simple. You have to know how to deal with the interface at every point in which it will be used. This may be insignificant or a huge effort. There's no telling because it's completely contextual. The second time you create a similar object, you should take at least 30-60 seconds to think about it. How similar are the two objects and are they related? Hmm... As you can imagine, you'll need to have a lot more of an understanding at this point to know and understand the ins and outs of the application to be sure that an abstraction wouldn't break something. For larger systems, this is sometimes impossible, which is why I can't completely back the write first, design later methodology. The third time you create a similar object, you really need to look at everything and ask yourself how much repetition you're doing. Chances are, by this time, you've duplicated some logic. If you ever get to this point, it's pretty much a gimme that you need to generalize something.

Honestly, there are a bunch of factors in this discussion and there's no way for me to cover all aspects here. These are the main situations I've run into, tho, so hopefully you'll find some solice in them. I have.