Tuesday, September 29, 2009

My StackOverflow DevDays countdown app - Version 3

We'll now I'm at version 3.0 of my countdown app for DevDays it should be ready for use ;)

For reference:Version 1 - Version 2

This version was created to address the follwoing issues:
  • Optimized for screen resolution of 1024x768
  • Fixed issue with calculating displayed tweet display height
  • Removed hardcoding of sponsor images - they're now loaded from a 'Sponsors' folder on startup. This is to enable easily adding new ones.
  • Removed hardcoding of tweets displayed when nothing new tweeted or no internet connection available. - These are now loaded from an XML file. This allows customisation of the displayed messages.
  • Defaulted start time to countdown to 9am if started before then. If started after then the timer defaults to 5 minutes. (This only applies if no cmdline parameters passed.)
  • Fixed the order that tweets are loaded so oldest are shown first.
  • Fixed positioning of twitter profile images.
  • Also a few other minor fixes.

Source - Compiled binaries - Installer

Now it's even better, please vote for it. ;)

Thursday, September 24, 2009

Ten reasons web developers should be considering developing for the mobile web

Excuse the roughness of these notes but I thought I'd post this list I had hanging around.

1. More people using it
  • More than before
  • And they're using it for longer than before
  • Globally more people access the internet from a 'mobile' than a 'PC'.

2. Bigger screens
  • Have made mobile browsers easier to use
  • Enable a better experience by allowing the viewing of more than just simple text.

3. Better browsers
  • Can render as well as some desktop browsers
  • Even with flash support
  • Silverlight mobile coming (apparently)

4. Can get 95% of devices with a single output format

5. Cheaper & easier to do than probably think
  • It's not as complex as having to develop WAP (anymore)
  • Tooling makes it easier

6. Transcoders aren't good enough as don't consider context

  • You can create a better experience if you target specifically to the mobile environment, rather than just rely on a machine trying to guess at what would be best.

7. Wide variety of tools to help you

8. Big companies thing it's important
  • Eric Schmidt (Google) - "Mobile devices are the most important technology of all."
  • Eric Schmidt (Google) - "Google's future depends on the next internet, on cellphones."

9. Provide new ways of interacting with existing users and opportunity to reach new ones
  • New ways to build community
  • New ways to build loyalty
  • New ways to make money

10. You already do (or should) variations of your site(s) (for accessibility)
  • WCAG
  • Section508

Unit testing has it's place

Joel just published this: The Duct Tape Programmer
Go read. I'll wait.



In it, amongst other things, he seems to come across as saying that unit testing isn't worth it because it doesn't help you ship code/a product/a feature in a really short time frame.

But that's not the point.  Unit testing helps improve code quality by preventing bugs over the long term.  The value of unit testing is in the long term.

In the short term it's often better to have software with bugs in than no software at all.  This can help you beat a competitor to market or win that big new contract.
In the short term you're not worried about making a change to one part of the system and inadvertently breaking something else (which automated testing is really good at identifying) because you're not making changes, yet. You're just writing the initial version.

But, in the long run, if you want to keep that market share and avoid losing customers to a competitor with a more reliable product you need to make your software more reliable and contain fewer bugs.

In the long run unit testing will save you time (well maybe not you directly but the development/testing/QA team as a whole). That's the value of unit testing - over the long term.

I've previously written about the value of unit testing here.

Wednesday, September 23, 2009

I should hope you think it's slick - I was aiming for F***ing Amazing!

WARNING - this is likley to be controversial. But I aim to promote discussion as much as anything else.

I responded to a request for an application to do a simple task.  One of the comments on my app was "Very slick".  This is of course flattering, but it says a sad thing about software development in general : mediocrity is standard. Fortunately this, hopefully, won't remain the case:

Why would I (or anyone) submit an application which was adequate? What would be the point of half hearted effort?
  • Seriously, I don't know.

Yes, with version 2 of my DevDays app, I've gone beyond the original requirements. But why would I (or anyone) do this?
  • Because just doing enough isn't going to stand out!
  • Because just doing what anyone could do isn't going to stand out!

But isn't that doing unnecessary extra work? Who's going to pay for it?
  • The trick is to provide a lot of value for a little extra effort. It's paid for when that work gets you great recommendations and future business.

In my app I've added 'Twitterfall' type functionality. This was relatively simple to add through the use of the TweetSharp library.  The value it adds to the application is great. It turns a passive application into an interactive one. Plus it's a boost to me: I got to try out a new library; I got to interact with Joel and received a boost in confidence that what I had created was good; plus I got some subject matter for a blog post.

