Archive for the ‘Software Engineering’ Category

The Simple Software Cycle

Software Cycle

I’ve always wanted to write a post about the similarities between writing software and riding a bike. Not because I think they’re particularly interlinked or I feel they have a lot in common but because they’re two things in my life that I have a passion for.

Since moving house last month I’ve been cycling into work most of the time. It’s a five mile cycle which takes about 20 minutes. I skip past the cars in the traffic jams, whizz down the canal, take a quick short cut through Ringsend and cross over the Liffey at the East Link bridge. It’s great exercise and I’m saving about €30 on petrol a week in the process. But the good news doesn’t stop there, the ride is pretty therapeutic too, it helps me de-stress, relax and takes my mind off all my worries. In short, it gives me time to think.

Whilst whizzing in and out of work I’ve noticed a similarity between the design of a bicycle and the design of desktop software. It might sound like a bit of a stretch, but honestly it’s not. They have both become a victim of the age old product lifecycle. With each new iteration comes a new set of enhanced features and upgraded technologies. Many of which aren’t really necessary.

Feature Creep to Beat the Competition

My racer has 14 gears, yet I can’t remember the last time I actually used them all on one ride. In fact, for my spin into work I don’t even change gear once! This got me thinking about how necessary gears are for a bike that’s used simply to bring me in and out of work.

In this sort of scenario the gears could easily be seen as an unnecessary extra, and as one of the most complicated parts on any bike, they can be fairly problematic and also increase the price of the bicycle.

Similarly, desktop software and its many features have fallen into the same trap. Each new version includes new extra features that for the most part are unwanted and unnecessary yet form the basis for aggressive marketing campaigns encouraging consumers to purchase new editions with all the fluffy features we don’t need. The additional features are also prone to bugs.

For example, about 80% of Microsoft Office customers use only 20% of the supplied features. This is exactly what I’m talking about. I bet most of those features weren’t added because users needed them, they were added because the marketers needed something to promote in the next release.

I suspect that the ever increasing number of bicycle gears and their increasingly sophisticated designs have originated from the same motivation, to have a new product slightly better then the previous one.

The SaaS Bicycle

Maybe the cycling industry and others like it would benefit by taking a leaf out of the software as a service industry and focus on generating recurring revenue and developing a great product with features that people really need instead of relying on the next ‘bells and whistles’ release to boost revenues.

There will always be a proportion of customers that will push the limits of whatever it is you’re selling, but for the majority, they’ll mostly use its core function. Whether that’s cycling, driving, making music or saving lives, never loose sight of the core purpose of your product. Everything else is just hot air.

The Real Cost of SaaS

Software as a Service

SaaS, or Software as a Service is being hailed as the greatest thing since slice bread. It’s got loads of advantages over it’s traditional desktop equivalents. For developers and entrepreneurs it’s a dream business model, but for consumers it can actually end up burning quite a large hole in their pocket, especially if they need to use more then a few services at once.

To highlight this I’ve done a little test to see much it costs to run all my favourite SaaS services with an average paid account.

Right now, I use 10 online services that I either pay for or expect to pay for at some point in the future. These are:

Not all of these pricings are based on a yearly or monthly charge, so lets make some assumptions:

  1. That on Campaign Monitor I’ll send 12 newsletters a year to 200 people ($5×12x$2.00=$120)
  2. That I need 3 Google App accounts ($50×3=$150)
  3. That I need to remotely manage 4 servers on LogMeIn ($69×4=$276)

Now lets add it all up.

Service

Monthly Cost

Annual Cost

Freshbooks $24 $288
Campaign Monitor $10 $120
Google Apps $12.50 $150
Lighthouse $24 $288
LogMeIn $23 $276
Remember the Milk $2.08 $25
Springloops $32 $384
Basecamp $49 $588
GRAND TOTAL $176.58 $2,119

So that’s $2,119 per year for all the online software I need to run my personal life and my small business. Is this an acceptable cost? Probably. But the few dollars a month really add up once you start to use more then a couple of services.

Compared to the licensing costs of Windows XP and Microsoft Office (which are one off’s) these costs are seriously high, so although SaaS provides new and exciting opportunities it can also be expensive compared to traditional software solutions.

So the lesson here has to be that before deciding to pay for a subscription based SaaS service, make sure you’re 100% confident you need it for your business. Otherwise it could end up costing you more then you expected.

New Ideas to Improve URL Shortening

Ideas to Improve URL Shortening Services

The use of URL shortening services has exploded since the introduction of micro-blogging sites like Twitter and Jaiku. The most popular ones include url.ie, is.gd and tinyurl.com. The tight restrictions on the maximum length of a Twitter post has created a surge in demand for these simple services.

