Wednesday, 24 October 2007

Dorchester Chamber of Commerce and Industry

Dorchester software has joined the Dorchester Chamber of Commerce, Industry and Tourism. Possibly you're not excited about that, but I am. Its so nice to belong! Here is the link: Dorchester Chamber of Commerce, Industry and Tourism

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.

Thursday, 7 June 2007

A letter from the managing director

Dear Business Manager,

As the managing director of a new business covering all of Dorset, and much of the south coast from Brighton, Southhampton, Poole and Bournemouth to Bridport, Bristol and Exeter, I wanted to introduce myself to you. I grew up in Dorset and have recently returned to live here.

For the last 20 years I have worked in the area of software development, designing tailor-made database systems for medium-sized businesses, and the corporates that those businesses provide service to.

Typical systems have included:
Customer Relationship Management ("CRM")
Stock Control, Resource Management and Scheduling, and
Mobile Worker Management and Coordination
(sometimes called "Field Service Management" or "FSM" systems)

Business administrators commonly face a stark choice between on the one hand using "off-the-shelf" data management systems which inevitably have some degree of mismatch with the specific business processes of your business, and on the other hand going through the (often painful) process of having a bespoke tailor-made system built for your company.

Although bespoke tailor-made systems may initially seem like a better alternative, experienced business administrators know that such projects are fraught with hazards for the unwary. The news media are full of stories of large scale versions of such projects going wrong - such as the NHS system or the new Air Traffic control system -systems being delivered many years late, running millions of pounds over budget, and failing to meet specification requirements.

Why is it that these database projects are so notoriously difficult to deliver on time, within budget and to specification?

In my 20 years of experience designing, developing and deploying database systems, I have developed and incorporated a number of strategies and methodologies which make the process of implementing a tailor-made database system a much more attractive and viable proposition; I commonly use a number of "part-baked" modules, together with frameworks that support them and allow them to mesh seamlessly together. These "part-baked" modules are open to extensive refinement, and if necessary, modification to make them fully appropriate to the precise details of each specific business-case.

This approach allows me to provide astonishing turn-around times, and incredible prices, in the delivery of tailor-made database systems. These systems are not fully off-the-shelf, but also not built entirely from scratch each time - instead I provide a "best-of-both worlds" choice.

I would be grateful for the opportunity to discuss this best-of-both worlds choice and the very specific infrastructure needs of your own business.

Please do email back if you would like me to phone or meet with you or call me on 07957 203512. I am available Monday-Friday 9am-7pm for any enquiry I might be able to help with or for a free no-obligation discussion of your I.T. infrastructure needs.

Kind regards,

Andrew Bindon, MA Cantab, MCP, LCP.

Friday, 27 April 2007

Why is code generation so powerful in bespoke database development projects?

Good practice in software development very often involves finding a "sweet spot" between advantages and disadvantages of moving a development architecture/methodology in the direction of or away from opposing approaches. Perhaps some examples would clarify what I mean.

A classic example is in the normalisation of data. Normalisation for non-programmers is a process which involves the elimination of unnecessary repetition in data storage. Instead of storing customer information with every order, we may instead have a separate table of customer information, and "tag" each order with an customer information ID to indicate which customer the order was placed by. This has a couple of immediate advantages. One is that it avoids the unnecessary duplication of customer data which can now be kept in a single record for each customer. Further it means that when a customer record is updated, only the one record needs to be changed.

However as database programmers consider further, we realise that although normalisation is a pretty useful thing, it is not always such a good idea. Sometimes in fact it is better to keep data stored in forms that are not at all normalised. This may help to make data entry quicker, or improve the responsiveness of a particularly critical part of an application. Differing requirements and purposes of differing business situations, may direct a software architect more towards normalisation or to move away from it, in any particular part of a data structure, and so the insight as to where to position the "sweet spot" between the extremes of normalisation and denormalisation comes to be something of an art, which may require some years to master really well.

Another similar example is in regard to the extent to which program code is parameterised. Starting out as a "young" programmer, it is easy to think that all parameterisation is good. If it is possible to take a parameter out of a pair of functions so that you have instead a single function which does the job of both with half the original amount of code, simply by passing in an extra parameter, surely that is a good thing. However in software development it turns out that this is not always the case. There are a number of reasons. One is that modifications to requirements may subsequently make the two original functions not fit together so conveniently and so require them to be separated again. A second is that when a function is dealing with multiple disparate calls, it is harder to identify the reasons why it might be raising exceptions. Data being passed in to the function may be coming from multiple different places, and if any of those sources contain inconsistent data, it is harder to identify which source caused the problem. Furthermore when you go to fix a problem, you have to be careful not to adjust the code in a way that makes it fail with situations that were previously working, other than the one you are dealing with.

