Comp Time: Your Company’s Secret Weapon

Comp Time is your company’s secret weapon to boost productivity, make employees happy, and make the bottom line larger. See it in action – do you work for Company A or Company B. Pretty graphs included.

Comp Time is your company’s secret weapon, not just to employee happiness, but to productivity.

Some companies define comp time as earning 1.5hrs for every overtime hour worked. This article assumes a 1:1 ratio to make its points. Our focus is directed at human behavior when comp time is (and isn’t) available and the side effects of being able to borrow from past and future reserves.

We’ll examine two companies. A, which does not implement comp time. And, B, which does implement comp time.

Let’s start with the assumption that the normal work week is five days long and eight hours each.

Work-To-The-Rule vs. Simple Flex Time


Company A’s Average Is Lower Than They Realize!
Company B’s Average Is Above 100%
Productivity!

It’s a well known fact that if one imposes strict clock watching on employees, they spend far more time watching the clock and complying with it than they do actually working. Yes, you’ll get those forty hours, but while the chair may be occupied, productivity isn’t what it could be. This is often called “Work to the Rule” or “Malicious Compliance.” Above we see Company A mandating strict attendance policies, but the reality is that they’re really following the techniques in the White Collar Slacker’s Handbook.

Conversely, if you’ve hired professionals and treat them like professionals, they tend to act like professionals. Company B also has the same 40 hour work week, but its policy is such that employees are free to jiggle their time around via flex hours.

If an employee doesn’t feel well, he leaves, without infecting the rest of the office, making it up later. If an employee takes a long weekend, he can beat traffic, yet still make up that time without burning himself out. If he’s being unproductive, and knows it, he can just stop — suddenly company B isn’t paying for unproductive hours. Even better, when the employee gets a burst of inspiration and is in “the zone” creatively, he’ll naturally work as long as it takes; people enjoy feeling productive. This amount is often well above what’s asked. Finally, the employee can use the extra accumulated time to reward himself; company B doesn’t have to shove out as many bonuses.

Management at Company is confusing attendance with productivity (the stuff that actually gets done), but all they really have is a bunch of disgruntled clock-watchers. Company B is a different story, because the actual productivity often exceeds 100%, plus its people are happy (and happy people don’t jump ship).

Large Blocks of Comp Time


Let’s try to even out the playing field by improving Company A’s corporate policies. Let’s say that Companies A and B are both in the same line of business, doing identical work, with identical talent. Both have simple flex time, and both even have comp time. The difference being, that while both bill their customer on a monthly cycle, Company A ties its comp time policies to a two week pay period, just because. Company B, also with a two week pay cycle, allows comp time within the one month billing cycle.

All you really need to be looking for what actually happens in a company when a real-life event bumps up an artificial boundary. The conclusion, as we’ll see, is that the broader the comp time window is, the more benefits befall to the company.

Employee Illness


Let’s look at the case where an employee gets sick at the end of a pay cycle in Company A.

Company A’s Productivity Is Lower Due To Missed Time
AND They Are Now Behind Schedule!
Company B’s Average Is Unaffected By The Absence!

Inside Company A, if a person gets sick at the end of cycle, they’re unable to make up the time. As such, this time deficit usually comes out of a benefit pool of personal time off (such as combined vacation and sick time).

Employees do not like touching this reserve, primarily because it is a safety buffer that accounts for emergencies. Additionally, there’s the perfectly valid conception that vacation time should be fun time, and that one might want to use it in large sized blocks.

Company A has two rationalizations for making the employee consume vacation time. One, forcing them to draw against it is a disincentive to stay home. Two, not having any left means the employee won’t be out for an extended period, keeping him around. Both are self defeating in the long run.

First, it’s true, the sick employee may drag himself into work, simply to be there. However, someone who’s sick often doesn’t perform well, and in the case of software development, coding in a mental fog can actually do a project serious damage. Meanwhile, the rest of the office gets sick, which cycles back around to making recovery difficult. Now you know why flu season affects some companies and not others.

