Simple Content Management

Sometimes you just want a simple way to let your users edit the pages on their site without having to yell for a developer all the time. There are many many CMS offerings out there, with varying degrees of complexity. Most of them require quite a bit of wrangling. Wouldn’t it be lovely if you didn’t have to sacrifice a chicken in order to get your new CMS working?
Perch is there for when you *don’t* need a moon on a stick. For when you just want to edit some pages without any mystic voodoo. Perch will be ready for release at the end of May, but pop over to edgeofmyseat.com for more information

  • Share/Bookmark
Posted in Web Development | Tagged , , | Leave a comment

Why a spreadsheet isn’t a database

When I discuss workflow and get told ‘and then we type it into this spreadsheet’, I worry. Spreadsheets do have their uses, and when used appropriately are a fantastic way to display or manipulate data. What they are not, is a database.

Unfortunately, a spreadsheet is a quick and dirty way of routing round system limitations, in the same way that storing all your data in a Notes field is. Don’t have a field to store ‘SnowmanType’ in? No problem, we can keep track of that in a spreadsheet!

I confess to having a personal horror of the spreadsheet database simply because, as a relational database person, they are just so.. so woolly. You can put anything anywhere. Ugh. For example, I work with a third-party supplier who sends me spreadsheets of (manually-maintained) data. One week, I wondered why my automatic import wasn’t working. It turned out to be because halfway down a column of data, she had suddenly transposed two columns, and what used to be Postcode was now SupplierName. That’s just wrong, and quite possibly immoral.

This horror of spreadsheets tends to make me quite a rapid developer, because I know that as soon as a problem has been identified, if I don’t come up with something sharpish, I’ll have a spreadsheet to defuse. The incentive of avoiding cleaning up an ‘Excel Database’ before I can import it into something more sensible, is quite a powerful one.

Don’t get me wrong, I use spreadsheets. I spit out data into them and format it into something pretty that you can then play with. But they are an output, not the whole solution. If I can’t delete all the data from your spreadsheet, and recreate it with minimal fuss, then you are storing your data in the wrong place and I need to help you with that.

  • Share/Bookmark
Posted in Development | Tagged , , | 1 Comment

Don’t fear the U-turn

Listening to Radio 4 this morning (I love Farming Today!), I was listening to the news reporting that Jack Straw has executed a u-turn on the plan to build large prisons. To my amazement, people were mocking him for having changed his mind.

Much as I generally dislike Jack Straw, my opinion of him improved somewhat as a result of his ability to change his mind. As far as I understand the 30-second news story, he did the right thing. He had an idea, it looked to him like a good idea, he asked a few people what they thought, they didn’t like it and said it was a bad idea, he wasn’t sure, so he decided not to go ahead with what he now wasn’t sure was a good idea. If only more people felt able to do that.

From my perspective, he got two things right: he canvassed opinion, and he then used that to revise his decision. It is not a sign of weakness to ask other people to think about your problem with you. It is not a sign of weakness to then use their advice. It is not a sign of weakness to change your mind. It is a sign of weakness to blindly go ahead with what you now see is a bad idea just because you are not brave enough to hold up your hand and say you’ve made a mistake.

The same applies to development projects: if you see you’ve made a design mistake, you can always paper over it and leave it as a hidden treasure for the maintenance programmer who inherits the system. Or, you can bite the bullet, admit you’ve got it wrong, and then re-do the work until it is right. Unfortunately, it is hard to communicate to non-techs exactly why you need to re-do the work and why you are adding extra time to the project. It’s easier to pretend you haven’t noticed the problem and just steam ahead and meet deadlines.

The trouble is, when you get it wrong, users suffer. Good software is invisible to the user – they stop noticing what they are using to do their job, and just do their job. Bad software makes every task seem difficult and awkward. So I would argue (and have done) that it is better to nip the problems in the bud in the development stage, rather than leave it for someone to apply sticking plasters later on.

  • Share/Bookmark
Posted in Development, thoughts | Tagged , | Leave a comment

Downturn thinking

Whilst I don’t want to appear to dismiss the pain of those who have been unfortunate enough to lose jobs or income as a result of the economic downturn, it appears that it’s a really exciting time for those of us who enjoy making things better.

Most companies have some form of IT infrastructure: you almost have to. Most of the companies that have this IT infrastructure, do not appreciate what it can, and does, enable them to do. Which is excellent, because good IT should be unobtrusive; it should be a natural part of your everyday life and enable you to do your job more effectively.

Time progresses and technologies improve, but has your business reevaluated its IT strategy lately? What is there available now that could help you survive this downturn? Is there any way you could invest some money now and enable your operation to become leaner, smarter, faster. Evolution doesn’t just apply to nature, you know.

