Tuesday, 11 June 2013

It's not meant to be hard

Solutions should be simpler than problems, and development processes should be simpler than solutions.

I've been giving some training at a partner company, training their people in the Metrici platform. We've been through the basics easily enough, but when we got to the sessions about designing whole solutions, I didn't know what to say.

Of course we know how to develop solutions. Most of our work involves creating complex assessments, and we have evolved effective patterns for that. But Metrici can be used for many other information management tasks, and I had never really thought through how best to approach the design of these.

In IT we have a tendency to systematise everything, and our gut reaction is to think up some sort of structured design method. But systematising your processes can easily lead to a method that is more complicated than the solution you are trying to create.

The whole point of IT is to make things simpler and quicker. If you can complete a task (to the right quality, etc) in one hour without an IT system, then if it takes you more than one hour with an IT system, the IT system has no value. The solutions that we create must be simpler than the problems they are intended to solve. Similarly, if it takes us, say, one day to write a program (including documentation, validating the requirements, testing, etc), then if it takes us two days if we follow a method, the method has no value. The methods and processes we follow should make things simpler and quicker, not harder and slower.

Traditional systems development is hard, and structured methods and processes add value. But simpler tools like Metrici are a different proposition. Metrici is good for the sort of information management tasks you could do in Excel, but when you want it multi-user, on the web, properly managed, and looking like a proper application. The underlying development process is about as complicated as building the same functionality in Excel, which we wouldn't usually surround with lots of complex processes because it isn't worth it.

Instead of presenting a structured method for developing Metrici solutions, I realised I needed to communicate the important aspects of development. These are the same whatever technology you are using. It is really important to establish and validate the objectives and purpose of a solution before you start the design. It is really important to think about outputs and how they deliver value before you create the inputs. Once you have done that, the "method" is to build the solution incrementally, starting with the outputs and working back.

If you are using technologies that are inherently simple, surrounding their use with structure and formality can undermine the simplicity of the technology. Of course you need to control the development activity, and I am not suggesting that you do away with controls on requirements, testing or deployment. But the development process itself, the analysis, design and build, needs to be tailored to the technologies you are using. Your processes shouldn't be more difficult than the work they contain; if they are, you need to change your processes.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 14 May 2013

Dates and numbers

There is a surprising lack of standards for date and number formats.

I have been adding date and number formatting to our Metrici platform.
The basic routines to format a date, time or number are well established. However, our requirements are a bit more involved. We want to declare a format for a piece of data, and then to both view and amend the data in that format.

We decided to add browser-based processing to format dates and numbers as they are displayed on the page, and to format them back to their internal representations before they are sent back to the server. This means that we don't complicate the underlying data storage. It also means that it is easy to pass the formats to browser components, such as date selectors or numeric edit fields.

The simplest solution seemed to be to tag the data (using a CSS class) with its internal format (date, number) and also with the particular format that would make sense for the user, such as a formatted date or an amount of money. This means we can easily support customers in multiple countries.

We thought it would be a good idea to adopt standards to identify different date and number formats. There are plenty of similar standards – for languages, fonts, character sets, keyboards – so I thought they must exist for dates and numbers. Then we could either adopt routines that use these, or base our own routines around a well-established standard.

For anything like this, a quick search on the Internet soon finds what you want. So I searched, and searched, but I could not find any standards for identifying number and date formats. I found two related things, but neither are what I want.

I found plenty of different conventions for specifying the formats of dates and numbers. For example, formatting a date like "14 May 2013" is specified as "d M yy" in the jQuery library, but "d MMM yyyy" in the Datejs library. Formatting a number like "1,234.56" is specified as ###,##0.00" in many BASIC-based languages, but as the object {aSep:',',dGroup:'3',aDec:'.',vMax:'999999.99',vMin:'000000.00',mRound:'S',aPad:true} in the very comprehensive autoNumeric library.

I also found lots of different standards for representing dates, times and numbers, like Internet standard RFC 822's date times such as "Tue, May 14 2013 08:00 +01:00".