Before I go on:
  • Yes, I know there are times when there really is no need to do more than the absolute minimum.
  • Yes, often there are other external pressures.
  • Yes, often a client may have a limited budget.
  • Yes, a client may want a very specific thing and not be interested in it being the best it can be.
  • Yes, there are probably lots of other resons not to do this - but I'm being idealistic and this is my blog so I'm allowed.

Anyway, what was the point of all this? Oh yeah.

I want to make applications that are truly great and people enjoy and want to use.

I want to immitate someone who was actually a master craftsman who worked with wood. (He was more than just a famous carpenter.)

I want to put effort into what I'm doing and do the best possible job.

I don't want to make software people complain about at work when they compare it to the software they use at home.

I don't want to make a second version of a piece of software for someone because there was a clause written into the original contract that means they have to come back to us for future versions. I'd much rather write the first version of a piece of software and hand over the source code to the client (so they can get anyone they want to make the second version) but still have them come back to me to make the second version because they were impressed with what they received the first time.

I don't want to make commodity software. I don't want to be a commodity developer!

I don't want to make average software. I want to make great software!

This isn't just idle claims. I've actually been putting this into practice with a recent project.  It was a common scenario: Large project and only a fraction of the time needed to complete it to a decent standard.
I saw two options: 1. Work at a reasonable rate and if everything went well end up with something that may be barely acceptable. or 2. Go above and beyond and create something I could be proud of.

Due to a unique set of circumstances (mostly my wife having arranged to visit her parents for two weeks with our son - so I was home alone) I was able to select option 2. Also, fortunately, the requirements of the project were an almost perfect fit with my skills (Windows Mobile, WinForms (desktop), ASP.NET & WebServices) so I stood a reasonable chance of being successful.
I decided that if I was going to undertake the project it was going to be as good as I could make it. This was as much to prove to myself that I could make some thing great in the time available as it was to deliver a great solution.

Yes - I made it very clear that the extra effort was a one off and not indicative of what could be expected in the future. That this was an exceptional level of effort was repeated back to me subsequently by the appropriate parties so I think I got this across.