Almost every day, I come across an instance of a user-grown ’system’ that has evolved to try and cope with a demand. It’s not the best solution, but it does the job. Once I’ve worked out what that job is, I can then rationalise the process and smooth off those rough corners that have been a niggle for the users. I am always amazed with the ingenuity of people when faced with a problem. Sometimes the solutions they come up with just need a little automation to make them more efficient.

The other day, I met with a group of users who have a particularly cumbersome application designed for them. The original user of the system signed off the development work solely on the basis that it was ‘better than what we had before’. So, over the years, as needs have changed, it has become harder and harder to use this application, as it didn’t really do what was required in the first place.

Before the meeting, I sat and thought about the process that the application is designed to assist with. I put myself into the position of a user of the system, and all the things I would want and need to be able to do. The users did the same and came to me with a mind-map of their process and a wishlist of features. I talked them through my ideas and then asked them what they thought. I had covered most of their wish list, and more. So development work will start on that, and together we will turn a department struggling to cope, into an efficient, stress-free team, who can spend more time on customer service, and less time wondering which button to press.

These are exciting times indeed.

  • Share/Bookmark
Posted in Development, thoughts | Tagged , , | Leave a comment

My report is broken!

Leaving aside those odd occasions when the database has exploded, most of the reports from users telling me ‘my report is broken’ are for one of three main reasons:

  1. User has forgotten how the report works
  2. Incorrect data does not meet criteria
  3. Developer error in implementing the report

The anatomy of a report

Reports can be broken down into two main parts:

  1. What I want to see (the column headings you can see e.g. Snowman_Name and Snowman_Location)
  2. The basis on which what I want is selected (’show me only snowmen with carrots for noses’ will not show you turnip-nosed snowmen)

What mostly seems to go wrong is that people forget the basis on which the data is selected. There may now be a disagreement about what constitutes a ‘new customer’ – your boss may think it means customers signed up in the last week, you might think it’s customers who have just placed their first order, whereas the actual report thinks it’s customers who signed up in the last month and are yet to place an order. What I’d like to emphasise here is that the report is not wrong. It has been given a definition of ‘new customer’ that has since been forgotten by everyone but the report. The report might now need changing, but it is not returning the wrong data, according to its instructions. I always like to emphasise that point, as people need to be able to trust that their reports will be correct, and the only way to do that is to prove that there is a logical reason for the output.

Fixing the report

As someone who spends quite a lot of her time investigating ‘broken reports’, the first thing I do is to pull the report apart and tell the user what it is actually doing in order to get them the data. Either rightly or wrongly, this is what the report has been taught to do. Nine times out of ten this provokes a discussion of what the report is being used for, and what would actually be meaningful for the report to do. It’s quite easy to forget that data has to have context and relevance in order to be information, and if you are no longer sure what a report is telling you, or have just assumed what it means, then you do not have the information you think you do.

Sometimes the report is doing what everyone thinks it is doing, but somehow, some data isn’t right e.g. you’ve indicated that there should be a fee, without specifying what the fee should be, so it isn’t calculated on the report. That kind of issue is more of a problem with the application itself – why were you allowed to make that mistake with data entry? Why was there no exception reporting? This kind of problem can be a lot harder to fix than a report.

Changing the report

Business needs change over time and it can be difficult to keep track of who needs what information and why. More than once, I’ve changed the criteria of a report, based on a complaint from the user who ostensibly owned the report, only to find that there was someone else who got the report via a forwarded email,  used it for unexpected purposes, and was now miffed that the report had changed. I still haven’t worked out the perfect solution to that particular problem. Depending on your particular organisation, it may be practical to list all the official reports and the interested parties, so that all can be consulted. In my own personal circumstances, I’ve inherited an application with hundred of reports, not all of which are used, or even known about. I’ve promised myself that one day I will get time to audit them.

It’s worth noting that you should keep track of changes made to reports – what, why and when – so that when your boss starts comparing year on year by looking at old reports, you can explain why it doesn’t look as expected. That’s not the only reason, of course, but one that I personally find useful. It also helps for those times when none of the users of the report can agree on how it should work and you find yourself endlessly tweaking. And that will happen, despite endless meeting and agreement of specifications.

Incorrect implementation

When I first started creating reports from databases, about 10 years ago, I had no real idea what I was doing and my reports were very simplistic. As I’ve learned, and my grasp of SQL has improved, I can produce more and more complex reports. But the fundamental issue remains the same – what does the user actually want from this report. It is important to get a good grasp of the terms the user is using – what exactly do they mean by ‘new customer’, where is this data found, which out of the many ‘move out date’s is the one they actually want to base the report on.  Most implementation problems are due to a misunderstanding of the requirements, so make sure that everyone is clear about definitions.

Trust your developer

