Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

Effort estimate to develop .Net apps

Posted on 2014-08-06
14
Medium Priority
?
263 Views
Last Modified: 2014-08-26
Hi Access, VS and C# experts

I have to re-develop a total of 24 developed Access apps accessing a SQL Server DB using Visual Studio 2013, C#, partially Windows Forms, partially ASP.Net depending on the type of app.

I have between 30 and 35,000 lines of VBA code to rewrite, and a fairly small amount of forms, let's say on average maybe 5 forms per app.

I have never used C# in big style, but rather when maintaining a couple of C#-based apps, and that's already a couple of years ago, so the learning curve has to be considered. I'm developing Access front-end apps hooked to various SQL Server DBs since probably 15 years altogether, so I'm not a novice :-).

What would be your rough ball-park estimate for the time needed to migrate all my apps ? In the form of "from x man-months to y man-months" would be good enough.

Thanks for your help.
Bernard
0
Comment
Question by:bthouin
  • 5
  • 2
  • 2
  • +4
14 Comments
 
LVL 52

Accepted Solution

by:
Carl Tawn earned 1000 total points
ID: 40243361
Wow, that is a very broad question, and there are a whole bunch of factors that would affect the answer (complexity of what the application does, how much of the code can be directly translated, or needs to be completely re-written, how much scope there is for code reuse, etc).

Also how are your apps weighted? Are most project at the 30 lines end of the scale, or are most at the 35K lines end? You could find yourself converting the smaller ones in a day, or they could take you a week.

Your other decision is what technology you plan to use. For Windows you've either got WinForms or WPF, for web apps you've got WebForms or MVC. These technologies all differ quite a lot in terms of plumbing and how they handle interaction with the user - so will all have a different learning curve depending on your experience.

As a (extremely) rough ballpark I would say 1 man month for every two projects. That would give you elbow room to learn the technologies you need and do the conversions. You should be able to shave time off that on the smaller projects, and give your self more breathing space on the bigger ones.
0
 
LVL 70

Expert Comment

by:Éric Moreau
ID: 40243420
I don't think anybody can estimate 24 apps rewriting time with 4 short paragraphs of information.

I would start with one app (an average one - not the smallest, not the largest) and then estimate the others.

Also, since you are new to C#, be sure to check if http://msdn.microsoft.com/en-us/vstudio/lightswitch.aspx could help you
0
 
LVL 1

Author Comment

by:bthouin
ID: 40243469
Hi Carl

Thanks for your answers. Here my answers to your questions
- Complexity: medium. I'm not doing anything extraordinary in any of these apps
- Lots of the code can be directly translated, but C# syntax is quite different to VBA, so it might not be that simple
- All apps consist of specific behind-form code + virtually always one specific module + a variable number of common modules. The total lines of code of the common modules is around 3,000. The specific code varies widely from 100 lines for the smallest app to 8,000 lines for the most complex one. I have about 14 aps with less than 500 lines of specific code, 3 apps with between 500 and 1000 lines, 3 apps with between 1000 and 2000, 2 apps with between 2000 and 3000, and 2 app with more than 6000 lines of specific code
- I will use WinForms on Windows, because these apps are the one that nobody (except me) will see, what I call the "server-side" apps: scheduled apps which run once or the whole day and provide a service. I might redevelop them again later on again as pure Windows service apps
- I will probably use WebForms for the web side

So you reckon 12 months for 24 apps, is that what you are saying ? I had hoped for something more like 6 to 9 months. Do my answers above change your estimate ?

Bernard
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 52

Expert Comment

by:Carl Tawn
ID: 40243475
As mentioned before, that was just a wild finger-in-the-air guesstimate. There are way to many variables to be able to provide a decent estimate. 6-9 months may very well be doable, but if you're looking at learning new technologies as well as doing the conversion then it would be better to estimate for a "worst case".
0
 
LVL 36

Expert Comment

by:ste5an
ID: 40243498
I would guess at least 24 weeks.

But the real problem is simple: maintainable C# code differs by architecture from the old structure. This means lot's of details which influences the entire process, but are hard to estimate in advance.

Back to the guess: The risk is quite high. I would also tend to say at least 24 weeks.

So in summary: It can be done in a "short" period, but I won't bet on it. Just negotiate good incentives or boni for early finishing.
0
 
LVL 85

Assisted Solution

by:Scott McDaniel (Microsoft Access MVP - EE MVE )
Scott McDaniel (Microsoft Access MVP - EE MVE ) earned 600 total points
ID: 40243607
I don't see how any estimate could be given within the framework you provided, so it's very, very difficult to give you any sort of a valid comment.

I've done a few Access-to-NET conversions, and each is different. As an example, I recently finished a conversion for a moderately complex Access app with around 20 Forms and 15 reports. I did this in about 110 hours. A few months back, I did the same for (again) a moderately complex Access app with roughly the same number of objects, and I did that one in about 60 hours (roughly half of the first). Looking at ONLY objects, they were nearly identical, but one took nearly twice as long as the other.

