Frank Sommers
Posts: 2642
Nickname: fsommers
Registered: Jan, 2002
|
|
Re: YAGNI
|
Posted: Mar 8, 2004 3:36 PM
|
|
Well, I think folks who must write a LOT of software eventually, by necessity, realize that working today on something you're not going to need tomorrow, is pretty much an impossibility because of the time and effort involved.
But lately I also realized that the day after tomorrow always comes a lot sooner that we'd like to think. And when the day-after-tomorrow comes, a lot of code that we initially didn't need must, eventually, be written by someone. And it often turns out, at least in my experience, that that day-after-tomorrow code is a lot more complex and intricate than the initial code centered around business logic.
Take database access, for instance. A database is not only a persistence mechanism, but is also often a concurrency control tool. For instance, you may have 5 copies of your application running on a network. Say, you use some UI component that, by necessity, caches a lot of data (say, customer orders in a table model). As folks use the software, that data changes, and there must be some infrastructure that keeps all those UI data caches in synch. In that situation, to think about data management as an afterthought, is tantamount to just postponing one of the big issues in the application.
Or, if you have a database, consider the issue of managing reliable database connections in the presence of unreliable networks. That issue becomes critical only when you decide to deploy your application in the field, but then it surely becomes an extremely important issue. Again, it's possible, and may even be a good thing, to postpone that issue until after the business domain is clearly understood. But I'm finding that such "infrastructure" issues end up taking up a very significant time of an application's development effort.
In general, I think the YAGNI notion is attractive in a consulting or IT department situation where people have deadlines and management issues to deal with, including the need to show something to the customer as soon as possible.
As an ISV, however, I can say that my customers care little about actual release dates, or how much effort (resources) are put into an application or a release. What they do care about is often those infrastructure issues that nobody likes to talk about, nobody cares to discuss, but that make or break the success of an app in the real world. As a consultant, we can deliver a product, get management sign-off, and get our consulting check. As an ISV, however, that's just the beginning - you end up having to support customers, and in that situation, it is wise to think from day one about issues that might just prevent your application from gaining wide acceptance the day after tomorrow.
|
|