Thursday 12 July 2007

Business Case for upgrading Delphi

On July 6th, Nick Hodges blogged about a new wiki page he has created entitled the Business Case for Delphi. This is a great idea (admittedly not his own) and for a moment I thought he had stolen my thunder on a topic I've been meaning to write about myself. However, Nick's topic is about why Delphi should be taken on in the first place.

This is not that story.

About 6 weeks ago I wrote an internal document called "The cost & business case for upgrading Delphi". As I have stated before, we're using Delphi 6 here because it is stable, fast and I didn't need any of that .NET junk on my PC. Delphi 7 wasn't considered to be that great a leap from Delphi 6 and so here we stayed. Moreover, it's not just an upgrade of Delphi but also a reinstall of all the third-party components that one uses. And then the time taken to get your environment just right so it's intuitive. There just wasn't enough to make me move.

The first release in all this time that has really caught my eye and made me want to upgrade is Delphi 2007 for Win32. I downloaded a trial and loved it, it was the first time I'd used the new Borland Developer Studio IDE although I've seen it for years in the demos and tutorials. All the new IDE features (code folding, component palette searching, refactoring) made me want to kiss the screen, so I thought I'd put together a list of pros and cons as well as a price so that I could discuss it with the company.

The money wouldn't be the biggest hurdle I'd have to overcome - I'd need to explain why I couldn't move development forward for a particular timeframe whilst I ensured that every application, DLL, plug-in, utility, etc was recompiled successfully and working at least as well as it is now. And then, after all that, we'd be at a stage where the software works exactly the same as it did before I started.

"What, all that time spent and you end up with the same product?", I can anticipate hearing.
But you and I know that it isn't just about that. Time invested there means potentially time saved when we have a much better version of Delphi, an IDE with cool features which supposedly mean I can turn work out faster. Ah, I'm getting them back on side with that one.

So this document, which admittedly was very balanced and not at all as conclusive as I'd have liked (but I was being honest) went to the technical director who, predictably, said, "Doesn't really help either way, does it?". Which was fair. So I posted it on the Developer's Group newsgroups (a UK-based developer's group that we're a member of and that has a private newsgroup) to see what my peers could add to tip the balance. The result was frankly disappointing given that its members and regular contributors are well known magazine authors and conference speakers.

But then I received an email from one of the group's administrators who asked if she could include the document as an article in the next magazine as it would make an interesting discussion. I happily agreed although I had privately thought that if there was to be a discussion, it would have taken place on the newsgroup.

In the meantime, I wanted to discuss it here. I'm going to reproduce snippets of the document below to outline the salient points and then see what you have to add. Do you agree with the points I make, disagree with them, or have things to add to them? Can you tip the balance? My heart wants to move to Delphi 2007 with Software Assurance but my head is wondering if it worth the investment of time and money.



Why move?

When Delphi 6 was written, there was no Windows XP. We use third-party tools (JEDI) to allow our application to take on the themes supported by Windows XP and Vista. Whilst this particular example is free and the widely accepted alternative, my personal opinion is that the more we move away from third-party support (where Delphi offers the same solution) the better, as it enables future upgrades to be less troublesome.

For many of our third-party components, Delphi 2007 was not available at the time we purchased them. But, in a fortunate turn of events for us, Delphi 2007 fully supports any code written for Delphi 2006 (they called this a “non-breaking release”); this means that most of the third-party components we already own will actually work in Delphi 2007, because they were written up to and including Delphi 2006.

Other reasons to move are not necessarily end-user based, but developer based. In 7 years, CodeGear (formerly Borland) have added dozens of IDE enhancements that would make the life of the developer much easier. Many of these features result in writing faster code, which means things just get done quicker.

Why not move?

The minimum deployment platform is Windows 2000 and so any Windows 98/Me users could not use the software (according to CodeGear’s site, this hasn’t been confirmed).
Third-party vendors appear to continue to support older versions of Delphi (including v6) because so many users don’t upgrade to the most recent versions.

Note: after I write this, someone added a comment on the Developer's Group newsgroup that they have successfully deployed Delphi 2007 software on Windows 98 and Me with no special code.

It could take up to a month to get everything fully migrated across to the new version. This includes all the standard software as well as utilities and plug-ins.

13 comments:

Unknown said...

Jason,

I see you've already got the correction about Win98/ME.

You missed a few other things, though:

1. The refactoring/syncedit/code templates in the IDE are amazingly productive.

2. Improved RTL (with FastCode) and improved memory manager.

3. Improved debugger.

4. Improved dbExpress (totally rewritten).

Also, I think you're really overestimating the time to port from Delphi 6. As you said, a lot of your 3rd party stuff is already compatible with D2006; in this case, it's usually adding an {$IFDEF VER_180} switch to an include file and then installing.