Finding things I didn't want helped me understand what I do want. I want a standard identifier for something like "Slovakia Short Numeric Date" or "USA Written Date". Codes like this would make it easy to select what format I want to show the user. But I could not find any such standard, and in the end, I had to come up with some identifiers for our own immediate needs, such as "en-little-endian-short" for dates like "14 May 2013", or "gbp-rounded" for a currency figure such as "£1,234.56".

Maybe I am imagining a solution to a problem that other people don't have, but I think the lack of standard identifiers for date, time and number formats is surprising. It is not addressed by the current plethora of formatting conventions and competing representation standards. If anyone has found standard identifiers for date and number formats, let me know. Standards bodies, we need another standard.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 2 April 2013

Mary Verney and ruthless scope management

When major projects go bad, ruthless scope management can save the organisation from ruin.

A few days ago I visited a local stately home, Claydon House. It has a lot of history, particularly around the time of the English civil war, and as the occasional residence of the nursing pioneer Florence Nightingale.

One episode in its history particularly appealed to me. In the mid to late eighteenth century, the then owner (the 2nd Lord Verney) decided to enlarge the house to a palatial scale, with a frontage of about 100 metres.

The motivation for the project was largely political. At the time, the wealthy aristocracy liked to show off with their country residences. Lord Verney was competing with his neighbour, Earl Temple at Stowe, who had created a magnificent residence.

To attempt to compete, Lord Verney had hired one of the most celebrated artisans of the time, Luke Lightfoot. Lightfoot was a wood carver, and was responsible for what is still one of the most remarkable rococo interiors at Claydon House.

But Luke Lightfoot's influence was not just in wood carving. Lord Verney had engaged him to design and build the entire project.

There were lots of problems with the project. It took decades, and exhausted the family's finances. Luke Lightfoot was not the most honest of men, and much of the money was embezzled. And although he was a very skilled wood carver, later archaeological research has shown that much of the house was not structurally sound.

The problems escalated. Lord Verney ran out of money, and had to flee the country to escape his creditors. By the time of his death in 1792, although the main parts of the building were in place, the project was far from complete.

Following his death, the house passed to his niece, Mary Verney. Faced with this massive, exorbitant and unfinished building project, she took a hugely courageous decision. Rather than complete the whole project, she decided to demolish two thirds of the new building, leaving just the West Wing.

There are a lot of parallels between Lord Verney's ill-fated building and major IT projects. The project was conceived as a "me too" project, to demonstrate the power of the owner. The project was handed over to people who looked the part, but lacked the proper qualifications to run the whole project. There was a woeful lack of financial control and governance. The project dragged on for decades, with disastrous effects on finances. It took a change of management (in this case, death), before any realism could finally filter into the project.

Mary Verney's decisions saved the situation. The "small" part of the project she kept was, and remains, a magnificent building. Her actions kept the family from financial ruin and, unlike the Temples at Stowe, the Verneys still live at Claydon House.

IT is saddled with a legacy of major projects gone bad. Many projects have their roots in less financially constrained times, and are now a serious strain on resources. Like Mary Verney, we need to be ruthless in reducing scope to something manageable and affordable.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 5 March 2013

The end of naivety

If you really want to achieve something spectacular, it's best not to know it's impossible.

One of the loveliest stories I have ever heard is of the mathematician George Dantzig when he was a student. Dantzig, who was later to become hugely influential in operations research, computer science, statistics and economics, had arrived late to a lecture. Seeing two formulae written on the board, he assumed they were homework and copied them down. The homework took him longer than usual, but eventually he gave it in, apologising for his lateness.

Some weeks later, at eight o'clock on a Sunday morning, he was woken by a banging on the door. It was his lecturer in a state of great excitement. What he had thought was homework were actually examples of unsolved problems in statistics that the lecturer had written on the board to show the class. Not realising that they were unsolvable, Dantzig had solved them.

I think of this story a lot. It reminds me of the great opportunities of naivety, of not knowing the limitations of what you are attempting.

Naive enthusiasm was great when we started Metrici back in 2005. The world was full of opportunities and we were blind to the challenges. We were blissfully unaware of the scale of the work in front of us. But bit by bit naivety wears away. The more work we did, the more work there was to do. We learned what works and what does not work. The constraints of the real world, financial and otherwise, began to bite.