As a developer, of course I’m on the side of the report, it is blindly following instructions. But I’m also on the side of the user, as I understand they need information in a timely and appropriate manner. The only real way I’ve found of making everyone happy is to stop doing what people ask for. Yes, you heard. I don’t wish to sound arrogant here but users are seldom best placed for making decisions about technical questions, or know the best way to do something. After years of re-doing reports until everyone is happy, I started just asking what they intend using the report for. It might be that instead of having Mary print out this report weekly and fax it to each member of the team, we can arrange for a personalised report to be automatically emailed out to each person by the database server. You can only make that kind of suggestion once you know the intention and use of the report.

  • Share/Bookmark
Posted in Development | Tagged , , | Leave a comment

The importance of continuity

For the last three years, I have been working on a project to bring together all the disparate systems we employ here, to simplify the task of the user and to try and ensure that when someone is off, another person can pick up the threads. Oh, the system was supposed to do much much more than this, but out of all the features I had planned, the documenting and recording of what was happening in a Case was the most important to me.

As usual, I put myself in the position of having to do the job, and I really really dislike not having enough information to hand to do a job. I don’t like not knowing what the previous person has done or agreed or been discussing. I don’t like having to wade in without the full picture, exposing myself and the company to unnecessary risk. I then put myself in the shoes of the actual customer, and decided that this stance I was taking would vastly benefit them too. No-one likes to have to explain themselves over and over and over, to different people, none of whom have the foggiest about my situation or what has been promised me.

But in order to improve people’s recording of this information, you have to provide a measurable benefit to the recorder. When you are busy, it is often difficult to make time to write down the minutiae of a discussion, and of course you will remember all the details, so what’s the point?

As a developer, I see people’s faces become stony when you start talking about ‘typing up notes’ or ‘logging calls’: “I simply don’t have time to do that.” So what I try to do is to work out how I can save them time in other places, or make it easy and natural to record more information. If you can create that email in the application, and have it save back to the notes, attached to the addressee and the case, that achieves my objective, and theirs. Little things like that can make all the difference to the perceived success of your application.

I’m in a slightly unusual position here in that I’m the systems analyst as well as the developer. I’m not just writing the code, I’m trying to change the world (for my users at least!). The two roles do conflict at times. With my user advocate hat on, I want the best from the user experience, I want the application to be a delight and to solve all the niggly interface problems that grind away at your morale (never underestimate the cost to your business of unusable or badly-written software). But the developer has a deadline, the developer has to provide all these features in an often unreasonable timescale. Functionality has to come before delight. In this crossfire, is where projects get abandoned.

  • Share/Bookmark
Posted in Development | Tagged , | Leave a comment

Don’t knock MSAccess

Part of my daily work includes supporting various Microsoft Access databases, and I’ve been building things with MSAccess for about 11 years now.  However, I’ve learned not to mention Access when talking to other developers, as it gets one roundly mocked and, often, sneered at. It seems that ‘real’ developers view Access as a ‘toy’, or worse, a force of evil that allows users to create nightmarish applications that ‘real’ developers then have to support.

But Access itself is not intrinsically evil, it is just a tool. Yes, I’ve seen some horrific examples of just what you can do with MSAccess. But we all make mistakes while learning; the problem really is that businesses then use these badly-designed systems to do important jobs. It is always a mistake to run mission-critical processes on some software written by your nephew as a college project. Yes, the development cost is cheap, but the maintenance cost, or cost to your business in errors, will be high.

There was some discussion at work about whether we should restrict access to Access (sorry!) to stop people being able to create databases. I’m a great believer in empowering users and letting them learn, so I don’t really agree with this approach. But, not wanting an exponential growth in support issues, my policy is that I will help but not support. If you want to learn, learning by mistakes is the best way, and the idea that I won’t bail you out if it all goes nasty hopefully will prevent managers from allowing any of these creations to become critical parts of a business process. I’m an optimist.

  • Share/Bookmark
Posted in Access | Tagged , , , , , | Leave a comment

Balance between training requirements and flexibility

I once worked on a system that fulfilled the primary objective of the business and technically let the users get the job done; but to use it, you had to have a fair degree of knowledge and skills and remember how to fill in all the boxes and which boxes were meant for each operation. Although I supported it, I always had to ask the expert user how to do various things in order to test fixes, it just wasn’t intuitive. New features had been created by just creating new fields, or new tables and letting the user fill in data. Just big shoeboxes you could put things in, really.

I’ve just read http://www.baobabhealth.org/2008/02/09/text-editors-and-electric-kettles/ and would describe this application as somewhere in between the text editor and the kettle, but combining the worst features of both. The system had a very strict idea about what should be allowed, clearly assembled from years of incoming instructions, but because it made no use of functions to manage the mountain of code, the same basic instruction could be implemented in lots of places, in lots of ways.

But the users were more or less used to the quirks: they knew that when they had a scenario that didn’t fit the hard-coding, that they could falsify data or choose incorrect choices deliberately to force difference behaviour. They made their own text editor.

