Menu

IT Musings

Something that’s interested me for a long time is what makes people tick, as far as motivational factors in the workplace. We all spend a long time in our respective workplaces, and how you measure your relative happiness is an interesting, and individual thing.

The triangle of happiness

I’ve grossly over-simplified the factors down to three measures that I’ve been banging on about for the last 10 years, after a conversation with an old friend and colleague. I’ve always known it as the ‘triangle of happiness’, and it looks a bit like the image to the left…

If you’re comfortable with 2 of the 3 factors, then you’re doing OK. If you’re not happy with 2 or more factors, then it’s potentially tipping the balance on your overall job satisfaction, and your engagement/willingness to stay in your current position or company.

You may find that you’re more than 3-dimensional, so I used the ideas mentioned above, along with some inspiration I got from Scott Hanselman and his KeysLeft 1 page app, and I came up with a 1 page web app for you good people to model your job satisfaction.

It was also a good opportunity for me to have a play with KnockoutJS, the Foundation framework, and a few other bits and pieces. It’s still rough around the edges, but I’d appreciate any feedback, so I can improve it in the future.

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.

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 HelpTyping 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 SiteOpening 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 MSDNOpening 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.

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:

Ability. Raw development ability. Can they achieve a technical solution?

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?

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?

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:

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!.

Getting Stuff Done. Do they get results? Does their team get results? Do they deliver regardless of obstacles and issues?

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’?

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.

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

Enable Hibernation through Power Options dialog in control panel (Hibernate Tab). Start–> Run –> powerconfig.cpl

If you have 2gb of RAM or more download a Microsoft HotFix from here and install. Hibernation won’t work without it.

Open Device Manager (Start –> Run–>devmgmt.msc) and open the properties of the Network adapter you want to use to control the wake up

Check the ‘Allow this device to bring the computer out of standby’ box (Power Management Tab)

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.

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

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…

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

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)

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:

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!