Saturday, 29 September 2007

Managing large software developments

Dear Dorset Software Consutants,
I have some code written in visual basic (VBA) which I need to convert to C#. I can write simple c++ and c# code. Now I have started one large project where I need to manage different classes and high level of organisation. I need some guidence and supervision while doing it.

I can convert it to c# with guidance from internet but I feel if I could get some direct help on hand that would be great. Because I have really basic problems with c# dot net. I want to do the code myself, I just need a guide who will help me to understand how c# dot net classes work and how can I write a large program in c# with lots of classes.

Dear Enquirer,

Thanks for getting in touch.

First of all, on a practical point, there is an automatic upgrade path from VBA code to C#.
VBA code is 99.9% identical to VB6 code.
There is a conversion wizard which will convert VB6 code to VB.Net code.
You can then take your VB.Net code and either stick it into a free dot net language translator - which you will find many on the net,
OR compile it to and EXE and decompile it back to C# using one of the .Net decompiler tools you will find.

Secondly, as I understand you, your enquiry relates to how to manage the development of a BIG software project, being worked on by a SMALL development team. Just to clarify when speaking of large software projects here, we are talking about there being lots of code, in contrast to a "large project" which involves a big team of developers... That is a whole different issue, which we can discuss another time.

2 tips I can give you straight off for working on a big software project, vs. a small one.

(i) Break the big project down in pieces ("modularise" it).
I'm guessing that you know this already, but just thought I'd mention.
Look for where you can isolate parts of the functionality you are needing, and "ring fence" them.
Then work on each of these isolated pieces of functionality one at a time.
Practically speaking it is nice to be able to keep these isolated pieces of functionality in folders and sub folders that can then be dragged and dropped between framework projects. Your framework projects should contain your standard supporting functions and classes, eg. to deal with reading/writing files or interacting with databases.
You can use dll components for your modularised pieces, but the point is not the technology of component architecture... the point is MODULARISATION.

(ii) Use code generation - ie. get some tools together that will write the code for you - I write my own, but there are many out there.
This isn't less important than modularisation... possibly its more important.
And the two points go well together, and tie in very well with object programming concepts like inheritance and interfaces.
Using code generation has all sorts of beneficial consequences such as consistency, code quality, minimises the temptation to cut corners, high output vs. your time input, maintainability, ease of re-application to different but similar situations - lots more.

Further to this it is not as yet clear to me, what is the best way to help you.
Could you give me some concrete examples of questions you have and specific objectives?

The quote you sent me is from a course entitled "Effective Conceptual Communication and (Business) Infrastructure Design".
This is not quite a software development course.
Although the course includes hands-on exploration of computer based graphical thinking tools such as mind-mapping and thinking-with-hexagons, the course aims to follow (or rather trample) paths between the concrete and the abstract in both directions, so as to give course participants more facility in moving from the concrete to the abstract and from the abstract to the concrete, as well as around the abstract domain itself, and to be able to effectively take their colleagues with them while doing so. This in turn is used as a foundation for establishing "intelligent business infrastructures" - infrastructures which are designed to fulfill invented purposes, in contrast to ones that have simply evolved as oral and operative traditions.

My company also provides courses on software development subjects including programming using C# and visual studio.