Gradually knowledge and structure has filled in the gaps vacated by naivety. We now understand our product and its unique capabilities. We know how to present it. We understand our strengths and the challenges we have yet to address. We have a close relationship with a partner company, Managed Service Solutions, and we have built an effective organisation with them. We are no longer naive.

Lots of things have to change when you are no longer naive. I am no longer superman. I used to battle heroically against all odds by myself, but now the priority is to train people and share our technology. Commercially, we need to team up with people who have been this way before and know what works and what does not work.

To work with our larger group of colleagues, we need to go into the office, not just work from home. We need to focus on the main task of presenting the product and building the business. I have spent years thinking and trying out ideas, mostly through this newsletter, but now I need to focus on the solutions we have created. I need to cut the newsletter back to a less demanding schedule.

Although naivety has passed, I still think naivety is a good thing. If we had know what we know now, and had foreseen all the problems we would meet, we never would have done what we did. If we had started with all the structure we have now, we never would have explored ideas broadly enough. We never would have created a new product and a new business. But, in our naivety, we did it.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 19 February 2013

The mathematics of flies in ointment

You can use simple mathematics to highlight areas that demand management attention and to stop bad news being hidden.

Since ancient times we have recognised that, when assessing a situation, a few bad things can have a disproportionate effect. Take, for example, this passage from the Bible, from which we get the phrase "fly in the ointment" (Ecclesiastes 10:1, RSV):

Dead flies make the perfumer's ointment give off an evil odor; so a little folly outweighs wisdom and honor.
In business, the measures we use for goodness and badness do not show this. At Metrici, we help organisations assess things: projects, IT systems, people, maturity, risk, and so on. It is useful to have summary measures, and we tend to use normal averages (arithmetic means) based on a weighting and scoring scheme. This is easy to understand, but it can hide bad news among good. For example, Project A has an excellent sponsor relationship, effective project management, adequate resourcing, but is seriously over budget. Project B has a reasonable sponsor relationship, project management and resourcing, and is within budget. The averaging effect means that Project A and Project B have the same score, hiding from management the problems with Project A's budget.

We try to find ways of highlighting areas that require management attention. Sometimes we show a second figure next to the score to indicate the number and severity of recommendations. Sometimes we have ad hoc rules, like "the average of the worst three". Sometimes we add commentary.

It would be good to have a single number that represents where management attention is required. People are not good at making decisions based on lots of numbers, and if they are considering multiple items (like a portfolio of projects), additional information soon gets lost. One score that reliably measures goodness or badness would be better.

The power mean is a variation of the arithmetic mean that allows you to emphasise one or other end of a range. Each individual factor is raised to a power before an average is taken, and then the average is raised to the inverse of the power to give the final result. For example, you might take the square root of each factor, average them, and then take the square of the result. You can use the power mean so that a situation with a mixture of good and bad comes out worse than a consistently mediocre situation. In a typical scoring scheme which goes from 0 (bad) to 100 (good), using a power less than 1 (such as 0.2) means that measures at the bad end of the scale are emphasised and not lost.

To be confident in the numbers you give them, people need to understand how they were calculated. Although they are more complicated than simple arithmetic means, power means are easier to understand than presenting multiple numbers and commentary.

We have found the power mean a useful addition to our tool box of analysis techniques. If you are involved in assessing or judging business situations, it is worth understanding the power mean.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 12 February 2013

Assessment and decision making

Assessment is a valuable part of the decision-making process, even if you don't use the assessment to make the decisions.

My son is in his penultimate year of school, and, being a bright lad, is likely to go off to university. My wife was discussing with him how he could decide between different universities. Then she stopped and laughed and told him that he ought to talk to me about it. My company, Metrici, specialises in methods and tools for assessment to support management decision making. Surely I should be able to give some fatherly advice on how to make a decision.

Personal decisions are different from business decisions. Business decisions are shared, and a systematic process helps gain buy-in from all involved. Assessing different options provides information to support the decision-making process and provides a score that can be used to drive the decisions. Even though many decisions are made on managers' gut feel, they still need to conjure up facts to justify those decisions. But you can not make a personal decision in the same way. You have to trust your instincts, and you do not really have to justify your decision to anyone else because it is you who have to live with the decision.

