Archive for the ‘Business’ Category

Why are most web sites so bad?

Monday, July 6th, 2009

Overview

In the past you might have heard something like this being uttered: ‘Web is a very young industry compared to many others, so it’s only natural to expect many things not to work very well or at all!’

There is much sense in this statement, but many aspects of it are incredibly flawed too!

Software Engineering as a practice has been around for a relatively long period of time (at least 20 years) and many books have been written on the subject matter.

I studied software engineering formally some 10 years ago and have learned common sense matters such as that software should be developed according to user needs from a very early point.

You will often get an impression that ‘User Centered Design’ is somehow a ‘new approach’, which has not yet been well formulated and much research has not been done to formalise it.

This cannot be further from truth.

I will now try and explain some of the reasons why I think so many web sites are so bad and regularly fail to work properly.

How most industries work

Think about the medical profession.

A typical doctor will spend approximately 7 years in formal University education in order to qualify as a doctor.

Before then, in order to even start studying medicine, students will need to prove that they are smart enough and capable enough to study the subject by achieving high level grades in their previous education.

The University Degree will teach medical students various theoretical aspects of medicine, biology, chemistry and much time will be spent doing practical, lab-based work while everything is likely to be discussed to Nth degree.

After 7 years of intense formal studying and evaluation, medical students will be placed in a hospital where they will work-shadow a various senior staff in order to understand the context of working in a hospital as well as see real life medical issues being dealt with.

Similar is the case if you would like to become a Gas Certified Engineer.

You will spend at least 4 years studying in order to obtain your formal qualification so that you can tell someone whether their Gas Central Heating system is at the right pressure level.

Important aspects of the above two examples are that Gas Certification Standards and Medical Books are developed and written by a high-level authorities which are setting those standards.

How IT industry works

Unlike with the above two example professions, in IT related industries for most part there are no official qualifications required from someone so that they can work as a developer.

In fact, many people will potentially frown upon those who come from Computer Science or other technical backgrounds.

Developers are asked to ‘prove themselves’ by showing a portfolio or a list of links to sites which they worked on, often to be judged whether their work is good or bad based only on the looks of those web sites.

Many times those interviewing IT people do not know much about IT themselves.

Many contributors to IT industry are totally non-technical and never want to be technical at all.

In some cases people working in IT industry quite openly hate IT itself too, while I find it difficult to imagine a brain surgeon hating the concept of operating.

The problem of people and process

Software Engineering is an incredibly complex undertaking.

Building a blogging system (which is a relatively simple matter) can be done in a very inappropriate manner, but it can also be done in such a way as to serve many other purposes.

Every software, however simple or complex, is subject to this fact.

Building software is somewhat of a conveyor belt task, just like cars are put together in a factory.

In order for software to be built well, it requires each person in the building process to follow the process, as well as know what their tasks and responsibilities are.

In most cases, software development is never approached in this way, and this is one of the main reasons why most IT projects fail miserably.

Those who don’t know cannot setup a process

We are back to the initial issue – if someone is not trained and clued up on what they are doing, they cannot organise their work properly in order to do it properly on an ongoing basis.

It takes time, effort and experience to understand what makes a good process and a proper approach to software development.

This is also heavily related to the type of software a team is building.

Another important matter to consider is that untrained people are often unable to improve the processes they are working on, constantly being locked down in a vicious circle of struggling to make a bad approach work.

Even if they manage to deliver something using a bad approach/process, usually the delivered product does not meet even the basic quality standards.

In fact bad approach/process usually generates software which does not meet the actual business requirements and those who worked on the product are often forced to explain why something ‘could not be done’ for whatever reason.

This ‘cannot be done’ attitude eventually precipitates into the organisational culture and becomes defacto standard way of (not) building sofware.

A moving target

One more major reason why most web sites are so bad is that the IT industry is a constantly moving and evolving target.

By the time a web site has been published on-line, in most cases it is already somewhat out of date, needing improvements, maintenance and taking care of.

This is the case with every software.

In order for web sites to be kept ‘fresh’ people building them are required to keep their skills and knowledge fresh.

This requires passion and dedication, which most people do not have (enough of), producing average, slightly out of date products all of the time.

Big corporations will kill the web

Tuesday, May 12th, 2009

The inception of web

In the initial days when ‘The Web’ was in its inception stages, there were a few people who were putting together the nuts and bolts of how the whole concept was going to work.

