Archive for Practice

How to prepare your organisation for the new System

During recent years I have witnessed different systems to be implemented in a wide variety of organisations.

Observing their successes and failures, I can advise on the common pitfalls you can encounter and of ways of preventing them.

 This post is by no means complete, but it should provide you with a quite good understanding of the principles that govern the introduction of a new System.

 First of all - you need to ensure your staff has a sympathy for the new System.

They need to know, that it’s developed for their own good, to make them work more efficiently and have better access to information they need, to reduce communication bottlenecks and ultimately make everyone happy and less stressed. And by the way - to also save money and improve your customer service.

This cannot be achieved by sending out a Memo saying that “the work on new System has began, please be cooperative for the Project Team should they request any information”.

Your staff would perceive that memo as a “organisational restructuring” and won’t be keen to cooperate when they’ll need to.

Instead, try explaining your people what’s going on and that no redundancies will follow successful implementation of the system.

Once you have your staff on your side you can assemble a Project Team which will be responsible for managing the project at your end.

Failing to achieve that won’t make your consultants’ lifes or jobs easier, and will unevitably doom the project.

The Project Team needs to have a full authority to make decisions on behalf of your organisation, therefore it needs to have full access to your company’s resources and knowledge. Trust me, they will need that sooner than you think, and in a bigger extent.

However - don’t worry, they won’t share any sensitive information with your consultants, they only need that to make an educated decision on issues raised by the consultants.

When talking about the Project Team - it needs a leader. And a good one, since this is crucial for the whole enterprise to stand a chance of success. This leader should have a great domain knowledge of your industry, have lots of time to answer consultants’ questions and attend meetings with your consultants.

This is a tricky part, because once you have in your team a person having all these characteristics, you’ll inevitably give them big responsibilities within your own team, so he/she won’t have the full freedom he/she needs to work on the System. So it’s a tricky part, a possible solution to it is appointing another Contact Person in your team, which will handle all the communication with Consultants, and relay information onto the Team Leader.

Anyhow - you need a single Point of Contact for the whole time of the project, otherwise the communication inefficiencies will start to impact the timescale and the cost of the project.

As far as the Project Team is concerned - it also needs to have people from all the divisions/levels of your company in it.

Of course - not the whole company, but if you have 30 people in your Customer Service department, you should appoint one or two of them into the Project Team. The same goes for your Accounting Department, Operations, Marketing etc.

The point of doing that is - their input will be invaluable for you when designing the information workflows and the scope of information being available from the system.

Only customer service rep can tell you if they need to be able to view clients’ recent enquiries or not, and if so - what kind of information they expect to be able to get from your system.

This is crucial, because your system won’t be able to show any information it doesn’t have in it in the first place.

And your field staff, spending whole days doing their duties - they know exactly what they need. And you need to get them into the team for this reason.

Besides - if your staff has the access to early stages of your project they’ll also give you advice on required features. You need that as you go along. Experience shows, that your team won’t be very good at predicting what they’ll need in the future, but once they get a prototype of a system (some forms to play around with, and screens which actually allow them to do something) they’ll get back to the Team Leader asking if this and that screens couldn’t do more things, and that it would help them. This is exactly the sort of behaviour you want to encourage in your team, to make everyone proactive and make the Change happen.

Having achieved that you can be confident, that you’re well prepared for the Project to succeed.

Comments

When you need an IT consultant

It’s predominant in the general business that IT consultants are these geeks you invite when you have a virus, or your printer doesn’t work - or when you need to move your offices and need to configure your network.

This is of course most of us are capable of doing anyway, but this doesn’t define our speciality, it’s merely a support role.

What I believe is - it really pays to put more trust in IT consultants.

Most of us are geeks who like gadgets and new technologies.

We like everything that is cool.

But surprise, surprise! These cool things are not cool because they give weird sounds or change colours - they allow people to do some stuff quicker or more efficiently.

We all know about Mail Merge feature in Word, but I don’t know many clerks who actually use that feature on a daily basis, and most of them would hugely benefit from it, since a large chunk of their jobs is sending the same (or similar) letters/documents to different people.

You can always send these people to trainings and tell them to “get on” with their duties. And they will - eventually, after spending days in trainings and only learning one or two things, they will gain new skills, but if they lack the motivation to keep brushing their skills, this gain will eventually deteroriate.

Everyone of us knows the feeling, that there’s simply too much to do, the Inbox is always full and the day is too short.

But, when we pause to organise our work little better - we free up more time!

This is where IT consultants come to the rescue - they don’t know anything about your daily duties, so you need to explain everything to them as you go. When doing that you will both start to see repetition and common sources of problems you encounter every day.

And in most cases the consultant will offer you a solution to your headaches.

It is really easy to get bogged down in the Todo list for Today and not think about your efficiency, but trust me, optimising your work not only makes you less stressed, it also improves the quality of your work and saves you money!

Of course, with IT consultants you need to be vigilant, they will sometimes try to sell you what they specialise in, not what you need, so always do a Return On Investment forecast before you actually commision any work to them.

Comments

When excessive complexity is not excessive

I had an interesting assignment recently, having received a multi-dimensional PHP array (about 4 levels deep) and was supposed to enable editing it - so what might seem obvious is starting like:

I decided to come up with an Object model for it looking like:

And I also created some other classes, representing the sub-nodes of the original data.

But what is most important in that kind of approach:

  • When the original structure changes - I only need to modify the getters/setters in my Object Model!
  • The code is clean and readable, as $element->getName() is much easier to comprehend than $array[”elements”][0][”element”],
  • The rest of your code doesn’t care about the data structure,
  • The OO flexibility allows you to abstract the “data” handling to be compatible with other data sources, e.g. XML files or relational databases,
  • You avoid “offset errors”, when you try to do calculations on a node which comes from different level of the array than you expect it to,
  • No repetition - you define only once “what comes from where”, later on you just user your definitions,