So it is with some trepidation that I think of applying my normal methods to help my son. However, I believe assessments can help, even for a personal decision.

The process of defining how you are going to assess different options forces you to think through what you really want. You shouldn't try to cover everything: pick the top ten factors that would have the greatest influence on your decision. These might be simple "must haves" (like providing the right course), measures (like pass rates and fees), things that will help you succeed (like accommodation) or more subjective factors (what you and others feel about the place). Thinking through what is most important to you is a really valuable part of the process.

Performing an assessment forces you to systematically consider multiple options, and identify their pros and cons. It provides a structure for the decision making process.

The assessment will provide some indication of "good" and "bad" options. I would not like anyone to base a personal decision solely on assessment scores, but they are useful to confirm or challenge gut feel. Disagreeing with the conclusion of an assessment is hugely valuable, because articulating why you disagree helps you pinpoint the factors that are most important to you.

Most importantly, assessments help you gain the benefits of the decision you have made. It gives you confidence. It prepares you to exploit the opportunities of your chosen option, and to confront its challenges. In the university example, your assessment might uncover that accommodation is in short supply. At least you are forewarned and can make arrangements well in advance.

I don't think my son should base his decision of which universities to apply for solely on an assessment. But I think an assessment process will help. It will force him to think through what he wants, gather the right information, be confident in his decision, and make the most of it.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 5 February 2013

Technologies for incremental development

When it comes to incremental development and system evolution, not all technologies are created equal.

Modern IT methods stress incremental and iterative construction. We think of these as systems development techniques, but could we extend the idea of incremental build and continuous evolution into production systems?

Recently, through a mixture of time pressure and laziness, I have been making a lot of changes directly to our production Metrici system, even editing configuration and code on the fly. Even though it might seem risky, I have not hit serious problems. I have been trying to think through what characteristics of the platform make this possible.

It boils down to three things: early binding, low coupling, and high autonomy.

Binding refers to the resolution of symbols used in the code to each other and to external data. In a traditional compiled system, symbols in the code are bound to each other during compilation, and then bound to external data, such as files and databases, during system configuration. This is known as early binding. In more interpreted systems, code and other resources may be bound later. But in Metrici, references to data and code components are bound during development - you pick specific versions of specific objects as you configure the system or write code. This extreme early binding means that you can create and modify new versions of code without disrupting existing solutions bound to older versions.

Coupling refers to the degree of connectedness between components, how much a consumer of a component needs to know about that component. At the risk of gross simplification, early bound systems tend to be more highly coupled, with complex programming interfaces, and late bound tend to be looser because they need to resolve connections at run time. Metrici is odd for an early bound system in that the coupling between components is very low - you can include components in a solution without knowing anything much about them. This means that when there are changes, there are relatively few knock-on effects.

Autonomy refers to the ability of components to work independently of each other. Some systems are built from a sophisticated structure of components which rich interactions, but those components have no use outside the whole. In Metrici, every piece of data, including each component, can be represented as a web page, and can be viewed and maintained using in-built functionality independently of any other. If things go wrong, it is always possible to view and modify data, even if more specific functionality, such as appearance or calculations, has gone awry.

If you read about incremental development, there is a lot about methods but relatively little about the fundamental characteristics of software platforms. Our experience has shown us that the software makes a big difference. The combination of very early binding, low coupling and high autonomy frees us from many of the restrictions of traditional software, to the point where it is safe to make changes to a running, production system. If you are interested in incremental and iterative development, it is worth thinking about how the underlying software platform will support you.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 29 January 2013

Applying POLA

The principle of least astonishment (POLA) is a simple concept for making computer systems more usable.

POLA states that the way that people use a computer system should match how they expect the system to work.

POLA may seem simplistic, but it is actually very practical. To illustrate this, we have been thinking what we need to do to Metrici to make it easier for new developers and to make it easier to take on more customers. Some of the challenges we face are usability challenges, and they can be expressed in terms of POLA. Here are some examples.

It is least astonishing if you can install products from an app store. Internally, Metrici has separate concepts of subscription (which gives you the right to use a product), and installation (which creates an instance of a product). However, what people expect is to go to an app store and click on "install".