Second, people function better after breaks. Having an employee continually working on a project non-stop tends to induce burn-out, often leading not to continued productivity, but to the employee leaving for another job, presumably with better working conditions.

Either way you look at it though, Company A has lost time on the project due to the employee being out.

Company B, however, has a different perspective. Because their policy allows the time to be recovered, the employee has a strong incentive not to consume his vacation pool. As such, he works longer in the days that follow, recovering his time. From a project standpoint, it regains the ground that was previously thought lost.

Additionally, because the project isn’t behind schedule, planning becomes easier and more accurate, allowing Company B to let the employee take a long vacation, scheduling around it so that it has no impact. When the employee returns, he’s refreshed and back to producing at peek performance.

The Schedule Crunch


Comp Time also provides enormous benefits when an extra effort is needed. Let’s look at the case of a forth coming demo, preceded by an extra surge of pre-demo preparation activity.

Company A’s People Put In Less Extra Effort, And Are Unhappy.
Company B’s People Go Above And Beyond, Willingly.

Due to circumstances, the demo day is at the start of the next cycle. That means, for Company A, any extra time put in before the demo won’t be recovered, it’s just lost. Human behavior dictates under such conditions any push will be met with passive resistance, and while Company A may get overtime in crunch mode, it won’t be all it could be. Slow burnout is on the horizon. in the short term they pay for a week of attendance and poor productivity.

Meanwhile, Company B’s staff is willing to go beyond the extra mile, primarily because they know that what follows the demo is a significant block of downtime. Company B gets the time when they need it, and the employee doesn’t feel taken advantage of. They return rested and ready, sooner.

The lesson is clear: the larger the block of allowable comp time, the more value the company gets. The effect does not appear to be linear, either. A company with monthly cycles gains more than having two back-to-back bi-weekly cycles of time reconciliation.

Making Comp Time Work


Company A’s fear is that the employee will borrow from the future and not work it back. There’s are several easy ways to deal with this.

Should an employee cross a comp time boundary with a negative amount, it simply get drawn from vacation, and if no vacation, then salary. The primary risk to cover is the case of the employee borrows time and then quits, the solution is just to set policy so that no comp time can be borrowed more than the employee has resources to cover.

Another way to allow borrowing forward is to actually draw from vacation, though allowing comp time to return back time to the vacation pool.

Ideally, though, the best solution is to allow banking of time to fill in gaps. You’re no longer borrowing from future time, but normalizing from reserves. Turns out, employees will settle in on this optimum strategy without having to be shown, anyhow.

Benefits of Comp Time


Concluding, note that the longer the comp time period extends, the more the company itself actually benefits — its workers are more productive, they’re happier, they’re able to go the extra mile, people are healthier over all, etc. The employee feels more freedom, as the job integrates with life instead of dictating it. Yet still, on average, the employee willingly spends more time for the company (which is also happens to be the better quality time), and still gets to enjoy long vacations (that now don’t disrupt schedule).

It’s a benefit that’s very easy to provide, and it makes Company B have the competitive edge over Company A, all things equal.

Firefox: Problem Loading Page

All of the sudden, Firefox started reporting it had problems loading pages and that the proxy server was refusing connections. Problem is, I don’t have a proxy server. …the problem, however was my own doing and very easy to fix.

I was checking mail in GMail, and when I went to my Sent folder, I got a loading message and then nothing. I went to check some other random website and got the message: Problem loading page with a more detailed message of:
The proxy server is refusing connections
Firefox is configured to use a proxy server that is refusing connections.
Check the proxy settings to make sure that they are correct.
Contact your network administrator to make sure the proxy server is working.

Odd. I don’t use a proxy server. So I try Safari. Things are working.

I shutdown Firefox. Re-open. Same thing.

A google search showed that a small number of people were having this problem, and they were being redirected to preference screens, virus checking their systems, etc.

That couldn’t be it — things were working just a moment before.

Cause & Fix
The cause of the problem was an accidental click on the Tor button in my browser’s status bar, which subtly switched me over to using Tor for web browsing. Only problem was, I hadn’t started the Tor virtual tunnels.