My boss had the same objections (we upgraded from D5 to D7 when D8 was released). HIS boss, however, overheard our discussions and asked me to justify the upgrade. I did, and we got it a couple weeks later. My boss still hasn't upgraded on his machine.

I upgraded 7 major applications I wrote/support in one afternoon, including porting over 3rd party stuff (TurboPower stuff, internal components, and a library [Clipper Functions for Delphi] I used to sell). I did quick testing the following morning (not 100% coverage, but enough to insure that major functionality and appearance worked) and found zero problems - still haven't found any. Well, Ok. A minor issue: New compiler warnings and hints that didn't exist under D7, like 'Descendant class [whatever].create should match the case of inherited class [whateverparent].Create'. (A .NET-related warning, as some of the FCL is case-sensitive, IIRC.)

All in all, it was a no-big deal upgrade.

Anonymous said...

> I upgraded 7 major applications I wrote/support in one afternoon,
> including porting over 3rd party stuff

I second that. It took me only some hours to migrate the components (about 1500 in 40 packages). It was mostly a simple {$IFDEF...} adjustment.
Compared with the time that I had spent on writing hacks and patches to overcome bugs in Delphi 7 that are already fixed in Delphi2006/2007, the time to migrate to Delphi 2006 tends to zero.

Steffen Friismose said...

1) The debugger is improved a lot. My work involves it fair share of debugging, and the enhancement have made it faster to find bugs. This pays if you work on old software. I need all the help I can get.

2) Speaking of old software. The refactorings are wonderful. We work on some pretty ugly old code at times. Even our developers with financial background now dare to refactor the code.

3) Delphi 2007 only runs on windows 2000 and up, but the applications have no problems running on 98 and maybe 95. The code in the RTL and VCL that I look at still contains all the compatibility for windows 9x.

4) Vista compliance. This is important to us, and we want to have a GUI that blends with the OS.

5) Developer satisfaction. Never underestimate a developers need/wish to work with the newest IDE/technology. Personally, I would think twice before accepting a Delphi 6 job, but if I developed in Delphi 6 a Delphi 2007 job would be quite attractive.

6) Replacement of third party components with Delphi's own. I have over the last 2 years reduced our search path from 30-something to just below 20 entries, and more are scheduled for removal. Every time we upgrade (we always do) it gets easier.

7) The more often you upgrade (get SA), the shorter time it takes. Keep up with the development.


I few items to note.

a) The project extensions have changed, so you might have to change in supporting programs too.

b) A lot have changed in the dfm-files, and to avoid having merge-issues for months we have a small python script that checks out all .dfm and associated .pas files from the version control. Opens them in Delphi, saves them again. The forms are then reviewed, and saved back to the version control system. Saves a lot of work.


Hope you can use this.

Anonymous said...

The move from D2006 to D2007 wasn't breaking, and that, frankly broke a lot of code. One of the third party libraries DID change its name and that means you get some very, very strange linkages unless you do some rebuilding and tinkering.

Best to install on a machine that has never seen 2006 to be safe, or you may well go insane.

That aside, most components move forward pretty quick and easy.

D2007 is nice, but it has its fair share of warts. You aren't getting away from older product's warts, you are just replacing them for new unknown ones. Not very helpful at times.

As for the RTL fastcode and memory manager - you can get all of that even in D6.

Any true advantages in D2007 are strictly in the productivity arena and it is there that you need to focus. The new build system, for example, can make more complicated builds simpler and reduce human error.

Most of what you'll get out of Delphi 2007 will never be apparent to your end users, and only really shows up over a longer time period for the company. It isn't like you'll become 10x as productive.

Anonymous said...

Delphi 2007 would be a huge upgrade from D6, especially productivity wise - although I can't exactly quantify why I feel this, I'd probably have to try writing a small project in D6 to remind myself of what I'd miss.

