After my last rant, I was asked to identify a “best practice” for the enterprise. If the reader is interested in industry wide best practices, I will provide some links and referneces at the end of this entry, but I have one suggestion that is my own: cross-functional project teams.
I once worked on a supply chain application that managed two billion dollars worth of products. I was managed by an IT manager who was in charge of IT services for the marketing group. Our servers were being managed by an IT infrastructure group. The infrastructure group was eligible for a yearly bonus that was based on server uptime. In our experience, server uptime is not the same as application uptime. This was before the .NET framework. Our DLLs would crash, and the only answer was to reboot the server. The server team would refuse to reboot the server even if trucks were piling up on the docks while the application was down.
Once, the server team closed a port on a router that was required by our application and it took two working days to track down the problem. The server team did not have access to our application documents and did not know that this change would bring down the application.
It is not a good idea to organize teams around a technical area of concern. When there is a problem in such an environment, teams often work at cross-purposes. The server guys blame the applications, and the developers blame the server guys. Teams should be organized around the application and the business it serves. Bonuses should be based on how well the business runs not on how well the technology runs. IT staff should not be isolated from users or from the business in their own silos – they should be required to meet, interact with and be accountable to the business. IT staff should be encouraged to understand the ecosystem they are part of, and measure their success in terms more meaningful than mere performance metrics.
A Cross-section of Best Practice Ideas:
Extreme Programming
Steve McConnell
RUP
Microsoft Solutons Framework
ITIL
I keep hearing that such and such a technology is not ready for prime-time, or that another technology is not “enterprise-ready.” I earn my living as a consultant working with products and applications that ARE enterprise ready – but the tools exceed the requirements of the project, adding a layer of complexity and unmanageability to everything I do.
Oracle is not the answer to every database need. I once worked on an application that only had six users, twelve tables and at most two hundred thousand records; but I was forced to depend on a database administrator for every little change I needed to make. The issue was not that I was unable to work with Oracle, but there was a policy in place that prevented me from having access. The application did not require the use of transactions, nor did the application use stored procedures or triggers. Corporate policy aside, MySQL would have done the job very well.
People I know sneer when I declare my interest in PHP. PHP, they tell me, is not “enterprise-ready”. What does that mean? Most of the applications I have worked on that employ the Microsoft .NET framework are NOT enterprise-ready. I do not blame this on the .NET framework but on the people who have built the applications.
.NET may be enterprise ready, but many of the developers who use it are no more skilled than the average PHP programmer. In fact, I have seem PHP code that I hold in far higher regard than some of the .NET or Java I have seen. I currently maintain an application for an anthropologist at Carleton University that is based on PHP and MySQL. The application has over 90 users. I have never had to reboot the server, and I rarely hear from users.
Today, I am working on a database using Windows Terminal Services. Every two or three minutes I experience an encryption error and I am forced to log in again. This morning I deployed some new code to the server, but the server is caching my old content. Nothing I can do works. Several times a day, the server hangs and I get some strange Windows 2003 error message I have never seen before. Is this what is meant by enterprise ready?
It is possible to build stable and scalable applications with Oracle and the .NET framework – of course it is – but employing these technologies is not a guarantee. Stupid code is still stupid code. I would prefer a well-constructed MySQL database to some of the poorly constructed Oracle databases I have seen.
All this talk of enterprise ready platforms and products is misplaced. We should really be talking about best practices for the enterprise. A tool is just a tool, and a fool is always a fool, no matter what technology he or she uses.