Of course the above sample also needs proper “usage” abstraction, which basically means objects are used according to the business rules, not the “byte manipulation”, e.g.

setFrom($data);
$MainNode->getName();
$Addresses = $MainNode->getAllAddresses();
foreach ($Addresses as $address) {
$address->sendNotification();
}
// and we continue in this matter
?>

The key point of that is to make your code readable - when your method names are obvious you don’t really need many comments in the code - it all seems self-explanatory.

Of corse you should still document any unexpected behaviour and quick hacks - but it’s better not to introduce them in the first place.

Comments

Great debate about using objects/DataSets/Object-Relational Mapping

One of the most interesting articles I’ve read on the subject, on Ted Neward’s Blog.

Reading highly recommended for every developer - but beware the long historical introduction which might not be to your taste (It definitively wasn’t to mine!).

Comments

Zend Studio debugger advice

Whenver you’ll find yourself in a situation where you click the ‘debug’ button in your browser (on the Zend Toolbar) and nothing happens - here’s where you should look:
In zend.ini there’s a line:
zend_debugger.allow_hosts=127.0.0.1/32

Just change this to your IP address and everything should work fine.

I found out about this by reviewing the Apache error log for that domain.

Comments

Why does Proper Web Development matter?

We made a pitch recently for one of potential clients - unfortunately we lost the deal.

But the remains of the pitch gave us unexpected results… My website about the pitch displays first on the Google results page, and the client's website - fourth!

That's why it is no longer sufficient to merely "make a website" - it needs to be done prpoerly to allow people to find you when they look for… you :)

Comments

Productivity tip #3 - never trust your ISP

Don’t take this literally - ISPs are great when they don’t cause you any problems, but no matter how good yours is - try to have the latest backups of your data/system/code in your own network, and preferrably - on a physical media.
You never know when you’re going to need that.

Even if you use code versioning tool - because not only versioned code can be at stake.

You might have some data on the live servers which you can’t reproduce, whether it being user information, some images that you’ve uploaded using the CMS, or maybe recent transactions.

I strongly recommend automating this backup process for the sake of peace of mind, because even if your ISP does provide backups, it won’t always be quick to recover something from them - the more control you have over your information the better.

And as history shows - not every ISP includes backups in their offer.

The automatic backups of data stored in other networks aren’t so easy to achieve on Windows platform, but on Unix/Linux it shouldn’t be a problem as long as you have enabled the SSH access to your accounts - few scripts should do the trick.

Obviously this might be a huge security hole, but you just have to weigh the pros and cons.

Comments

Productivity tip #2 - multi-environments config file

Use "smart" config files.

Did you ever had the problem of overwriting by accident your configuration file (whether it is web.config or config.php or any other) on a server (staging/live), and suddenly realising… Ooooops, I thinik I've just broken the system…?

If not - congratulations to you, you can stop reading ;)

But if you still have this kind problems - here comes the solution.

It is - a smart config file.

Implementation is quite simple:

  • Find some environment variable that differentiates your environments
  • Make note of the values of that variable on your environments
  • Define all the possible values of your connection strings etc in one file divided for sections for each environment
  • Alter the procedure that reads these variables to take the current environment into account
  • And last but not least - also define the LIVE section as a "default" one. This is crucial for systems that might experience some configuration changes (and most of systems are subject to that)

Sample PHP code:

<?php
    $config["mycomputer"]["connectionstring"] = "//value local";
    $config["www.mywebsite.com"]["connectionstring"] = "//value live";
    $config["mytestserver"]["connectionstring"] = "//value test";
?>

In Asp.Net for example you can use Custom Configuration Sections, you'll find the appropriate classes in MSDN.

But what exactly does this give you?

The peace of mind, that you can always transfer all the files to another host and you won't break the whole site/system.

Comments

The secret of the leap from using objects to Object Oriented programming

Once upon a time there was an object.

He was very lonely, because noone used him.

His name was DB_DataObject.

He was a parent of DO_Client, and DO_Address.

His first adventure looked more or less like that:
Read the rest of this entry »

Comments

Hallmarks of a prospective Good Developer ™

  • "I can do better"- After finishing a task, no matter how hard it was, and no matter how brilliant was your solution - you keep thinking… "Wait a moment, but that could be optimised… And that might be improved…". This doesn't mean you aren't proud of this Brilliant Piece of Art you've just created - but you are aware of its potential shortcomings and are already thinking how to change it to improve some aspects of your work.
  • "I know how to do this, but I've recently read about a cool technology/approach" - and you trigger your curiosity and try to learn something about the new approach/tool/idea/buzzword and are one of the first people to actually use it. How cool is that! I guess I'm not the only one who gets buzz from solving hard problems in tricky and original ways, instead of using "brute force methods" that worked a million times before. Usually - yes, they work, but they only solve the original problem, not the ones related to it, which you'll stumble upon just after you finish dealing with this problem. An example being - yes, you can DataBind some data from DataSet to your Controls in ASP.Net, but what happens if the data you want to display is not exactly in the format you expect? You can either place the "data formatting code" in your <asp:ItemTemplate> tags all over the place, or - substitute that DataSet for a IList of Objects which are smart enough to be able to present you their properties in the format you expect. Yes, this is more work, but it also complies with the DRY rule.
  • Abstracting your coding from the interface - trust me, users don't care about the Databases, Entity relationships, PostBacks, Forms, any of this. They only want to see a screen/page which gives them the information they want, or an Easy way of achieving something.You have to simplify your Model interface to implement something like HumaneInterface to actually work on the Domain problems instead of Programming Problems.

Comments

« Previous entries ·