Firefox was correct – it was using a proxy server that wasn’t responding. I just hadn’t realized I’d activated it.

Simply clicking the “Tor Enabled” once put it back to “Tor Disabled” and suddenly Firefox was working again.

Guess I just happened to bump the mouse at just the right place on the screen. Opps.

Anyhow, it was a five minute mystery, and since I suspect others have fallen victim to their own demise and not been able to figure out why, or worse, giving Firefox a bum rap, I’d share the solution so others can get back to browsing.

Deleting the Postgres service in XP

Installed Postgres 8.2, but the obsolete service for Postgres 8.1 hung around. Here’s how to manually get rid of it.

Ever since I installed Postgres 8.2, I’ve been still getting Postgres 8.1 listed in my pgAdmin tool — postgres runs as a service, and I was surprised that even after uninstalling, manually deleting dependent files and directories, and cleaning out the registry manually and with automated tools that the old service still persisted to run.

Here’s how to remove the service.

Right click the service and go to properties. Look at the Path to executable and find the service name:
“C:\Program Files\PostgreSQL\8.1\bin\pg_ctl.exe” runservice -N “pgsql-8.1” -D “C:\Program Files\PostgreSQL\8.1\data\”

Now Start / Run… cmd and enter this at the command prompt:
sc delete pgsql-8.1

You’ll get a “[SC] DeleteService SUCCESS” message as confirmation it’s gone.

Registry Mechanic PCTLicHelper.dll Missing

Got a message from Registry Mechanic that the file PCTLicHelper.dll was missing or corrupt. Here’s the workaround until PC Tools fixes the problem.

I’m an avid fan of Registry Mechanic and can’t say enough nice things about the product.

I recently downloaded Registry Mechanic 6 (version 6.0.0.750 w/ engine 2.0.0.560), installed, and ran it. It worked great – I even like the slightly sleeker interface. However, after doing the Smart Update, Registry mechanic displayed a message that C:\Program Files\Registry Mechanic\PCTLicHelper.dll is missing or invalid, and it suggested I uninstall and reinstall.

The uninstall worked fine. The reinstall worked fine. The re-running worked fine. But upon another update, I got the same error message.

My next thought was that the file might be getting deleted accidently during the upgrade, and to simply install the software, copy the file to a safe haven, do the upgrade, and put it back. No such luck, the file doesn’t exist in the pre-upgraded application. This is a new file needed by the latest upgrade, and judging by the file name, I believe it’s highly related to PC Tools’s license scheme that is subscription based.

A little experimentation with uninstalling and reinstalling shows that the fault lies in the Smart Update’s getting of the updated Registry Mechanic. I suppose they wrote the code but forgot to bundle the DLL.

Simply uncheck the entry that says Registry Mechanic 1.43Mb, but leave all the other items checked. You’ll be able to scan just fine.

I tried reporting this problem to PC Tools at their website support page, but that reported an error: Fatal error: Undefined class name ‘datetime’ in /home/shared/include/tickets/rawmessage.php on line 222. I guess they have bigger problems than they thought.

After calling their USA support line, 1-800-764-5783, I got a recording that said they could also be reached at support@pctools.com. That would have been nice to have on the website somewhere obvious.

This trivial issue aside, Walt gives Registry Mechanic a big thumbs up!

UPDATE 22-Feb-2007: As Mike suggested, I got the latest update this morning and this time there was an updated program, a PC Tools License Helper, and a revision to the white list. I installed the update, and Registry Mechanic worked just fine. I never did hear back from PC Tools about the issue, or its website being broken.

UPDATE 24-Feb-2007: This morning got an email from PC Tools informing me that the problem had been fixed and to simply reinstall, commenting there was no need to re-enter license information. They made no comment on the fact that their website was broken, other than to generically tell me it was a “great source of knowledge for future questions.”

Verizon News Groups (FiOS)

Got Verizon FiOS? Get News Groups working – tech support number, host name, port number, and hints included.