I should also point out that the project (which I'm not allowed to talk about) was something very cool and something I wanted to see succeed.  The deadline was for a pilot/demo which would be visited by many potential customers. The purpose of the demo was to prove that the technology worked and win, potentially, very large contracts.

So for the 2 months up to the demo I lived the project. It seemed like every waking moment was spent thinking about it, and even now find myself thinking about the next stage - which isn't what I'm working on. And I did loads of overtime (over 100 hours - all unpaid). This included an all nighter after the event when the client moved the deadline for the post event data analysis. I worked through the night (well I had one hours sleep before going in to do anohter full days work) because I didn't see the point in goign to all the effort before hand to make the demo work only to not be able to prove what we'd done.  If you can't (accurately) report on what the system did, did the system really do anything? Was it all just smoke and mirrors?

When it came to the demo:
  • the customer was very impressed as what I delivered was better than they had hoped for.
  • there were a couple of minor bugs, but because I was there I managed to find workarounds - so no big deal, considering.
  • the users of the software were initially wary but after a short time prefered working with the application and didn't want it taken away after the demo.  They were also more productive with it.
  • the potential customer we wanted to impress, were very impressed.

So was it worth it?
  • I was happy with what I achieved.
  • The client was impressed.
  • The potenital customers were impressed (and some have already signed some big deals).
  • I think, my boss was impressed.

But was it worth it?
I think so. I wanted the project to succeed and was only interested in being involved if it could be really good. (In retrospect I think I only managed to reach the level of 'barely acceptable' by my standards - but these are very high.)  Yes I had to work very hard, but it was better (in my mind) than having just created something average - again.

What if I hadn't gone 'beyond the call of duty'?
- Because of the tight schedules I was keen to see how much I actually got done in a realtively short period of time. I was also keen to know exactly how much time I spent on the project. So I recorded (admitedly only in a basic way) how I spent my time.
In my estimation, if I hadn't put the extra time and effort in, the amount I would have got done would have meant that: there would have been some fairly essential functionality not there; the look and feel of the applications would have been much poorer; there would have been more bugs; the last minute changes that were necessary to actually do the demo couldn't have been made. All of which means (by my reckoning) that if I hadn't put the extra effort in the demo wouldn't have gone ahead.  This would mean that the sales people wouldn't have had anything to show. They would have had a much harder job convincing the potential customers to but their business in the hands of a system they couldn't even see demonstrated.

Yes, I'm sure that if it was necessary some kind of limited demonstration could have been put together - instead of the full working system I created.
No, this isn't a dig at the sales people - it's just an observation that it's much easier to sell something if you can show it working, and working well.

So what did I learn from this:
  • Making something great was worth it to the business.
  • I am actually very clever and can make the applications I always knew I could.
  • I REALLY don't want to work to that level again. (At least not without some serious reward* and only if the impact on family life can be minimized)
  • Some other things it doesn't make sense to talk about here.

* Part of the reward in this case is me being able to say "I made that". - At least I will be able to say that when I'm allowed to talk about the project. ;)

Other thoughts:
  • This is only possible if developing for someone who wants to make a great system
  • I suspect it would be MUCH harder to create a truly great system without a very itterative process.
  • Part of the reason that the client was so happy with what was delivered was "exactly what they wanted" not what they actually/initially asked for. I can see 3 reasons this was possible:
  1. I had good knowledge of the application domain. (Another reason I was excellently suited to the project.)
  2. I spent a lot of time talking direclty with the client to confirm exactly what they wanted and discussing possibilities.  I suspect that if these communications had gone through other parties at least some of information would have become confused or lost. (Time constraints meant that there wasn't time to formally spec everything prior to development. - For the demo version only. This isn't a good way to build large, long lasting, reliable software.)
  3. The original 'spec' had reporting as a 'wish list' item. My experience taught me that it was actually essential and internally I promoted this to an 'essential' deliverable.  - I was working on the basis that if you're going to be showing & trying to sell something to people who are only interested in the data that comes out the backend it helps to be able to show that data.  Not only did I show the data but also put it in nice graphs (which everyone deemed was more than they could hope for - I consider that a Saturday well spent).  As I sat in on some of the sales demos, I saw jaws drop in amazement and wonder as we were easily able to show and explain trends in data that no-one had previously been able to even capture.  - I suspect that making sales is much easier when you've been able provoke that response.

Side thought: Is making boring, unremarkable software one of the reasons that many developers don't stay in the industry for a long time?

Yes, I have been influenced by Hugh Macleod and his book.

My StackOverflow DevDays countdown app - Version 2

Based on the announcement that my devdays app will be used in an environment where there is internet access available, I've updated to include the TwitterFall-esque feature that I originally removed.

It now looks like this:

The difference is the twitter messages displayed at the side.  These are looked up based on a search term specified in the config file.  If there are no new messages to display or it's not possible to reach the internet (network down, etc.) then one of an assortment of programmer related quotes is displayed instead.

The processing of commandline parameters is also improved.

Now it's even better, please vote for it. ;)

Source - Compiled binaries - Installer

Tuesday, September 22, 2009

Monday, September 21, 2009

Holiday scam? - 0800 988 9900

Incase anyone else receives a call saying they have won a holiday after completing a questionnaire over the phone:

Just had a phone call telling me I'd won a holiday after answering a questionnaire over the phone - I never do and find polite ways of hanging up on market researchers.

Using a technique which just sounds really suspicious, they told me I'd won a holiday for 4 to a European destination which I could take in the next 18 months. I just had to call a number they gave me (0800 988 9900) and quote a reference. When asked why, they said they weren't legally allowed to ask for my address!? and I had to call some other department who would take my address details and send me some information. They also (indirectly) said I had 5 minutes to make the call as the department closed shortly (called at 19:55 and said shut at 20:00). - This may have just been coinsidence though.

It sounded REALLY dodgy - so I did what all geeks would!

From the results of the search here: http://www.google.co.uk/search?q=08009889900 I won't be following up and I'd think twice before you did too.

Do people really go for this? - The psychological tricks seem so basic!
Are people more likley to fall for this in a recession?

Monday, September 14, 2009

My StackOverflow DevDays countdown app

In response to Joel's request for an application to use as a countdown timer for StackOverflow DevDays, I have created this little app.

Here's a screenshot:

Obviously the design is highly inspired by the website. But I never claimed to be a great designer.

I had a couple of other thoughts about a screen design but liked the simplicity of this one and the ability to maintain the branding.

Obviously, I like the idea of this app being used at the conference but I also saw it as an opportunity to try and do some animation with WPF. (I've only written minimal XAML previously.) While I'm sure that this could be written in much less XAML I'm quite happy with it.

What the above image doesn't show is that the black and white city images scroll in the background and the sponsor images slowly fade in and out - showing one at a time. Also when it starts the different screen elements slide and/or fade into position. Then, when the timer runs out they slide back out as the screen fades to black.

Originally I was going to have a twitterfall type element showing latest tweets at the side of the screen where speakers are shown on the site. Unfortunately as there is no guarantee of internet access when used I left this out.

Here's a video of it in action:

Hopefully you like. If you do and are a StackOverflow user why not vote for it. ;)

Source - Compiled binaries - Installer