All of these reasons drive developers away from functions, classes and libraries that are trying to accomplish too much, ones which are trying to be too generally applicable to too many different sets of data. In other words these reasons drive developers away from what is sometimes called "code reuse" and in the direction of "code generation". Being able to "reuse" code requires the code to be general enough that it can be used for multiple related situations. "Code generation" in contrast is a technique that involves the automatic substitution of what would otherwise be parameters to a function, into the literal coding of the function, so that the function becomes "de-parameterised". The code generator may make 20 similar functions, one for each value of substituted parameter, and in turn it will name those functions or those function objects acording to the value of parameter substituted.

Although this may seem counter-intuitive, and lead to large amounts of repeated code - and hence "code-blote", it actually turns out to make life much easier for software developers, and hence increasing their productivity, and in turn leading to happier customers. An example of how this makes life easier for programmers is when it comes to dealing with the differences which may arise in the different situations that the orginal function of object was being applied. Now when making adjustments to the one of the generated functions to accound for such a specialised situation, there is no danger of breaking the code that deals with any other value of the removed parameter.

Further discussion of the value of code geration can be found here: Code generation and best practice in software development

Monday, 26 February 2007

searchaholics trying not to be anonymous

Search engine optimisation is my latest addictive disorder. I find myself staying up late studying my site stats, fretting over the quality of my backlinks, and waking up in the morning with dreams of increases in page rank. I have sold my soul to so called "search engine optimisation" - that's "targetted web traffic" to you and me. I am finding it increasingly harder, that's to say more difficult, to write an english sentence, that is to say phrase, without including three or four possible word variations (varieties, differences) on each keyword... See what I mean?

I have decided therefore that I am giving up Search Engine Optimisation for Lent... I'm hoping I can stay off it for good. But as you can see, there is not much evidence of that so far.

Sunday, 11 February 2007

Word VBA training

I partly owing to my notariety as an Excel VBA trainer i was recently asked to deliver 4 days of training on using VBA inside Microsoft Word for an insurance data provider company. Despite this not being quite my usual bag, I'm happy to say the 4 days of software training went very well, and I am now feeling very happy to do some more of this, if anyone should want me too.

Wednesday, 31 January 2007

Dorchester Nursery / Preschool

Exciting news! I have just been helping my sister with some search engine optimisation for the new web site she has created for the preschool she works with. It is a really great site. If you are a parent with young children looking for a Nursery or Preschool in the Dorchester, Dorset area, I really recommend you visit their site. Dorchester Nursery / Preschool

Thursday, 25 January 2007

What is the primary asset of a software development company?

What is the primary asset of a software company?

I would suggest to you that the primary asset of a software company is not its client base. Shocking?
Not its staff. Still shocking? Not its buildings. Not its business processes. Not its business process infrastructure.

All of these things are important, yes. VERY important? Yes. Really really important? Yes. And certainly you can’t be running too much of a business without them. But not primarily important.

I would suggest that the primary asset of a software company is none of these.

The primary asset of a software company is it’s CODEBASE.

However, the code base is only an asset of the business to the extent that it is maintainable, extensible, revisable and re-applicable to a changing set of business scenarios within a changing local and global business environment.

So the really interesting question becomes, not how to write code that is reusable. But rather how to build a code base, and code library, which is maintainable, extensible, revisable and most importantly of all re-applicable.

Wednesday, 17 January 2007

Independent Dorset Software Consultant

I am an independent Dorset software consultant. There are various advantages to hiring me, which extend above and beyond hiring a traditional software house. Whilst you might think that the bigger a company is, the more likely it will be able to provide you with what you want, this is not necessarily the case. Very many projects from small and medium sized enterprises when they are contracted to software houses are actually passed on to people just like me... one or two or three of us. So while the software company takes a big slice of your cash, which it is using amongst other things in the service of presenting a "professional front" to its business, it very often does not in fact add any additional value.

It merely acts to create a barrier between you, the client, and me/us, the people doing the work.