I’m embroiled in a project to write an operations system for a company who need infinite flexibility in the day to day nitty gritty, but overall patterns in the broad-brush approach to service delivery. I aim to provide a templating system that is adjustable at multiple levels, and give a task-based approach to the whole thing. As a user, you will be given the list of things that absolutely must be done to perform a service, and the manager can provide simple guidance that will appear onscreen when requested, as to how a task should be done.

I’ve created a monster – it’s flexible in that you can generate workflow for anything you like, but minimises training as end users will just indicate what they have been asked to provide, and it will tell them what they need to do. But from a developer’s perspective, it’s a monster. Just creating multiple levels of templating system for workflows has been interesting. I’m now working on what happens when a user completes a task, calculating the next path and generating instructions for them to follow.

One thing I’ve learned is that when you have a complex problem, the complexity can’t really go away. If the developer doesn’t want to deal with it, they have to delegate it to the end user. If the developer is foolhardy/brave enough to want to deal with it, it’s a lot of hard work.

I always develop things from the point of view of me being the end user of it. I have limited patience and am hopeless as remembering to do things unless I have a list I can check off (thanks Things.app!) and so things that would annoy me are smoothed over, and things that would be useful to me, go in. A selfish way of designing, yes, but I think I have quite good empathy and I make the effort to try and understand all the problems from all angles before I start designing.

I think you have to be fundamentally honest, as a developer, to produce something that will actually help. If you can see something is not quite going to work, you can plaster over it quite easily; or if you can’t be bothered dealing with the complexity, you can provide a simplified solution and just hope that the users can mentally fill in the complexity for you. But if you genuinely want to help the user, and make their job easier and not just different, you have to be honest and deal with all the problems you can see. I have seen too many times where ’simplification’ of the system has lead to horrible text editor creation, where the users have to invent their own solutions to the problems that have been ’simplified’ away. Usually this involves spreadsheets. Ugh.

  • Share/Bookmark
Posted in Development | Leave a comment

Archaeology Group Site Refresh

I joined a non-local archaeology group last year, mainly because they had a website, and the local groups didn’t have anything I could find. Shallow, I know, but a web presence is so important to me – I like to be able to get access to information at any time of day, or when I’m out and about. If you can’t offer me a website, then I’m mostly not interested. In fact, you barely exist to me.

I was slightly disappointed to find that the information on their site was not really up to date, so it instantly lost credibility with me: if there’s one thing I dislike more than lack of data, it’s untrustworthy or stale data.

Somehow, I ended up on the committee and started poking my nose into their website – the problem wasn’t that they had nothing to say, nor that they were doing nothing worth mentioning. The problem was technology. Archaeologists aren’t, for the most part, nerds, so the problem of how to get stuff onto the site was the stumbling block.

Obviously what was needed was some kind of friendly content-management system that would allow any of the committee to make announcements, publish activities and talks and generally tell the world about the exciting things that we do.

I was already a Wordpress user and was itching for an excuse to use it as a CMS. It works surprisingly well for what they wanted it to do: members login area, Events (with extra data), easy management of images etc. At some point I will get round to listing all the plugins I used – I’m still documenting it all for the archaeologists!

  • Share/Bookmark
Posted in Web Development, archaeology, wordpress | Tagged | Leave a comment

Information Overload

I love the Internet, I do, I really do, but it wears me out.

I have more RSS feeds in my feedreader than I have time to read, and I come across more every day that interest me. The Internet is absolutely fatal to anyone with wide-ranging interests: it’s so easy to overdo the information influx and become dazed and bewildered by it all. The thoughts of a billion brains is not meant to fit into one head, after all.

The trouble is, the Internet has become like a giant distributed brain with all its thoughts available to read whenever you choose. If you are interested in almost everything, then there’s so much to read, so much to think about, and it becomes really difficult to have any thought processes left to deal with everyday life.

We are so tremendously lucky to live in an age where we are getting closer and closer to having the sum of human knowledge a mouse-click away. No matter what the subject, you can find information about it. It becomes really easy to become a relentless consumer of information, retrieving snippets from all over the globe without moving from your chair. But I’m not sure that’s a healthy habit to get into. It’s very easy to become mentally exhausted just trying to absorb and process it all.

The sheer volume of information, thoughts, opinions, essays, comments etc that is out there is terrifying. I have many feeds in my RSS reader that I think I should read, either because they will help me become a better person, or will keep me up to date with technology, or just keep me posted about what’s happening in web development. I’ll confess right now – I hardly touch those feeds. I just can’t take it all in. 

 I don’t really know what the answer is – as a nerd I do have a need to attempt to keep up with what all the other nerds are up to, but at the same time, there are just too many of them, and they are all talking at once.. 

  • Share/Bookmark
Posted in thoughts | Leave a comment