Concepts Weird Insights

Human Efficiency Metrics – Office Productivity coding with impact

How to use Windows Hooks to generate statistics on user behaviour to identify bottle necks in daily work producitivity.

Got Java or .NET coders hanging around and working on Windows? Maybe it’s time to run an Office Workflow Optimization Hackaton. This article features how to leverage the Windows Hooks COM-libary to measure and improve bottlenecks in the office environment.


“A set people in football outfits and a ball don’t make a football team.”

In the very same way buying and installing a set of 3rd party software tools doesn’t create an excellent work environment. It goes even deeper. Your employees are your stakeholders, too. They deserve the same engineering and design thinking talent to provide the best office experience to succeed as your customers do.


Building metrics based on which application is running as primary thread.

Nothing is simpler than recording the current active thread by running a timer and grabbing the active thread to analyze it later. This gives way for some very crucial metrics.

Issue 1: Time Eating Applications
We are focused a lot on increasing workflow efficiency in an environment where users interact with many Desktop applications. This included Outlook, MS Access, Excel, Powerpoint, Explorer, PDF files, CSV files, batch scripts, etc.
Our vision is to add functionality to these programs by providing very simple and intuitive ways to interact with these programs and by adding functions that aid processes these users perform. We really hate repetitive work, too many required switches of a mental model when the user changes an app or has some steps to take to get from A to B.
But we only have very few IT developers. So we need to focus our effort. How? We look at which applications are running for the longest time everyday throughout the co-hort and then work with the users to enhance their applications. How do we get this data? By measuring the primary active thread in Windows and looking at histograms. This gives us a lot of props from our internal users / clients.

Issue 2: Brain-Fucking Processes
Naturally, patterns emerge when we look at the time-series of active programs. It could look like “Office -> Explorer -> Specific Folder -> Excel -> Outlook”. Someone just copied and pasted data from an Excel file. Now observe the cohort long enough and you can map these sequences to specific processes. Which processes take the longest time? Naturally, those won’t be the ones paid for the most.
Having identified terrible processes, we can start analyzing how to improve the process. Let’s say someone asks a question about a product and this product is described in an Excel file. After our work, the user copies the Identifier for the product into clipboard, presses a key and the program uses an OLEDB connection to the file to extract and reformat the data and enters it where the user set the curser. This just reduced a task from 2 minutes to one that takes 5 seconds. More important, the mental brainfuck that opening the explorer, browsing to the folder, opening the Excel file and getting the data and reformatting it produces is gone. We believe to have saved 5 minutes of productivity by writing code for 20 minutes. Assume this user does nothing but this all day long, we just reduced his daily workload from 8 hours to 3 minutes.  And since this user is an expert in what his client demands, we were able to talk with him about client satisfaction and how to improve the client experience of us as a data provider.

Issue 3: Reducing user behaviour that doesn’t add any value
Assume that individuals can be categorized into two cohorts A and B. A are checking their e-Mails every two minutes. The others are doing it three times a day in a block. Time to either do a seminar on effective usage of communication system to reduce the mental brainfuck produced by opening Outlook every two minutes or the process is bad. If a user for instance needs to react to specific news within a given time-frame, we simply extract this news from his Outlook application using a on-screen notification system as you know it from Bootstrap. If this user works together with 5 other people in the same function, clicking this notifcation colors the message so the user knows someone else is looking at it. We just reduced a shit-load of time wasted by having to open Outlook all day to just see nothing has happened. And we saved even more brain-fuck. The time saved usually is spent on more office communication and more time for project-work. Win-Win.

Issue 4: Applications not written for users
Not every user is suited similar to his co-workers in using Software. We believe Software should be written for the dumbest users. So we find them and help them. How? We stated we can identify processes and application usage. With both at hand, we know how many processes that employ a set of applications a user performs. If the time he takes to perform a process is longer than average, we find him and find where particularly he is so bad. Once we know where and why he is bad, we ask him: How can be improve this for you. At the end, we will provide some functionality or change the user inteface completely, until the user becomes a key promoter of our Software. Which increases demand for our cool skills.

Issue 5: Why not automate in the first place
Sometimes we stumble upon stuff that is so blatantly dumb that even a computer can do it. We got requests for some reference data very frequently. The data was in two target systems which both had usable APIs. So, of course we wrote the entire automation from receiving the request, pulling the data out of the systems, pressing them into the desired format and templating a nice answer. All we left for users to do was to control the sending process so they were able to play with the response in order to not make it look like we automated anything, because then their clients would have paid less. We could have automated this feature, too. But hey, users want to be users in the end.

Issue 6: Why is Windows so uncool?
Finally, we knew which process someone was performing and what his next steps where. Why the hell did we not provide a toolbar that updated itself based on the current process state? Go a step back, Go one further, open this open that. We had it nicely blend into the Desktop and even integrated a “Call for Help” button so if the user ran into any problem he could either Tweet (yes, we hadded a P2P based Twitter Replicate which was shut down 🙁 ) or send to a co-Worker. [By the way, we distributed Smiley Dollars to share for people that offered help … but it was shut down, too. 🙁 )

Leave a Reply