The only problem is, they’re nowhere near to reaching their potential.

These services could be so much more useful and interesting. And there are loads of simple ways to improve them. They should be leveraging the unique data they receive and help make the service more interesting to everyone. Additionally, as Aidan Finn rightly points out, they’re not always appropriate either as they remove contextual meaning from the text used in the link. This text is a key navigational tool often used by readers to help them decide if something is worth visiting.

This got me thinking about ways to improve this relatively simple service, so I’ve come up with four straight forward ideas to help add value and make them more useful.

1. Add Statistics

Neither Twitter or Jaiku or any other micro-blogging tool provides any form of analytical statistics for their users. Other than our list of followers, we have no way to see who’s viewing (or cyber stalking) our profiles. By adding simple statistics to one of the popular URL shortening services we could see a) who clicked them, b) how often, c) and from where.

The statistics of the URL’s activity could be made public, or alternatively, simple user accounts could be added to the system to allow users to see and manage all their URL links created from within the service over time.

2. Allow Custom Links

Links generated by the current URL shortening services don’t give any context. The text used in the links give no hint as to the content of the source of the link. It would be nice to have an option to choose the text used in the shortened link rather than have the system generate one for you. Obviously the number of available and meaningful URL’s is limited, but it doesn’t necessarily have to be three characters in length (such as http://url.ie/g00). I’d be quote happy with an eight or nine character URL if it gave me some idea about it’s content.

For example, the shortened URL for this post could be http://url.ie/urlPost rather then the context free http://url.ie/g00.

It’s a small improvement, but something that would make these services a lot more useful.

3. Secure RSS Notifications

Simple statistics could be provided via RSS to centralise and aggregate the activity on the URL. It would be a great way to deliver analytical data. Each URL could have it’s own feed (example: http://url.ie/short/rss) or user’s could have an aggregated feed of all their URL’s (example: http://url.ie/iarfhlaith/rss). These could be rendered private or public, allowing the owner to control who has access to view it’s popularity.

4. Go Social

Perhaps there’s also a social networking angle to this. These URL services could build communities around the people who link to the same resources. It would be a great way to connect readers with similar interests, who otherwise may never find out about each other.

It would also be another way to add authority to links into blogs and other news content, albeit just a small portion of the actual number of links likely to be linking to a particular resource. Normally, authority in blog search engines like Technorati and the new Twingly service rely on pinging services to gather data on the number of links back to a resource, but these only work for blogs and news sites. Whereas the URL shortening services, by their very nature, knows who’s linking to what without the need for complex systems.

Tell Me What You Think

I think these are all simple, interesting concepts that would improve the current URL shortening services, and I’d be keen to hear what anyone else thinks of them. Maybe these are totally useless ideas, but I thought I’d throw them out there. If any of the URL shortening services want to adopt any of these ideas, I’d be delighted if they did. It would make them far more useful, and leverage the data that’s passed through them. If not, I’d be tempted to put together something myself. Shout if you want it.

Awareness is Key to Kicking a Bad Habit

Golf Tips for Web Developers

Yesterday evening I had a pro golf lesson with the very capable David Lavelle. The lesson started off with me hitting a few balls so he could see my swing. Straight away, he was able to tell that my grip needed work and that I was standing too close to the ball.

Within five minutes he was able to show me a new grip, change my stance and correct the distance between me and the ball. It felt a little uncomfortable but I stuck at it.

It made an instant difference. I began hitting the ball cleaner and it flew far straighter then before. It was an amazing feeling to see such an immediate improvement from just a few small tips.

You Can’t Beat Expert Advice

If you don’t know what you’re problems are then there’s no way you’ll be able to address them. Having an expert take a look at my golf swing allowed me to see what faults I had.

Before yesterday, I had no idea that my grip was all wrong. I was also blissfully unaware that my stance was the cause of most of my drives skewing off to the left. So with the new knowledge from the 30 minute lesson I now have an angle to improve my drive and my overall game.

Developers Have Bad Habits Too

The golf lesson and the advice David gave me got me thinking about applying this approach to other aspects of my life, like writing code.

As a developer I’m always looking for new ways to improve my skills. I’m an avid reader of many different developer blogs like Sitepoint, jQuery’s John Resig, and Irish PHP and open source evangelist, David Coallier. I keep up to date on new frameworks and other modern approaches to make my code more readable, scalable and extensible. I also refactor my code as often as possible to prevent it from becoming stale and unreadable. So in general, it’s safe to say that I’m constantly trying to find new and better ways to architect my software.

But it’s not perfect, and I’ve no doubt that I have as many bad habits in my coding style as I have in my golf swing. My recent golf lesson, and the advice given to me by my instructor has made me think about how I could use the same approach to improve my skills as a developer.

Learning to Learn

If you’ve ever heard of the Conscious Competence Learning Matrix, you’ll know that there are four steps to learning anything new. These are:

  1. Unconscious Incompetence
  2. Conscious Incompetence
  3. Conscious Competence
  4. Unconscious Competence

(thanks to Louise from Optimum Training for showing this to me)

This matrix outlines how humans learn. Basically, it highlights the steps taken during the learning phase of anything new. These four steps can be explained as:

  1. We’re unaware that we don’t know how to do it
  2. We’re aware of it, but we still don’t know how to do it
  3. We know how to do it but we have to concentrate really hard to do it
  4. We know how to do it and can do it instinctively without thinking

For me, it’s the first stage that I struggle with. I’m constantly worried that I’m missing something new. That a new framework or a new approach will somehow pass me by and I won’t hear or learn of it.

However, once I do hear about something new, I’ll voraciously pursue it until I’ve either satisfied myself that it’s not relevant or I’ll convince myself it’s the next big thing and I’ll spend time adopting it into my armoury of development tools. Either way, I’m constantly trying to get passed the stage of unconscious incompetence. I’m eager to learn, but I can only learn what I know I don’t know.

Becoming More Open About My Code

I think every developer, myself included, could benefit from expert/peer advice on their own coding practices. Just like in the golf lesson, a 30 minute meeting with another developer could help highlight some weaknesses and help to identify aspects of my coding style that could be changed easily yet deliver maximum impact on the quality of the code.

I’m keen to get this type of advice, as I’m used to working in isolation away from other developers. So to help get around this I think I’m going to become more open about the way I code and start to publish parts of my work so I can start to get some feedback from the community on the most effective way to write software.

Helping Each Other Out

If there are any web developers reading this who would like to discuss their coding practices or get feedback on their approaches to solving the everyday problems of the web I’ll be happy to give my two cents. Email me or leave a comment here.

Microsoft Institute of Technology

Colleges Need To Align To Industry

Microsoft has a tight grasp on Institute of Technologies, and it’s choking the life out of the students.

The vast majority of computer science based courses in Ireland focus largely on teaching Microsoft technologies to the students, despite the fact that they’re only used in niche areas of the industry.

Ever thought about using VB Script as your client side scripting language? Of course not, it’s only supported by Internet Explorer. Want to build a web application powered by Microsoft Access? Don’t even think about it, it’s got a total absence of security features. Oh and it’ll also collapse in on itself with just a handful of simultaneous users. Want to build a web application with ASP? Don’t even bother, ASP is a joke.

Here’s a list of the typical technologies covered in computer science based courses in Ireland right now:

  • Microsoft ASP
  • Microsoft Visual Basic
  • Microsoft Batch Scripting
  • Microsoft Access
  • Microsoft SQL Server
  • Microsoft Active Directory
  • Microsoft VB Script
  • Microsoft IIS

Do you see the pattern here?

Microsoft has it’s fingers in all the educational pies across the country that teach the next generation of IT workers and they know exactly how to maximise the use of their technologies in industry: to get’m while they’re young when they don’t know any better. But the reality is that these technologies are not used by the majority of Irish companies in the web industry. In the job market there’s only a minuscule portion of employers looking for graduates with skills in these areas.

Adjusting for the Industry

For college graduates, the majority are blissfully unaware that they are now armed with a set of useless skills that have no practical use in the real world. It’s only after a few job interviews and a rude awakening do they realise that the last four years has been spent learning skills that are worth almost nothing in the work place. They now face the long hard struggle of relearning everything all over again, getting to grips with the actual technologies used in the industry.

Here’s what that the above list should have looked like:

  • PHP
  • Java
  • Perl
  • MySQL
  • Oracle
  • JavaScript
  • Apache

But it a seems that unless you can provide lucrative course sponsorship or another similar type of sweetener, big businesses such as Microsoft, will win the syllabus wars over open source technologies for as long as colleges find the lure of the greenback more appealing then providing their graduates with real industry strength skills.

Better Doesn’t Mean Harder

Learning the industry standards, isn’t any more difficult or doesn’t take any longer then learning the poorer Microsoft alternative. It simply means a shift in the content of the course syllabus. Why spend time learning ASP and Access powered web applications when you could just as easily learn how to make a scalable, well structured PHP, MySQL powered web app? It makes no sense.

Calling All Students

If there are any students reading this doing an IT based course, then please consider going to your course director tomorrow morning and ask him/her why there are so many irrelevant Microsoft technologies taught in your course and request that a larger emphasis be put on open source technologies instead. It’ll save you having to relearn what you thought you knew, on a platform that’s actually used in the real world.