Just spent a few minutes circling trying to get Verizon news groups working. Here’s how I did it, you’ll need a news reader – OS X users, go try Unison.

First, I went to Verizon’s start page, http://start.verizon.net/, and discovered I could not login. Since I don’t use Verizon’s email or web services, I had no clue what my username and password was.

Calling 888-553-1555 and asking for Verizon FiOS Internet Technical Support (a 24/7 service) got me through to someone who was easily able to tell me my username and reset my password to an obscure string of characters. He then helped me log on to the web page and change my password, to which I did.

At that point, I made the mistake of hanging up and attempting to connect to the Usenet on my own. It didn’t work.

I called back, and again got someone who was quite helpful, and through some minor experimentation figured out what was going on.

  • Some Verizon literature states the server is newsgroups.verizon.net, it is not. The correct news server is news.verizon.net, and you can ping it. The IP address I got was 199.45.49.11.
  • Be sure that you don’t enter verizon.com – that will not work. You want dot net.
  • Even though I had changed my password, it had not propagated – to access the Usenet, I needed my old password, the one the tech person read over the phone.
  • Your username does not include @verison.net at the end of it, don’t type that. It was a bad habit my previous ISP started.
  • The news server does not support SSL, stay with port 119.

The tech support person also mentioned there was a page for setting up newsgroups with Verizon FiOS online.

From what I can tell, Verizon has very good news group article retention.

FIX: Apple’s Security Update 2007-001 for AirPort breaks internet connectivity

After installing Apple’s Security Update 2007-001 for AirPort, the AirPort icon on my toolbar stopped working correctly. This is the workaround I’m using until that gets fixed.

Immediately after installing Apple’s Security Update 2007-001 for AirPort, I no longer had wireless connectivity to the internet. This is how I got around the problem.

Here’s how it’s supposed to work: You go to Apple / Software Updates…, it presents a Security Update, to which you select it to download and install. If it affects core pieces of the running operating system, then it may require a reboot. If that’s the case, then you are asked to authenticate the new module when it starts. For instance, a new AirPort driver asks you if you want to let it use your keychain (so you can connect to networks) – this extra line of defense would, for instance, let you know if some malicious program is trying to steal your passwords. Since it came from Apple via an update you explicitly requested, you authenticate, and all is good — everything is back to normal, and you’re more secured.

This didn’t happen when I installed the Apple Security Update 2007-001 for AirPort.

Immediately after the system reboot, I noticed that I wasn’t prompted for my password for the new replacement driver. This doesn’t always happen with minor changes, but you can almost always expect it with a security update.

Additionally, my AirPort icon in the tool bar was gray, suggesting that the AirPort power was off. So, I selected Turn Airport On, which normally starts scarfing the air for networks, joining my default one or letting me choose from a list. However, in this case, nothing happened.

I confirmed I wasn’t connected via the browser. And repeated attempts to turn on the network were futile.

At this point I opened the Network Diagnostics utility using QuickSilver.

If you don’t have that, you can go to your main disk, and go inside the System folder, then the Library folder, then the CoreServices folder, and click the Network Diagnostics application. Or, you can open a Terminal window and enter:

  $ open /System/Library/CoreServices/Network\ Diagnostics.app

Surprisingly, this told me my computer’s internet was working normally, and did I want to continue. I picked Yes. It then wanted to know which network port I wanted, I chose AirPort. My network appeared in the list, and I selected it and clicked Continue. It said I was now connected, and I hit Quit.

Sure enough, Apple / System Preferences / Network showed a green light next to my AirPort, and the text said I was now connected. A quick browser check to the internet confirmed that was, indeed, the case.

Meanwhile, the AirPort icon on the toolbar remains grayed out, convinced I’m not connected, and that there’s nothing that can be done about it.

Obviously the network card is working, as are the new security patches. It looks like something relatively minor got overlooked with the interface. But it’s nice to know there’s a workaround at the moment.

UPDATE 16-Feb-2007: I HAVE A FIX.
Grab a copy of OnyX, go to it’s Automation page, and fill out the form like this:

OnyX Automation Screen