The difference was the coding "style" used. In the shorter project, the developer had taken a more object-centric approach in their VBA style, which translated well over to the .NET platform and made code creation in .NET much, much easier. In the other, the coding was much more wizard-centric, and the developer was obviously a drag-and-dropper, which meant quite a bit of the code had to be created from the ground up. So if you're accustomed to using Access conventions (like using an Expression for a ControlSource of a control), you're going to have a LOT more work involved than if you tend to be more conventional (and use the data source to handle things like that).
0
 
LVL 1

Author Comment

by:bthouin
ID: 40243721
Hi all of you

First thanks a lot for your valuable insights. Here some points which I picked up:

ste5an:
>>maintainable C# code differs by architecture from the old structure. This means lot's of details which influences the entire process, but are hard to estimate in advance<<
I am fully aware of that, and your comment is indeed very true. I would say my current code is very maintainable, but yes, the devil is in the detail.
24 weeks is 6 months. Considering the other comments, that sounds maybe a bit optimistic.

Scott:
I'm not using wizards, and I'm certainly not a drag-and-dropper either. And I use the data source to select the proper recordset for a given form, so I'm maybe rather on the "easier" side of conversion (at least I hope so, and I will soon find out...)

Actually, the only big obstacle I have built for myself is quite something else. In many of my "server-side" apps (the unattended ones), due to the fact that my data volumes are very small (in the thousands of rows or tens of thousands, but not higher), I am loading many of the tables needed for processing straight into memory arrays, which are by nature variant arrays because of the various field types nature. I then work on the arrays in memory, doing data changes or some required calculations, subtotals and such things, and when finished, I erase the data in the target tables and inserts the contents of the memory arrays into the target tables. The processing in memory is unbelievably fast of course, and, when using Access as a DB, the "re-filling" of the emptied tables is also impresiingly fast. With SQL Server, that phase is not brilliant at all, because the DB Server is not optimized for filling empty tables. But in .Net in general and therefore also in C# or VB, the whole concept of untyped arrays is by definition non-existing, so I will have to revert to conventional methods of updating data rows, not memory array rows, so my code will look very different, although thanks for the async nature of data holding and updating in .Net, I might get a good performance as well. So the conversion of these apps, not too many, but they are by far the most complex, will be time-consuming.

Bernard
0
 
LVL 52

Assisted Solution

by:Gustav Brock
Gustav Brock earned 400 total points
ID: 40244008
This sounds as a series of small LOB (Line of Business) so an interesting alternative route could be to use LightsSwitch from Visual Studio. These applications allows you to create an application for either the desktop or the web literally by flipping (at any time) one switch.

Official starting point is here:

    http://msdn.microsoft.com/en-US/vstudio/ff796201

Lots of help here:

    http://lightswitchhelpwebsite.com

I have created several apps this way, and sometimes it is very fast, a few days only.

/gustav
0
 
LVL 40

Expert Comment

by:PatHartman
ID: 40244327
My question is why?  

If the apps are working, why spend the money?  If it is the data you want to move, just move the data and keep the Access FE's.

How long did it take you to create each app using Access?  Access is a rapid application development tool and developing in Access takes a fraction of the time it takes to develop in other environments.  All that stuff that Access does behind the scenes to populate/save, you are now responsible for.  If you have made extensive use of subforms, you'll need to use some other technique.  Granted, you have some project knowledge if you created the original app plus you have a working model.  So assuming the schema's aren't changing and none of the processing logic is changing, and the forms will look the same, then this is simply a translation and so is actually feasible in about a year.  Of course, if you have other responsibilities, it could easily take longer.  Don't forget all the testing you'll have to do and your users also.  Then there's the learning curve to conquer.  It is far better to be a little early and finish ahead of schedule than to cut it too tight and leave yourself in a bind and looking bad.
0
 
LVL 1

Author Comment

by:bthouin
ID: 40247313
Hi Pat

The why is easy to explain: against my will, but no way to fight it. "Access is not the standard platform" of my client. Period. Actually, my success has brough this upon me. Because my apps at one branch are so good, another branch of the very large group I'm working for wants to implement them, but they frowned upon Access front-ends as an "inferior platform" which was not standard and which therefore they could not accept. Yes, I can imagine how you're boiling now, I did too, but I'm a contractor and there is no way I can fight a central IT department with maybe over 10,000 people employed and which dictates what is the official standard, and that is, among others, .Net. So, we fully agree, this is an unproductive decison, but again, can't fight it. Anyway, I'm learning about an additional world on the client's costs, so who am I to complain ? And neither schema nor functionality are changing, so it is "simply a translation", as you phrase it. And I'm not forgetting about testing and about my users, I know that will take time also. But don't we always promise a year when we know it's probably gonna take one and a half year ?
0
 