I upgraded from D7 to D2006 some time ago, which I found really difficult getting all the interrelated 3rd party components to play nice. Going from D2006 to D2007 took hardly any time at all. Basically go:
Component -> Install Packages -> Add... and select all your .bpl files (you'll get some errors about run-time packages, which you can ignore). You may also need to change some path information, but that's about it.

Anonymous said...

Last year, we finally made the big move from Delphi 5 to Delphi 2006. The reason it took so long are obvious, Delphi 5 did everything we needed (albeit we needed to use 3rd party components to do some of the native Windows stuff that D200* does) and we had a largely stable system with CodeRush for added productivity.

However D2006 looked really good and a Nick Hodges post pushed me over the edge and we upgraded to D2006.

Before doing so i'd checked that all components had either a D2006 version or at least had source. In the majority of cases we just used the source to create a D2006 package.

The upgrade was SUPRISINGLY PAINLESS, of the three major applications we upgraded there were only a couple of minor bugs introduced (mainly due to changed properties, but there was one page control component that would not play well in D2006 and needed to be replaced).

After a week I no longer even missed CodeRush due to the templates and other functional improvements in D2006. It was a great move.

However D2006 had some memory issues and so last week we upgraded to D2007 which seems to have resolved everything.

I now use D2007 + ModelMaker Code Explorer (CANNOT LIVE WITHOUT THIS ONE) + GExperts. Its very stable and highly productive.

My original point was kind of lost, but what i intended to say was, "Don't OVERestimate the time that it will take to upgrade your projects"

Anonymous said...

We also recently went through the migration from Delphi 5 to Delphi 2006 on a 2 million line codebase. It took us about 4 man months, mostly due to 3rd party components that didn't have a 2006-compatible version that needed to be migrated to alternatives first. The nice thing about this is that we were able to clean up our 3rd party libraries and drastically reduce the number of components in use in our software. So, you can pretty accurately estimate the effort by looking at the components you would need to migrate.

Unknown said...

Thank you all for your comments, these have been extremely useful and of very high quality. No less than I'd expect from this community.

I know that all of the third-party cpomponents we use have D2006/D2007 versions so there won't be an issue with which components we can use in the future. You have pretty much suggested that I shouldn't worry too much about conversion time as it should be pretty smooth. This is a great comfort and of great significance.

Also I agree with your comments about the developer benefits and I stated those in my original document, but of course it takes good management to realise that costs don't just have to benefit the product or the end-users.

I've also been interested in the FastMM stuff for a while and dabbled with it in Delphi 6. Have you guys seen a significant speed up in your software using FastMM instead of the old BorlandMM?

amitai said...

Jason,

First, let me say that I am not related to Borland/CodeGear
in any way
, further more my professional work is completely in VS2005 for the last 3 years! And am only using D2007 for my personal projects.

I think that a smart Management should realize that basing all
their development on Delphi creates an important Business
relation between your company and CodeGear!

Now you haven't supported Delphi with your pocketbook for
6 years or so! I think that's not a smart Business decision on
your part!

Are you still using Win ME or Win2k on the majority of your
work stations?

I think CodeGears success is a MAJOR concern of your company,
maybe you should give them an estimate of the cost involved in
migrating your products to C++ or C#, to give them some insight
in the Business risk in case Delphi is not maintained any more?

Good Luck

Amitai

Unknown said...

Amitai

I appreciate your contribution. However I do not share your interpreation of CodeGear's lack of success. And I can't say I haven't Supported Delphi for 6 years, I just haven't bought a new version of the IDE, that's all.

For me CodeGear is at a point where things are good again. We're all happy campers like we were when they scrapped the Inprise name and came back to Borland and concentrated on the tools.

For me it isn't a case of Delphi or something else, it's Delphi 6 or Delphi 2007. It's that simple. My strongest language is Delphi and to spend time moving away to C# or C++ would, for me, be an incredible waste of time and resources.

I don't think either that Delphi is in jeopardy. I did a few years ago but not now.

I don't disagree with you though that our reliance on CodeGear tools means we have a strong relationship with them and again for the first time since I started using Delphi 1, I feel that I'm actually being listened to.

Unknown said...

I will no repeat - they just will delete it again, but yesterday i post here a comment with some useful criticism about Delphi and they're deleted it. So make decision yourself about all these comments...

Unknown said...

Vladimir,

I am intrigued! I can assure you that I don't and have never deleted comments that I don't agree with. You only have to look at previous comments on other posts to show that I like to hear from smart people who disagree with me.

So please take the time to post your comments again as I am now interested to hear what you have to add to the discussion.

Unknown said...

A few more things to contribute...

Faster runtime. In addition to the memory manager and FastCode routines that Ken mentioned, the compiler has added inlining support, which reduces overhead for common operations like Length().

Compiler enhancements like for..in and records with methods, which let you write more expressive code (which means fewer silly bugs).

Now that Delphi is using msbuild as its build engine, you can compile your app from the command line, without needing to jump through a thousand hoops to get the command-line parameters all exactly right. So if you don't yet have a continuous build, setting one up with D2k7 will be much easier than it was with D6.

And I'll agree with those who say you may be overestimating the time involved. If you're using third-party components that support D2006, and if you're already using the latest version of those components, all you should need to do is install the packages in D2k7 and compile your code. If you use runtime packages, their filenames will probably be different and you'll have to update your build scripts, but I can't see it taking more than a week, if that, unless you're doing something unusual. (Then again, there's probably something unusual in *everyone's* process, so...)