Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

We're looking at converting a software package from Windows over to the browser. It's a back office system consisting of Ledgers, Stock Control, Order Processing, etc and it's written in a legacy language (Dataflex).

The project consists of 200+ database tables, 100+ reports, 300+ Views, 100+ Dialog boxes and 200 or so Selection Lists.

I'm really struggling to get my head around the technologies that I'll need to use to convert this to a more modern web based programming language / framework. Even simple screens (Entering a stock location) seems overly complex. With the current language, I can drag a bunch of Fields to a form (a-la VB), wire in a tiny bit of database code and I've got a screen that'll allow me to find, delete, edit and change records easily. 10 minutes of development, tops.

Has anyone got any suggestions on how I can move from my current VB style programming language to one that allows similar functionality on the web?

Has anyone got any ideas how I go about working out how many man hours it's going to take to convert this sort of project to a new language on the web?

What Web Framework options are available, and how do I decide between going with something like Rails vs going with something like ASP.Net?

We've a tonne of code wired to OnClick and OnChange events. (I know this is bad). What strategies can I take with regard to converting this to the web?

I'll admit - I'm hopelessly confused by some of the newer syntaxes used by modern languages. Is there any language that allows me access to the database without having to subclass everything through IEnumerable and various weird Typecasting things.

Has anyone done anything like what we want to do? What were the pitfalls?

Sorry about the vagueness of the question. I'd be more specific but don't know where to start. Delete away if I'm asking the wrong thing or in the wrong place.

share|improve this question

closed as too broad by gnat, MichaelT, Bart van Ingen Schenau, GlenH7, Kilian Foth Sep 8 at 14:51

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

5 Answers 5

The project consists of 200+ database tables, 100+ reports, 300+ Views, 100+ Dialog boxes and 200 or so Selection Lists.

Barely matters. Remember, all of that was a bad, old design. That's part of the reason for replacing it.

Even simple screens (Entering a stock location) seems overly complex.

Two things:

  • Rethink your use cases. Many legacy applications have bad design, bad workflow and busy screens filled with too much of the wrong kind of detail.

  • Rethink your toolset. The state-of-the-art, (ASP.Net, RoR, Django+Python) provides administrative ("CRUD") pages almost for free. Zero programming.

how I can move from my current VB style programming language to one that allows similar functionality on the web?

No. You can't find "similar" functionality.

You have to change.

Has anyone got any ideas how I go about working out how many man hours it's going to take to convert this sort of project to a new language on the web?

Step 1. Break the whole thing down into use cases, centered around actors and their needs ("User Stories")

Step 2. Roughly -- at a summary level only -- define those use cases and the relative value that's created.

Step 3. For the high-value use cases only design a correct data model and start building with state-of-the-art tools.

Step 4. Release something usable within a few months. You'll have to "bridge" data from the old system to the new system to make this work. Keep the bridge simple, it's going to be disposed of.

Step 5. Iterate the above trying to get the release cycle to be shorter. Release less stuff more often.

At some point, you'll have a ton of uninteresting legacy functionality left over that you didn't convert and don't need. You'll have bridge programs that are no longer creating value.

What Web Framework options are available, and how do I decide between going with something like Rails vs going with something like ASP.Net?

There are a million frameworks. There is no guidance on choosing one.

Why? They're all really good.

We've a tonne of code wired to OnClick and OnChange events. (I know this is bad). What strategies can I take with regard to converting this to the web?

Rethink your use cases from the foundation.

Who are the actors? What do they do that creates value? How do they want to interact with a system to create that value?

Your legacy system has lots of usable historical data. Nothing else about it has value. So feel free to discard the legacy workflows and processing steps.

share|improve this answer
2  
I think a little guidance can actually be had in choosing a framework. OP indicates he already has a background in VB, this would make VB.Net a leading contender for framework with C# running second, if only for familiarity with the Microsoft languages. Beyond that I completely agree with you. +1 –  Joel Etherton Mar 15 '11 at 17:39
    
"Your legacy system has lots of usable historical data. Nothing else about it has value." er, perhaps except for the business logic that is making the company money ;) –  Michael Durrant Sep 6 at 13:58

Relax

Here is what you need to do "High Level":

1) Document the current system

  • What are Screens, Reports, and Process in the current system?
  • What do they do?
  • Which ones are used?
  • Map out an ERD (Data Base Diagram)

2) Define the scope of the new project.

  • Is everything the current system moving over? (See your docs in #1)
  • What features will be added? What will be removed? What will change? What MUST be done before go Live? Can you implement a phased approach?

3) Put together a High level design.

  • Create some Screen mockups
  • Layout the UI (Roughly)
  • Decide on a Technology
  • Do some Proof of concept coding (This will let you know if you design will work and help you in estimating your time line)

4) Put together a project Plan. Timeline Budgets Resources needed Execute your plan.

share|improve this answer

If it wasn't for this statement:

Is there any language that allows me access to the database without having to subclass everything through IEnumerable and various weird Typecasting things.

I'd be recommending you look at Silverlight with RIA Services.

The architecture allows you to construct an application that happens to sit inside a web browser. It gives the user the benefits of working on the web - nothing to install (bar the Silverlight client), the ability for you to update the application centrally, etc.) while giving you the developer more control over the look and feel of the application than a traditional web application.

share|improve this answer

Before you even start doing this:

"We're looking at converting a software package from Windows over to the browser. It's a back office system consisting of Ledgers, Stock Control, Order Processing, etc and it's written in a legacy language (Dataflex)."

Ask, and have a good answer to the simple question: WHY do you want to do this?

Is it nice to have? Is it essential? Is it so you can make revenue? Is it because somebody thought it would be a neat idea?

You are about to embark on a massive software development task; which will as these things do, introduce new defects as well as cause a change of processes.

So some supplementary questions:

Are you, or is your organisation, prepared for the cost (in terms of development effort, diverted staff, defect fixing, disruption, etc)?

Are you prepared to have parallel running? (If not you have to cut over at some time and at that time the NEW needs to work. Really work. Not be debugged after cutover.)

Do you have to do data migration? (On a stock / inventory system, I bet you do. Otherwise there will be re-entering of existing data.)

Can you just go an buy something? Or rent? There are such systems available now as a service, just pay a monthly fee.

share|improve this answer

My apologies. Been there, done that.

We've a tonne of code wired to OnClick and OnChange events. (I know this is bad). What strategies can I take with regard to converting this to the web?

  • Refactoring. First and foremost, and before you even start programming anything web-related. Refactor the hell out of the existing solution until you get a code base where UI and logic are separated as much as possible. This will not always be easy with legacy code, but the investment will vastly pay off as soon as you start web development.

  • Resist the (very tempting) idea to reference Windows controls in the logic. The goal is to keep the logic completely independent from any UI whatsoever, even if that complicates things a little. You may want to have a look at concepts like MVVM, MVP etc. to get an idea how to structure things.

  • The platform-specific UI should be transformed into something that holds no logic at all. However, although DRY sounds good in theory, it does not hold with distributed applications. In real life you'll find that you will have to duplicate some parts of the logic for the client's UI. Performing a server round trip for every single UI control event leads you only to a terribly slow UI, because of inavoidable request latencies. Additionally, it produces a lot of unnecessary traffic.

  • For security reasons, any security-related check made on the client side UI should always be performed on the server side again, before processing the request. Requests can be forged and tampered with, and not every client who speaks HTTP to your server is really a web browser.

Good luck!

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.