Then press Execute, this will take a while and require a reboot at the end.

Next, grab a copy of AirPortExtremeUpdate2007001.dmg and re-install it, this will require a reboot as well. At this point your Wi-Fi AirPort problem should be fixed.

And while you’re at it, grab a copy of SecUpd2007-002Univ.dmg and install that too, then reboot.

I believe what’s going on, and this is pure speculation, is that there’s some kernel cache files that either prevent the 2007-001 update from being installed or simply override the changes is has. By using OnyX, it’s possible to clear out all the cruft that’s plaguing the operating system, allowing the patches to work as advertised.

And, once you do the above, be sure to go to Apple / Software Update… — if you weren’t getting any updates since installing 2007-001, you’ll notice things like Final Cut Pro, Java for Mac OS X 10.4 Release 5, and Daylight Savings Time Update.

As an aside, here’s a list of Apple Security Updates for OS X.

Restoring Normality to OS X – Right-Click, Expose, Sleep, and Passwords

My MacBook Pro wouldn’t sleep, draining my battery each night. It wouldn’t ask for a password after a screen saver. Here’s why, how I fixed it, and what caused it to happen in the first place.

Ok, let’s start off by stating out right this was my own darn fault…

I’m using a MacBook Pro (Intel) running OS X 10.4.8, and my personal habit is to charge the system way up to full, then use the battery until it’s virtually drained, and repeat. Somehow I’m hoping that this will get me longer battery life, but that’s another story.

OS X is really smart in that while you’re working it pops up a dialog box telling you that you’ve got ten minutes of battery life left, and that you should go get your adapter and plug in the laptop. It’s so smart, in fact, that if you do that, it will close the dialog without you even have to click. Very clever.

But Apple is also treats you with a little respect. If you dismiss the dialog box, it’s not going to remind you any further. You know about the condition of the battery, as you just acknowledged it. To perpetually remind you would not just be insulting, but get in the way of what you were doing. I can’t count the number of times I’ve acknowledged the state, finished an email leisurely, and then gotten my adapter. I like that. I like not being nagged.

With that kind of interface comes responsibility, and I neglected mine. I allowed myself to get distracted by other things and it took me a moment to realize what had happened when the screen went dark and wouldn’t come back with a flick of the touch pad. I had accidentally allowed my battery to completely drain.

Turns out you don’t want to do this. It’s not going to damage your computer, but at the same time it isn’t going to leave things in a very valid state.

First, let’s give some credit to Apple — the moments after I plugged in my power adapter, the disk whirled up, and within a few seconds my screen came back to life, I lost no data, and my internet connections were still functioning. In the laptop’s last dying breath, it had preserved its state to disk, recovering when it had power.

The immediate concern is a disk repair; although the file system is journaled and your data won’t get corrupted, if it was in the middle of doing something where it hadn’t gotten that data to disk yet, that data is lost. This can result in minor file system problems which are easily corrected by booting your original OS X install disc and using the Disk Utility (rather than the install program) to repair the volume structurally, and then repair permissions.

But things doesn’t necessarily stop there. It is possible that your system, because of lack of power, lose some important system settings. The best analogy I can make for PC users is when your CMOS battery dies and your system “forgets” all the settings for the time and drives. While this doesn’t happen on the MacBook Pro, the following things did happen — and here’s how I corrected them.

1. The “Place two fingers on trackpad and click button for secondary click” stopped functioning. Solving this was merely a matter of going to the Keyboard & Mouse preference screen and toggling it off and back on.

2. The function keys, F9 – F12, stopped invoking Expose. Solving this was merely a matter of going to the Dashboard & Expose preference screen and setting the keyboard shortcuts back, they became unassigned.

3. The laptop stopped going into sleep mode when I closed the lid; apparently the power management subsystem had gotten confused. If something like Firefox was running GMail, this was enough to keep the system running (even though the back light went out). I’d awake in the morning to find my battery drained, leading to more problems of this nature. The laptop’s “sleep” led wasn’t “breathing” and pulsating as it does when hibernating. The solution was to reset the power management: Shutdown, Remove Battery, Hold Power Button for 5 Seconds, Insert Battery, and Boot.

