# Tuesday, June 16, 2009

Questions every team and dev lead should ask themselves

Pearls of wisdom from Roy Osherove.  I've had a similar list in the past so this is a great reminder to 'keep improving'.


posted on Tuesday, June 16, 2009 7:39:30 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Thursday, July 17, 2008

Getting into IT? - Get into Usability

I've been tailed by a graduate this week (who's very switched on), and in talking to him it became apparent that as part of his rotation activities he'd been sitting in on some usability testing and interviews with users.

It struck me that this sort of experience will be incredibly valuable to him in years to come as he's forming many of his norms and opinions about the IT world right now and to start off thinking about 'what the user needs' is not a bad thing!  I know I was first subjected to the partisan stereotype of users before making up my own mind that the reason many projects fail is because many programmers don't understand basic usability concepts.  I felt I needed to understand more.

Part of the problem is that all too often companies shortsightedly exploit their new and junior starters.   If you take the example of a kitchen hand in a 19th century mansion, you'd walk in through the door, and be ushered past many rooms filled with things you're not allowed to experience - past the ladies doing embroidery, the gents in the den smoking cigars and drinking brandy.  Before you could ask any questions (some of which may be quite insightful) you're locked in the kitchen washing dishes!

IT and programming is still mistakenly viewed as a 'back room' function in many places, and thankfully my current organisation has the forsight to expose new people to things that are ultimately going to make them more valuable to the company.  Learning about usability is fundamental to understanding what makes systems work well, and also being able to address those that fall short, so the earlier you start, the better.

posted on Thursday, July 17, 2008 11:34:15 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Friday, June 06, 2008

Visual Studio Documentation - Have your say

Brad A's just been highlighting the MSDN Survey to get opinions on how Visual Studio and MSDN documentation works (or doesn't) for people.  I added my 2c and it made me think a little about how I access 'help' these days.  Here's what I wrote in the 'other comments' (Q 14 I think).

