views:

397

answers:

4

The company that I work for develops a C++ application to manage service businesses (dispatching, GPS tracking, CRM, etc). The problem is that the system is a little too limited. Being a relatively small company, we'd like to broaden the horizons and add some more modern features such as a web interface and plugins for various other applications, like Outlook, that would enable them to interact with data in our application.

Currently, I'm developing a web interface in ASP.NET MVC and have been for the last two months. However, this implementation is suffering from the same kind of limits that the C++ application has, so I would like to take things a step further. It's just that I'm not sure if this is a wise decision, or how I should go about convincing management that the greatly increased development time will mean greater possibilities in the future.

What I would like to do is implement some sort of massive API using WCF that would allow access via both web and desktop applications. My web interface could then be just that... and interface to this API using a framework such as Qooxdoo or ExtJS. But other interfaces could be added, such as an iPhone application, an Adobe AIR application, an iGoogle Widget, an Outlook plugin, etc.

Here's the thing, though... at the moment, I'm just a lot of talk. I have a good knowledge of C# and .NET technologies like WPF, WinForms, ASP.NET MVC, etc. But, I've never used WCF in my life. I'm pretty sure I can pick it up, but is it possible to grasp something so extensive as WCF when my employer wants to see fast results?

One way that I believe I can show results is to release the API incrementally. For example, the first "Community Technology Preview" would include simple dispatching functionality, he next CTP would include sales and marketing features, and so on. I don't really think customers would pick it up very quickly, but it would allow us to internally develop applications such as a web interface and plugins.

One problem I see with that is spending so much time developing the API that the development of applications that actually USE the API would be extremely slow. I mean, I could show a URL to my boss that returns a list of customers in JSON format, but what can that really do for us if the customers can't do anything with it?

I guess what I'm trying to ask is: how feasible is it to drop development on a limited web application that's almost finished and begin work on a WCF-based API to power future projects?

+2  A: 

Well I've built a number of WCF applications and it's not terribly difficult to get into (has irritating pitfalls, but that's what trial and errors for!)

That said, given what you've outlined there, I'd recommend against it if you have something that's getting close to finishing, and your boss is after fast results. If it's a possibility, why not finish the application you're working on, and then write a document on what you could accomplish with a WCF API on top of what you already have with the web application and send that to your boss / manager?

It's not a great solution since your current web app wouldn't be running against it, but it seems better (to me) to get something out there first, since setting up the start of a good API isn't something I personally enjoy doing with deadlines closing in and high expectations..

Sciolist
The only problem I have with finishing the current application is the fact that it'll probably never be updated again if I start working on the API. I hate to release something and then tell the customer that it probably won't be supported in the future.
David Brown
Well that depends, a web administration for a well used system tends to get used quite a lot, so you might not just 'drop it' if people are willing to pay for the further development.. in which case it'll just rapidly become a legacy system that everyone hates touching since it doesn't use the API..
Sciolist
I'd stick to the current app though.. as changing direction in a working project to something that you're uncertain of how it will work tends to end up badly, stressed releases and production bugs.. Just speaking out of how I would go about it, with the managers that I have to put up with.
Sciolist
Thanks for your responses! The only reason I'm considering this is because the company recently moved to a new customer base, so until my boss tells me for certain if this web application should continue in its current direction or not, I'm investigating other endeavors that I could present to him.
David Brown
Well as an idea it's certainly rarely bad to have a good API if you have the time and all to make one. Sounds like a fun project, and I wish you all the luck on persuading your boss. :)
Sciolist
A: 

Well, why not have both? You can finish up on the web-based project and then develop the WCF part, exposing the service endpoints so that you can have different applications connect to it remotely.

Then, if you really want, you can refactor the web-based app to make the calls to the WCF endpoints (or, if possible, to the implementation behind them, as you don't really need to add that network latency).

casperOne
A: 

You make it sound like your web development will have to be totally flushed in order to generate your WPF stuff. Depending on how you developed it, is that really the case?

Before embarking on your project, I think you need to do a lot of homework on WCF and get comfortable writing smaller, simpler apps in it first. Grok it before foisting your version 1.0 API design on your clients, or it shall truly be a plague on all your houses!

One more thing... This is a really good time to start really doing TDD for your APIs. Partner with someone who wants to interact with your application and learn their use cases and drive your API design accordingly. Writing a one-sided interface without a consumer is probably not the best idea IMO.

Dave Markle
A: 

If you're already deeply familiar with C#, I believe you can pick up WCF and implement a simple proof-of-concept WCF service in a matter of days. Just pick up a good WCF book from the bookstore and learn the basics. You can also try using Microsoft's Web Service Software Factory to quickly build a WCF service following best practices.

If you want something even easier and faster, ASMX web services are even easier to create than WCF services. Just make sure your API is using serializable objects, slap a [WebService] attribute on your class, [WebMethod] attribute on your methods, create an ASMX file, and voila, you have a web service! It really is that easy.

davogones