It is least astonishing if account creation creates a usable account. When you create an account in Metrici, it is completely empty and you have to populate it with initial data structures before it can be used. It would be much more usable if account creation also created the data structures.

It is least astonishing if copy options are available on the copy command. Metrici has a simple copy function, but also a more advanced export/import service with more options such as data merging and intelligent recursive copy. The export/import service is only available by typing XML into an administrative screen. Integrating this into the copy function would make it more usable.

It is least astonishing if you can create items inside directories. In Metrici, everything is an object called a node, and each node is mapped to a web page. Nodes are used to contain or package other nodes (like directories), and nodes are used to describe the type of nodes. If you are on a package page and want to create a new item, you have to navigate to the page for the type for the new item and then select what package you want to put it in. It would be much more usable if you stayed on the package page and selected what type of new item you want.

It is least astonishing if documentation is complete and correct. Our documentation is reasonable, but there are some omissions, a few areas are not up-to-date, and some documentation is not published with the rest. Developers would find the system more usable if all the documentation was there and correct.

POLA is all to do with usability rather than functionality. The examples above add very little to what Metrici can do. They involve presenting functionality to match how it is used rather than its internal design, exposing hard-to-use features better, putting options in the right place, and a little bit of cleaning up.

POLA is a good place to start when improving usability. There are times when you need to write new functions or finesse the user interface. But a lot of usability is more down-to-earth, getting the system to do what it does in a less surprising way. POLA is a great way of thinking about that.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 22 January 2013

Multidisciplinary performance improvement

There are many ways to improve system performance, but the best performance improvements come from a multidisciplinary approach.

My experience with performance improvements go back to the very first project I worked on. We were writing a program to format a file of stolen credit cards to send to point of sale systems. The program was taking about 12 hours to run every night. We changed the program, from using an indexed file to a non-indexed file and a sort. The program then took less than 1 second to run.

This experience made me suspicious of performance improvement techniques. A lot of performance improvement tools and techniques involve analysing code, and tuning hardware and system software. But in this case that would not have made any difference. The problem was more fundamental, and no amount of code analysis or system tuning would have made any difference.

Recently we have needed to do some work to improve the performance of the Metrici platform. Historically we have had very few performance problems, but more recently, as the service has grown, we noticed things were slowing down and we needed to do something about it.

I was not sure where to start. We have plenty of hardware resources, and, thanks to a very skilled colleague of mine, the database has always been well tuned.

To help understand the performance problems, we used the VisualVM analysis tool, which is a free tool that ships with Java. This confirmed our suspicions about the main cause of the slow down. Whenever data is changed, Metrici automatically recalculates derived data. This was the process that was taking all the time.

Understanding where the problems lie is only the start. Working out what to do about it requires a knowledge of the system. If something is taking a long time, you need to decide whether you can stop doing it, do less of it, do it more quickly, or change when it's done so it has less impact.

In the end, we improved performance by changing both the design and coding. We sped up the calculation process by caching a compiled form of calculation scripts and by replacing some scripts with built-in functions. More significantly, we changed the design of the derivation processing, reducing the number of things that have to be recalculated, allowing access to out-of-date data, and performing some recalculation in the background.

We have had to make other changes to support the performance improvements. We needed to re-tune the database and change how some parts of solutions are configured. The changes have been successful, and the performance issues have gone away.

This recent experience has given me a better insight into performance improvement. You can make improvements in performance by looking at just one aspect, such as hardware or coding. However, the best performance improvement is multidisciplinary. It requires a good knowledge of hardware and tuning, and a good grasp of coding. Most importantly, it requires a good understanding of the design of the system, which is at the root of the most significant performance problems and solutions.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 15 January 2013

I would pay more for open source

Open source products are the best choice for integrating into larger solutions.

Our Metrici platform is built from multiple open source products. We use an open source application server and database, XML and HTML handling, expert system, script engine, graphics, and development and test tools. In total we use about 20 different open source products.

It is easy to see the commercial appeal of open source. You do not need to pay anyone to use open source. More importantly, you are free to deal in your software as your choose, without having to consider licensing implications and costs.