I generally access MSDN content through google (as it's quicker than accessing the MSDN site, waiting for it to load the TOC, then searching).  It's probably testament to the indexing of the site that a search such as "msdn Path.Combine" will take me straight to the specific page I 'know' I'm looking for.  I guess this means I've got some knowledge of how things are structured and I use that to good effect.  In a simple comparison...

Local Help
Typing Path.Combine into VS.NET code editor - selecting the text and hitting F1 came up with a false start (my current machine doesn't even have the docs installed apart from Enterprise Library 3.1.  It did find some less than useful reference from EntLib!).  I went to Help options and chose 'use online first', and tried again (incidentally I didn't even realise you could pull in your own list of sites to search (Codezone community) - cool).  It chose a different 'Path property' first and took about a minute in total to get to the right 'Path class'.

MSDN Library Site
Opening up the MSDN site (which still feels too heavy in my book - and now curiously like BBC news) and searching for 'Path.Combine' took about the same time (1 min).  This includes opening the browser, loading up the MSDN home page, searching, clicking the first item in the search results, and loading that page.

Google search on MSDN
Opening up Google (admittedly my home page - but I'm looking for speed here) and searching for 'msdn Path.Combine' took 20 seconds.  The first item in the list was what I wanted so got straight to it.  It's also worth noting that Google's become a little fat puppy too with all my iGoogle stuff on it, but it's still way quicker than any of the alternatives.

 

posted on Friday, June 06, 2008 4:44:22 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Sunday, April 13, 2008

How do you 'rate' a developer or team lead?

Just going through some old notepads from previous employment and found a table that I'd come up with to 'rate' all the developers in the department (I was a team lead there at the time - I also rated myself and the other team leads).  The purpose was to effectively work out who to put where - i.e. what teams.  It's pretty a simple process, and is essentially a straw poll on some high-level KPI's, but assumes you're experienced, and 'pretty good' yourself, and can recognise/score people objectively and consistently.  If you let personal preference get in there then your results mean nothing.

Each person is scored on 4 categories as some may be stronger in different areas.  Each score is on a scale of 1-10, and the scores are simply added to get the overall rating ( out of 40).  You can obviously make this a percentage etc if you wish.  You could also apply an average to scores given by multiple people.

Developer Categories:

  1. Ability. Raw development ability.  Can they achieve a technical solution?
  2. Discipline. Their 'normal' work practice.  Do they take pride in their work?  Do they lead others in the processes they follow?  how do they work when unsupervised?
  3. Commercial Focus / flexibility,  When faced with a deadline or changing scope do they cope?  Do they think creatively and work with others to keep things on track, potentially adding commercial compromise into their original design?
  4. Control. How do they work under pressure? Do corners get cut, do they fall to pieces, or do they rise to the occasion? 

Team Lead (Technical) Categories:

  1. People leadership. How do they treat their team members?  Do they instil confidence and inspire their team to achieve?  Does their team 'like' them? You have to be careful with the last one, because on its own it shouldn't give a big score.  It's the icing on the cake rather than the meat in the sandwich!.
  2. Getting Stuff Done.  Do they get results?  Does their team get results?  Do they deliver regardless of obstacles and issues?
  3. Upward Management. How well do they communicate changes, issues etc to managers and stakeholders?  Do they 'sit' on issues and hope they'll go away until they 'blow up'?

  Team leads can obviously be rated as developers too...

 

posted on Sunday, April 13, 2008 11:21:33 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Wednesday, February 20, 2008

Top 10 Application Design Mistakes

Got sent this from a usability guy I sit next to.  Looks very interesting and a lot rings true.

 

posted on Wednesday, February 20, 2008 9:36:54 AM (AUS Eastern Daylight Time, UTC+11:00)  #    Comments [0]

Do Web Sites need to look exactly the same in every browser?

It's on the internet so it must be right ;-)

http://dowebsitesneedtolookexactlythesameineverybrowser.com/

Does that mean I can go home now?

 

...but seriously, it does make you stop and think a little and get a bit of perspective

posted on Wednesday, February 20, 2008 7:52:20 AM (AUS Eastern Daylight Time, UTC+11:00)  #    Comments [0]
# Friday, January 25, 2008

TDD Anti-Patterns

I Like this.  Have seen most of them (and probably been guilty of a few a while ago...)

I suggested a couple of others...

How about the ‘Stealth Bomber’. This is probably an extreme extension of the Hidden Dependency. I’ve seen a few tests that would simply ‘never’ fail when run interactively or debugged, or during a full test run in the day. When a supposed ‘fix’ was implemented it would even fool the developer into feeling pleased with themselves by passing for a day or two before bombing again in an overnight run. The logic wouldn’t show anything untoward, and it continued to bomb every few days without warning or trace of ‘why’. More than likely a group of no-no’s of execution sequence-dependent, date/time-dependent, database-dependent, context-dependent etc.

There’s probably another variation - maybe the ‘Blue Moon’. A test that’s specifically dependent on the current date, and fails as a result of things like public holidays, leap years, weekends, 5 week months etc. This is again most likely guilty of not setting up its own data.

posted on Friday, January 25, 2008 12:55:34 PM (AUS Eastern Daylight Time, UTC+11:00)  #    Comments [0]
# Tuesday, January 15, 2008

Scheduled Shutdown and Wake Up (on LAN) - Part 2

After the first post I've been doing a bit of experimenting with my work machine (new) and also at home (old).  We're all grown ups here so I'm not going to include many screen shots.  Hibernate seems the best option to me as it gives you the most options.  Maintain your state and when you power on, you're back to a 'locked' logon, meaning that even if you decide not to do an automatic wakeup (or your system simply doesn't support it), then your boot up time's likely to be less than a minute in any case - so who cares!

I wanted that extra bit of convenience, so I've got a scheduled hibernate and wakeup now working at work and at home.

As a side note, I love keyboard shortcuts, and so here's a list of shortcuts to Control Panel dialogs.

The procedure for hibernation is the same for all machines, but the wakeup will vary from full support to no support...

Hibernation
  1. Enable Hibernation through Power Options dialog in control panel (Hibernate Tab). Start--> Run --> powerconfig.cpl
  2. If you have 2gb of RAM or more download a Microsoft HotFix from here and install.  Hibernation won't work without it.
  3. Open Device Manager (Start --> Run-->devmgmt.msc) and open the properties of the Network adapter you want to use to control the wake up
  4. Check the 'Allow this device to bring the computer out of standby' box (Power Management Tab)
  5. Ensure 'Wake Up Capabilities' (Advanced Tab) is not set to disabled or none.  Each network adapter will have different capabilities.  The work machine has (Both, Magic Packet, None, Wake up Frame).  The option was already set to 'both' so I didn't make any change.
  6. Create a new scheduled task (Start --> Run --> control schedtasks) called Hibernate with the following in the Run box...
    C:\WINDOWS\system32\rundll32.exe  powrprof.dll,SetSuspendState Hibernate
  7. Go to the Settings Tab, and configure the idle time (if necessary).  I configured the following (which seems to work OK):

    Most of the risk of losing stuff is mitigated by doing a hibernate over a full shut down in any case.  I haven't tested whether the idle time recognises non-UI processes - e.g. say I'm encoding video.  I guess I'll find out one day...
  8. Schedule the task to run at a time when you're comfortable to switch off every day (taking any overnight processes like backups or defrags into account - maybe bring those forward) - remember 'any' time your computer is powered off is a good thing.  I've got the work machine set to go off at 18:00, and the home machine to go off at 23:00.
WakeUp

The work machine (Dell Precision 690 Xeon 3.2ghz, 2gb RAM) responds quite happily to the following :

  1. Create another scheduled task called 'Wake up' (or something equally innovative), and put literally 'any' command line in.  I just fudge the following as it will exit once finished...
    C:\WINDOWS\SYSTEM32\cmd.exe /C dir (This just opens a command shell - runs a dir then exits)
  2. Schedule this to run 'just before' you think you're going to need it every day.  I get in early so the work machine comes on at 07:25 and I don't need the home machine until 19:00 after the kids are in bed.

The home machine (can't remember the spec - but it's older - circa 2004) - the case is actually a 'lot' older, (but recycling is another thread) won't respond at all to the wake up scheduled task, and so based on the C# code posted previously I created a LANWakeup console app (there's plenty of other ones kicking around) to send a magic packet to the MAC Address of my home Network Adapter.  I'll update the post to include this... 

This is then scheduled on my 'other' home machine at 19:00, and this works fine.  The only problem of course is that I then can't turn 'both' machines off overnight as something needs to be 'on' in order to send the wakeup.  The other home machine is also older than the one I've got hibernating and it would need to be 'remotely' woken up too.

Troubleshooting

If you try your hibernate task and it comes straight back on, then it's responding to other network traffic (which happens with some machines apparently - the home one experienced this but not the work one).  In this case do the following:

  1. Go back into Device Manager and the 'Power Management' properties of your Network Adapter, then check 'Only allow management stations to bring the computer out of standby'.  This seems to help the adapter ignore general broadcast traffic and only respond to specific wake up requests (worked for me anyway)

New machines (last 3-4 years) are almost certain to have wakeup capability in some shape or form.  The newer the machine, the more likely it's preconfigured in the BIOS.  If wakeup isn't working in any way then you'll need to go into the BIOS on startup (Del / F2 / Ins - etc) and look for Power Management options.  The previous post had a link on BIOS setup.  If you're dealing with more 'vintage' kit then you'll have to resort to the on-off button to wake the machine up, but I kindof like the idea of that, and may ditch the auto-wakeup in time, as it's a bit lazy really!

posted on Tuesday, January 15, 2008 10:39:42 AM (AUS Eastern Daylight Time, UTC+11:00)  #    Comments [0]
# Wednesday, November 28, 2007

Home office with how many screens?

This is obviously what happens when you get really serious about technology like Mr Hanselman and want to work remotely...

posted on Wednesday, November 28, 2007 9:30:30 AM (AUS Eastern Daylight Time, UTC+11:00)  #    Comments [0]
# Tuesday, August 14, 2007

Agile Processes at work

This excellent post from Jake Lawlor's a great practical guide to applying agile processes in the real world. 

This isn't new thinking by any means, but when trying to coach others and improve your own processes you find surprisingly few practical reference points for applying agile processes into actual organisations.

posted on Tuesday, August 14, 2007 8:03:57 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Thursday, June 28, 2007

Learning through Anti-Patterns

I was gaining much (renewed) amusement through anti-patterns the other day when I took a look at Scott's blog on 'real world' development approaches, and subsequently dug a bit further on management and development anti-patterns on Wikipedia.

You can also find a bit more info here.

It then struck me that although these are absolute classics that we've all seen (management ones 'all the time'), I probably don't know any developer (including myself) that could truly say they've never been guilty of at least one of these.  I'd go further and say that some of these anti-patterns can form an effective apprenticeship for software development, as you really need to know what not to do as much as what to do in regards to design and coding approaches.

  • Who hasn't hard-coded?
  • Who hasn't read an article on some cool way of doing things, then taken it all out of context and ended up doing something like error hiding, or mistaken delegation for poltergeists?
  • Who hasn't thought (eugh - a world of pain will ensue if I try and get rid of this code) - the lava flow.

I could go on all day here as 'so many' of the Wikipedia anti-patterns ring true as something I've encountered (and still encounter) along the way.

Ultimately none have killed me so I guess therefore have made me stronger and hopefully a little wiser on what not to do.

posted on Thursday, June 28, 2007 12:03:16 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Wednesday, June 13, 2007

Signs of Discontent? - Increased Food and Coffee

I like observing human behaviour at work and I've noticed recently that the amount of 'junk' food appearing in the dev pod has increased quite a bit.  People are also going for more coffee breaks (as far as I can see).  I may be imagining this, but I think it's probably a good indicator of any or all of the following:

  • Boredom
  • Lack of enthusiasm for the current work
  • Need for stress relief (mucho long hours)

I'd have to admit the current project has its frustrations (integration work with a 'less than extendable' 3rd party product) and I'd probably rather be doing something else - so I'll keep my eye on this and see what happens when the supplies run out!

I think there's a bit of synergy here with the triangle of happiness.  My own experience is if you're happy and engaged in what you're doing then you often don't even find the time to eat..

posted on Wednesday, June 13, 2007 8:22:56 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Saturday, July 02, 2005

Business IT - Art or Science?

I seem to be getting a little more philosophical these days....

I believe most serious and proficient programmers see programming as more of a science than an art.  I think the best and most practical 'Business IT' programmers regard programming as a both a creative and scientific occupation.

We (as programmers) can fit into several categories. 

  1. The hard core techy who still wouldn't look out of place at an 80's Microsoft staff party.  They're almost certainly male, and see computing (not IT) as a science which should ideally be funded by a bottomless government grant.  These guys don't allow themselves any technical option other than the Rolls Royce.  Their daytime (and night time) occupation involves a keyboard and an mouse.  These people are also not primarily motivated by money.
  2. The hippy programmer who's talented but a bit lazy, and always has a conflict of interests.  They'd rather be off surfing than tapping away at a keyboard but they find they strangely miss the creative outlet when away from it for too long.  They're probably more interested in the business than the IT, but that may depend on the industry.  Banking will probably turn these guys off!  They're interested in IT as it suits them as a day to day thing.  They're mostly interested in just having enough money to support their lifestyle outside of IT.
  3. The business IT professional who's probably a jack of all trades and potentially master of most of them.  They're confident in their technical ability, but are still not quite as comfortable in the 'business' arena.  They want to understand the business but don't want to be bound by it.  They're often frustrated by the commercial compromises they have to make to their 'elegant' solutions.  They're motivated by a combination of money (good market rate), people they work with and the work they do.

These are obviously generalisations and also an incomplete list, but I certainly know more than one person 'clearly' in each category.  A lot of people may have elements of each character (I do).

I think those that recognise business IT as a combination of art and science are probably on the right track...

posted on Saturday, July 02, 2005 7:23:45 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]
# Sunday, May 22, 2005

The Quest for Business Value

I've been thinking about Business Value recently. 

We can all go through our IT lives (in big non-IT companies) and get lost in the sea of people, levels of management and bureaucracy that leads to our contribution feeling a little insignificant.  A characteristic of this is that as long as we do 'enough', we're consistently insulated from the people with the money and the 'actual' business drivers for the projects we work on.  This ultimately leads to a lot of people thinking they're great programmers and great providers of business value (as projects come in roughly on time  - sometimes, and we all move on). 

Unfortunately, the case is often that great programmers don't have 'great' support in terms of interpreting the original business need.  The levels of management and people can easily blur the picture and lead to incorrect requirements. 

We've all had the frustrations of companies that persist in 'throwing money out of the window', and we all think we should be taken more seriously.  Are we kidding ourselves a little however, in that we think we can handle anything, but when faced with a senior manager who needs a rapid result for a focused business idea - we're completely lost?

I think there are two main groups of people to look at here (I don't normally like to use the us and them thing but...)

Us (Programmers)
Them (The guys with the money)

Us
Apart from being the single most adaptable role in IT (which is a generally underrated thing) we're
normally more focused on the technical solution rather than the business requirement.  We have to be coaxed into thinking the other way, and then we consider it an obstacle to compromise our perfect solution!  We usually forecast that our solution will also positively affect the bottom line in a big way as we have to 'quantify the benefits' in order to get the project approved!  If we really understood the business goal in the first place we might 'actually' be able to do that.

Them
The guys with the money often don't want bells and whistles.  If they end up with great software that
everyone loves it's a complete bonus.  What they actually want is something to 'do the job', whatever that may be.  We're turned on by IT, because it's more than just a job to us.  Not everyone is however!  If it's not fantastic but it's not costing the company money then it's usually OK.  Expect to be supporting it until it breaks in a big way!

Where do Business Analysts fit?   If you actually have these people around then they're potentially the most important people to ensure that the business and technical needs of a project are balanced correctly.  In my experience however, this is a role that few people succeed in, as they naturally lean more one way than the other, and the programmer ends up doing the job (badly) anyway.

So where does that leave us?   We (as programmers) then take up the challenge to run with requirements gathering etc and focus entirely too much on the technical (because that's what we do!).  We can then easily lose sight of the business value. 

This raises another 2 questions :

Is it up to 'us' to raise our game and be more considerate of business value?  OR
Is it up to 'them' to learn a little more about how IT works and meet us half-way?

I think IT's been around long enough now for everyone involved to be considerate of their role and how it either affects or requires their organisation's technology.  I know this isn't the universal reality but one has to be optimistic!

In order to be a truly 'useful' programmer (in a business environment), I think you've got take it on the chin and make a concerted effort to understand the high level business goals before jumping into the technical detail - or go and get another job where you can get lost in a sea of people and red tape and not have to worry about it

posted on Sunday, May 22, 2005 7:22:32 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]