Tim Berners-Lee, of course, was a great visionary with much common sense, great ideas and a solid ability to put together simple concepts which were able to achieve relatively complex tasks (something that every great web standard ought to be able to do).

There were no ‘big players in the game’ such as Google, Microsoft, Yahoo, eBay, Skype and so on.

The mass media, capable of shooting down any idea through leveraging simple group think, was also much less influential at the time.

The emergence of the giants

Few decades later we live in the world where conglomerates are the ‘standards setters’ and play a crucial role in what is done on ‘The Web’.

Today we have Google, Yahoo, Microsoft and other big IT corporation proactively ‘contributing’ to the web standards at W3C.

They develop tools which render those standards relatively well and then implement solutions which do not follow those standards.

The situation created in real life is one where good developers follow standards as much as it is possible, while most others do not.

Microsoft creates a browser which handles most of the junk UI code pretty well, which institutes bad practices across most of the web as ‘stuff just works’, even though it is poorly coded.

Since most developers do not know about, or simply do not care about standards, majority of the web content is published with very poor code.

Do not lead by example

Google’s home page could be a great example of a web page developed according to standards and best practices, but it is arguably and example of the worst practices all in one, short, simple HTML 4.01 page.

Leading by example is obviously not something that Google care about at all and therefore I question their contributions to W3C altogether.

Most mega popular web pages still contain masses of in-line code (CSS and JavaScript) stewed together with non standards-compliant HTML 4.01.

The main IT corporations are extreme examples of very bad practices in real world while we are lead to believe that Google engineers are ‘the best of the best’.

I have no doubt that Google’s engineers are the best Java developers in the world, but their front end skills are certainly somewhat to be desired!

In fact I still have not come across a single Google page which follows User Interface Best Practices and it is incredible to think that they do not really care, or know, about simplest aspects of accessibility within their interfaces.

I shall be covering more concrete examples of how Google break the web by breaking some of the simplest to implement best practices in their own web pages.

The doomsday is coming

One of the most concerning aspects of the influences conglomerates exert onto ‘The Web’ as a whole is that they all have to aim towards a monopoly.

Monopoly and oligopoly is what ultimately every corporation aims towards achieving as publicly traded corporations are forced to grow all the time in order to increase their share price.

By definition, monopoly is always bad for the end user, as it forces people into having to buy one particular brand or solution and it discourages or even purposely kills innovation.

In the case of Microsoft, they tried to monopolise through use of their own proprietary solutions and their strategy is still the same, largely based around the Windows Operating System platform.

Google ‘changed’ the rules by adopting open source technologies, only to start playing the same proprietary game like Microsoft in recent years, through development of their own APIs and their own protocols for application development in the cloud.

This approach leads to the same monopolistic outcome of lack of innovation over long term, just like Microsoft caused.

This is because it locks developers into having to work within a very closed ‘standard’, which is not really a standard as it only works on Google platform and is only relevant to Google’s APIs and architecture.

Adobe pitched in with the AIR concept in order to try and grab the ‘bridge market’ between cloud and the web, with relative success, but the outcome is still that AIR is a proprietary platform solution which belongs to one, commercial company and tries to lead to monopoly at all times.

Apple, arguably the biggest ‘standards criminals’ of all, have for a very long time openly deployed an approach of locking users in and always developing entirely proprietary solutions, which they then monetised heavily once the users got used to the initial devices they bought and realised they could not port to other platforms.

Apple are extending the same approach to the web with iTunes and the iPhone platform with significant success and many developers are more than happy to ‘buy into’ the whole concept as they might make money out of it, just like many people bought into Google’s ‘free’ solutions which meant giving all the data away for free, leading to a heavy potential long term ‘lock in’, as shifting massive amounts of data from one provider to another is always likely to be a massive hassle.

Last but not least, various mobile phone corporations have, in recent years, jumped in on the act and, through their leverage of various mobile devices, started creating their own platforms, which implement their own APIs, their own ‘lock-in protocols’ and their own ways of thinking about application development.

Nokia spring to mind with their own proprietary ‘mobile web services plaform’, while BlackBerry’s browser does not support many of the typically used web standards on regular pages, leading to ‘broken Web’ when browsing many web sites through a BlackBerry.

With mobile devices so versatile in nature, a day of a ‘standard mobile device’ looks virtually impossible to achieve, which may mean that generic mobile web solutions will always be impossible to develop.