The longevity of open source and the control you have over it are even bigger advantages. There is less pressure on open source products to bring out new and incompatible versions than there is on proprietary products. When major, incompatible change is required, a new open source project is created and both this and the old product continue to have a life. You can choose which versions of which open source products to use, without reference to what a vendor will support and permit. You do not have to keep on the upgrade path unless you want to. If there is a good reason for you to use an old version, other people will be in the same situation and there will continue to be resources to support you.

Open source software is easier to integrate. You can pick and choose which bits you want to use. For example, I wanted to support SQL escape sequences. I found some code in the Apache Jackrabbit project. But I did not have to include the whole project, I could just include two source files. Proprietary software would not give me that freedom.

Because of the control that open source software gives you, there is less need to write interface layers to insulate yourself from changes, which makes open source easier to integrate. Most of our interfaces are relatively thin, simply exposing the parts of the component that we need to the rest of the system. Where we have used a proprietary product, such as Amazon S3 storage, we have had to adopt a more layered interface which abstracts the service so that we are properly insulated from any change forced upon us.

Documentation and support of open source is not as big a problem as it may seem. Few open source products have good documentation, and none provide contractual support. However, because open source products are used so widely, you can always find examples of people with the same requirements or problems as you.

Sometimes proprietary products can be worthwhile. With one of our partners we are considering using a proprietary charting library because it provides a consistently good user experience. Open source products do not fit well if the organisation is short of technical skills and has a culture where they would prefer to have suppliers to blame than to be in control themselves. But these are the exceptions: open source should be the default choice for integrated components.

Open source products are usually superior and always free. But even if they weren't, even if I had to pay more for an inferior open source product, I would still choose open source.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.

Tuesday, 8 January 2013

Image Magick

Image Magick is a powerful image manipulation utility that you can use to build automated image processing solutions or solve image management problems.

By chance, I came across a note I had written to myself in late 2001. I had just ordered a new PC running the then recently-released Windows XP. The note was my plan for what software I should install on the new PC.

There were only three pieces of software on my PC in 2001 that I still have on my PC now. Two of them are unsurprising: Adobe Reader to read PDF files, and the Java Development Kit (JDK) to develop Java programs. The other one is less well known: Image Magick.

Image Magick is a powerful utility for image manipulation. Ten years ago, when the features in Windows to preview and manipulate pictures were primitive and slow, I used Image Magick to perform image rotation and to create thumbnail images, to make it easy for me to look through digital pictures I had taken.

Image Magick can do a lot more than image resizing. It can convert between over 100 different file formats, including raster (bitmap) images, vector images, PDF and video. It can perform all sorts of image transformations, such as adding text, increasing compression, querying and manipulating image metadata, animation, and a whole lot more. It has deep, technical options for manipulating images, but does not require you to know them unless you need them. Image Magick runs on Windows, Linux and Macs. It can be run from the command line, or through an API available for many different programming languages and operating environments.

There are now plenty of graphical tools that can do what Image Magick does. Windows itself has good features to preview and manipulate images, and there are a huge number of free and paid-for image manipulation programs. Why would anyone still need Image Magick?

Image Magick has survived, and thrived, because it fulfils an important niche. Graphical tools are great when you have a one-off requirement for image manipulation. Image Magick comes in when you want to automate image processing, or where you have problems. My current interest is to add image thumbnails to file uploads in our Metrici platform, which is how a lot of web platforms use it. I can imagine many other uses, such as converting image files from legacy formats, or automatically maintaining multiple sets of icons in different sizes.

Image Magick is an excellent example of where open source software works really well. Few commercial organisations could justify the resources to support the breadth of formats and capabilities that Image Magick supports, and certainly not make them available at zero cost. But it is possible through long-term, collaborative open-source development.

Image Magick is a useful addition to your IT tool kit. If you involved in any form of solution development that involves images or graphics, it is worth spending a few minutes familiarising yourself with Image Magick. It may be that you are well served by the tools you already have, and have no need of it. But if not, or if you hit problems, it is worth knowing that there is an excellent piece of free software that can almost certainly do what you need.

© Copyright 2013 Minimal IT Ltd. See the Minimal IT website for the original newsletter and copyright information.