4. When the laptop was woken up or coming out of a screen saver, it was not prompting for a password, as I had configured it to do. The solution was to Reboot, Hold Down Option-Command-P-R (that’s four keys at once!), wait for the chime, and release all four keys letting it boot as normal, then, sign on and go to the Security preference screen and toggle “Require password to wake this computer from sleep or screen saver”

I’m happy to report, the Mac is back working perfectly.

Oh, and a tip for people who want to put their Mac to sleep real quick, even with the above problems you can do this, press Option-Command-Eject. You’ll have to close your lid and re-open it to wake.

Where is &_= Coming From? (…not a typo…)

Server not responding to AJAX requests? Finding “&_=” being appended to your messages? Here’s an easy fix to solve that.

I recently was playing with Prototype, the JavaScript framework that implements an AJAX object to send Request to do a cross-browser XMLHttpRequest.

My server was reporting problems with the messages being sent from AJAX, and after a quick debugging session, I found that everything AJAX was sending had a “&_=” appended onto the end of it.

This clearly looks like a bogus parameter, say appended to a GET sequence, designed to pacify something. A little bit of digging on Google, and it appears it was introduced to resolve an old problem in Apple’s Safari.

Problem is, Prototype is still sending it, and when I sent an XML message to my server, the SAX parser didn’t take too kindly to the extra cruft at the end of the document.

If you open up prototype-1.4.0.js, and jump to line 631, you’ll see a line that looks like this:
if (parameters.length > 0) parameters += '&_=';

…removing it solves the problem. I found this more elegant than making my server pre-process an XML message.

Portupgrade on FreeBSD

Ran into a “pkgdb.db: unexpected file type or format” during a portupgrade on FreeBSD. Here’s the fix.

I’m using FreeBSD, and keeping it up to date with the ports collection is normally a fairly simple thing to do.

  1. Make sure DNS is working (check you /etc/resolve.conf file)
  2. # portsnap fetch
  3. # portsnap update
  4. # portupgrade -a

Only, today I got a strange error message doing the portupgrade:
/var/db/pkg/pkgdb.db: unexpected file type or format — Invalid argument

Whether something broke, got disconnected, terminated in the middle of processing, or the database format or version changed, I dunno.

However, the fix is easy. Get rid of the problem files, and let portupgrade rebuild them.

# rm /var/db/pkg/pkgdb.db
# rm /usr/ports/INDEX*.db
# portupgrade -a

Printing Arrays in Perl

My quick playing with printing arrays in Perl’s here documents.

Recently I had the need to do a lot of text processing, where I was taking text from a number of sources, munging it, and creating a new source. Obviously Perl was the correct way to do this.

Unfortunately, the data sources I was reading were a mish-mash of stuff, and my Perl code had to sort things back out into neat piles so the very quick and efficient data loads could be done into a database. For the curious, I was taking a pile of INSERT statements that took forever to run and doing a block load into Postgres with the COPY command.

My first attempt was to use Perl’s string concatenation operator. $string .= $more_stuff_to_append;

The problem was that an awful lot of string manipulation was going on, and the poor string pool was being beaten to death.

My next thought was to use Perl’s push operator, but discovered that this was faster:
$array[++$#array] = $stuff_to_append;

This basically gets the length of the existing array, adds one to it, and then inserts the element at that new position (at the end).

But I got an interesting surprise when I went to print it in a here-document.


print <<EOT;
blah blah blah
@array
blah blah blah
EOT

This did something I wasn’t expecting. The first element looked fine, but the following elements were all preceded with white space. And that white space was confusing the database bulk load operation.

Example:
Thing1
 Thing2
 Thing3

That’s when it struck me. The here document is like putting something in double quotes.

With Perl, doing this:
print “@array”;
…will print each element of the array separated by spaces for readability.

But, doing this without the quotes:
print @array;
…will print each element one right after the other with no separator.

Simply moving the array outside the here document resolved the problem.