The breakdown

As Tim Berners-Lee points out in almost every single one of his presentations, interoperability is the ultimate goal of the Internet and that interoperability is achieved through wide, commonly adopted, open and non-proprietary standards.

Since corporations aim to monopolise, Tim’s vision becomes the enemy of the corporate strategy and the web becomes broken.

Big corporations will therefore kill the web over time, since they will always be happier with monopolising one piece of the global pie, rather than playing an ‘open game’ in an interoperable, standards enabled, free-for-all, mega information playground, which has absolutely wonderful potential.

Semantic web design process

Wednesday, June 11th, 2008

Outlined below is what seems to be increasingly emerging as the most appropriate process for developing semantic web software.

The below process has been gathered by working alongside some of the leading UK design agencies and through having various conversations with (mostly design agency) managers.

It is also important to outline that this process is favoured by visual design agencies as well as other professional development companies on the market.

Many developers tend to believe this approach is favoured by semantic web developers as they have to ‘worry less about design’, but in my experience this is not the case at all.

Good designers tend to understand the intricacies related to web interfaces and are able to cater for them and design around them in order to make web design aid user experience and not hamper it.

The reason why I am outlining this process is because it could be dubbed the ‘semantic web design process’, where the focus throughout the process is on the meaning, structure and overall needs of users and the business, which are the main purposes of existence of most web sites and applications.

  1. Scope out

    Work out the key functional requirements for the system, without going into deep details – since most of them are likely not to be known at the early stages of system development.

    Write down keywords from the specification papers and start understanding which are the most important functionalities and features which need to be developed within the web site or the web application.

  2. Sketch

    Firstly, in a very rapid process, the idea is to sketch out pages for a web site or web application in order to capture the most important aspects of the system as a whole in some sort of a visual manner.

    Even very experienced developers and architects can struggle to visualise systems before they are actually built.

    At this stage the most important factor is to capture all those obvious and easy to think of aspects of the system which can be sketched out and given to developers to prototype.

  3. Build

    At this stage the idea is to build a wire frame like prototype of the system, based on the sketches drawn out on paper.

    This approach gives developers, as well as the business a solid insight into what features, structure and intricacies the system will contain.

    Prototype build is a tangible asset and can be seen, used and evaluated by the business in order to scope out and work out what is missing from the overall solution.

  4. Test

    This step within the process rests almost entirely upon development of the prototype in flat HTML/CSS and maybe using some JavaScript.

    It is possible to test the system by getting users to point with their fingers to areas of the pages on sketched out paper based wire frames of each page, but this approach is much less precise.

    The reason why it is important to have users test the ‘real system’ is because those kind of tests tend to unearth real problems based on a solution which is as close as possible to the final build.

  5. Refine

    Based on the user testing carried out in user testing stage, refinements to the overall system are made in order to improve usability and relevance of each page.

    It is incredibly important to base changes to the system upon real data and real findings.

    It also goes without saying that selection of users to test the system with is incredibly important, so there is not much point in (for example) testing an e-commerce system aimed at middle aged women with a group of young, tech savvy boys, since they are most likely not to use the system in the same manner as the target group.

  6. Design

    Only at the point when the system as a whole has been developed should you start working on the design for the system.

    Some of the reasons for this are that designers need to know various states the pages can find themselves in.

    Designers also benefit greatly from knowing what kinds of content might be found within each section of each page, in order to design in a manner which works gracefully with all types of content required by the business.

    Another incredibly important reason why it is useful to do design as the very last stage of development is the fact that systems tend to take much longer to develop when every time a wire frame or prototype changes, design also needs to be changed.

    This fact adds no value to the system, but ‘sucks up’ time and resources from the company developing the system greatly, creating impressions that software development is about ‘creating documentation’ rather than creating shipable code.

  7. Deploy

    Deployment is not necessarily the ‘end’ stage of software development, but, if deployed as BETA or even ALPHA version of the system, can and should be treated as the first official live analysis of the system.

    We are really now only at the ‘Scope out’ stage of development, but this time the system is ‘in the wild’ and gathering more real world data and information about real life behaviours of the users on the system, which is incredibly important as it is ‘real’.

    Google and various other web sites have been deploying this approach for years now.

    They also use this approach in order to show their users that ‘something is constantly being updated on their systems’ which users tend to appreciate as it gives them an impression of a ‘constantly improving and active organisation’.