LVL 40

Expert Comment

by:PatHartman
ID: 40247557
I left corporate America and became a consultant over 20 years ago when I finally came to grips with the fact that the inmates were running the asylum.  Now I get paid by the hour at a pretty hefty rate to implement their poor decisions.  I give them my best advice and then I do what ever stupid thing they want me to do as long as it isn't illegal or unethical.  I can implement stupidity with the best of them.  

My preferred clients are small to mid-size companies who are not fixated on whatever the "gurus" are pushing this week and who simply need software to support their business needs.  They actually appreciate what I can do for them - create custom software at a reasonable price in a short amount of time.  Big companies don't and that is usually because the people hiring me are not necessarily the people who will benefit from my services.

For this project, since the client is willing to fund your education, give them a target date that is at the far edge of what you think they will accept.  This will take way longer than you think it will and you don't want mud on your face and unnecessary pressure due to missed deadlines.  You need as much time as you can get that still lets the client justify keeping you on to do it.  Believe me, no one they bring in from the outside regardless of how expert he is in the technology will actually do the job quicker than you can.  Any outside "expert" will grouse about your code or your schema and insist on remaking it in his own image (because that is more money for him).  If you finish a little early, they'll be happy.

I believe strongly in continuing education but I also believe in using the best tool for the job.  So take advantage of the education, maybe at the end of the year, you will be a convert and also think that Access is somehow inferior but I hope not.  The people who think Access is inferior are not comparing it to the right things.  Although Access has a limited scope (data-centric client/server applications), it is very good at what it does as only a dedicated tool can be.  Just because you wouldn't write an operating system with Access/VBA doesn't mean that it is inferior and don't let them convince you that it is.  A hammer is a pretty specific tool but for hanging a picture, you won't find a better option.
0
 
LVL 52

Expert Comment

by:Gustav Brock
ID: 40248134
For one thing, Access isn't good for teamwork. You can combine it with Visual SourceSafe, but most corporate teams use TFS (Team Foundation Server) or other enterprise level source control systems. And that's what bothers corporate project managers; they want to be able to scale a project, allocate resources, and take advantage of already earned skills. In this regard, Access and VBA is a strange animal. Add to this, that most corporate teams are loaded with work.

This is why LightSwitch could come in handy. As with anything else, you'll have a learning curve, but from that point you move fast, and it is possible to create small apps in days where traditional ASP.NET or Winforms would take weeks.
One reason why this is possible is, that form design and navigation is quite strict. From the very beginning you will have forms (screens as they are called in LS) which are neat which saves a lot of time as most developers neither care much about design nor are good designers. And even if that doesn't include you, it still saves a lot of time. In other words, from the very beginning you have something that looks professional.

/gustav
0
 
LVL 1

Author Comment

by:bthouin
ID: 40248965
Hi Pat

Your first 2 paragraphs describe pretty much what happened to me as well. I contract since 1990, and I did mostly for big companies, but also mostly in a small "corner" where I was lucky enough to be able to make my own design, development, implementation and support. Until of course the IT department came in and wanted to control everything I did. My current situation is slightly different, because I am actually officially part of a very small IT department of a small subsidiary of a big bank, but I'm the only one doing "change the bank", whereas all others are doing "run the bank" stuff. Because of the fact that the users of another subsidiary have seen my work and want it, whereas their IT manager tries with all means to avoid it, the situation ended up with him involving the "Big Brother" IT department and forcing everybody to ditch Access.

I will never think that Access is an inferior tool. As you, I appreciate its huge advantages when you have to make a "productive prototype" in no time. Strangely enough, even the CEO of the subsidiary where I work likes Access and doesn't agree with the headquarters, so you see, there are even some very reasonable people around, they just cannot go against HQ's "Diktat". And yes, I now pushed the deadlines to the far edge, so hopefully I'll be more or less OK.
0
 
LVL 1

Author Comment

by:bthouin
ID: 40248978
HI Gustav

Sure, Access is not ideal for team work, but I don't care, because I'm alone using it :-). And I'm also alone in being knowledgeable about Access, so there are no sharing issues in my case.

I will certainly have a look at LightSwitch, that sounds interesting. It's just that I always had bad experiences with frameworks that "do a lot for you", because when you suddenly have some special need, you can't find out how to do it because the frameworks are usually hugely complex and you can't "shortcut" them without getting stuck somewhere.

Let's see.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Instead of error trapping or hard-coding for non-updateable fields when using QODBC, let VBA automatically disable them when forms open. This way, users can view but not change the data. Part 1 explained how to use schema tables to do this. Part 2 h…
Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
In Microsoft Access, when working with VBA, learn some techniques for writing readable and easily maintained code.
With Microsoft Access, learn how to start a database in different ways and produce different start-up actions allowing you to use a single database to perform multiple tasks. Specify a start-up form through options: Specify an Autoexec macro: Us…
Suggested Courses

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question