Category Archives: work

On this page:

Mapping out what I’ve learned at IBM

We’re in the user acceptance phase for the project I’m working on. There are a number of small things to fix, styling issues that we’d put off until the base functionality was in place. So I fix things and send them back, waiting for feedback.

In the meantime, there’s time to write, and to work on other things. There’s a nonprofit project that I want to do as much as I can on before I go, and I want to leave notes for the next developer. There’s the Community Toolkit that I’d like to add more to before I go.

I’m mapping things out, seeing what else I can share. The things I’ve learned about collaboration have become part of what IBM knows; BlueIQ and wikis and community managers doing awesome things have taken it much further. The Community Toolkit has what I understand about the Connections API, and there are enough people who have used it and even tinkered with it to keep the idea going. The Idea Lab processes and tools have been in other people’s keeping for a year, and they’re doing well. There are people who do Drupal and who do Rails, and my notes are on my blog. This is good.

So now, in the gaps between things to do, I write about the other things I’ve learned from IBM. There’s a lot to write about, and I’ll see how much of it I can put together in the next three weeks. =)

My CSS theming setup

“Why is your window transparent?” a coworker asked me when she noticed my screen. I told her about how I do my CSS theming, and she pulled another coworker over and made me repeat the explanation. Since that seems like something other people might find handy, here it is.

Sass: Syntactically Awesome Sytlesheets

I rarely do CSS/front-end theming work, but when I do, I try to make it as fun and easy as back-end development. I use Sass (Syntactically Awesome Stylesheets) so that I can use nested selectors, variables, and mixins. This makes my code cleaner and easier to write. You’ll need Ruby in order to install Sass, but the tool will give you CSS that you can use on any web platform.

Browser-based tools

I prefer doing the initial tweaking in Google Chrome, because I like the way that the developer tools make it easy to modify the stylesheet. The Chrome CSS Reloader extension is handy, too. Most of the time, I make my CSS changes in the text editor, then use the CSS Reloader to reload the stylesheet without refreshing the page. This makes it easy to manually toggle the display of some elements while allowing me to refresh style rules. If I want to figure out the values for a few simple changes, I’ll sometimes make the changes directly in Chrome (you can use arrow keys to adjust values), then copy the values to my Sass source file.

Colors, sizes, and spaces

A second monitor is totally awesome and well worth it.

Designs rarely specify all the colours, sizes, and spacing needed. To quickly get the color of a pixel, I use WhatColor. This shows the hex code for colors, and allows me to quickly copy the code with the F12 shortcut key. If you want to change the shortcut key, the source is available as an AutoHotkey script.

To make it easier to match sizes and spaces, I use WinWarden to make my browser window 20% translucent. Then I carefully position it over my design reference until the important features match. Magnifixer makes it easier to line things up because it can magnify a fixed portion of the screen. By focusing Magnifixer on the part I’m working on, I can tweak CSS without straining my eyes.

When I know I’m going to be making a lot of changes, I use AutoHotkey to map a shortcut so that I can refresh the CSS with one keystroke instead of several. When I happen to have my USB foot pedal handy, I rig it up to refresh my stylesheet.

Regression testing

Sometimes my CSS changes modify other rules. Instead of laboriously checking each page after changes, I’ve figured out how to use Selenium WebDriver to write a Java program that loads the pages in Mozilla Firefox and Internet Explorer, capturing screenshots and numbering them according to the pages in my design reference. This means that I can run the program in the background or start it before taking a break, and then flip through all the screenshots when I get back.

Cross-browser testing

What’s CSS theming without the requirement of browser compatibility? Someday, when I need to deal with more browsers, I might look into Selenium RC. In the meantime, I develop in Chrome, my Selenium-based program makes it easier to test in Firefox and IE, and it’s easy enough to try the URLs in Safari as well. Virtual machines handle the rest of the requirements. 

So that’s how I’ve been doing CSS theming on this project. What are your favourite tips?

Setting things in motion

The more people I talk to about my plans for leaving IBM and experimenting with business, the more real the idea becomes. The more excited and confident I get about it, too, which is a good sign.

Today I sent my formal resignation e-mail, the one that kicks off all the associated HR processes. I named February 17 as my date: four years, four months, and two days after I joined IBM.

I expect to feel more nostalgia as the date approaches, and perhaps uncertainty. That’s all normal, which is why I’m brainstorming and writing down my reasons. The notes will come in handy if I hit a slump. It looks like all systems are go, though. It’s clearly a good idea for me at this point in time.

I’ve found people to take over all of my extracurricular interests. I’ve been braindumping enough throughout my time at IBM to not worry as much about transitions. I’ve always worked on things with the lottery/bus factor in mind: would the project be endangered if I won the lottery or got hit by a bus? (The lottery is highly unlikely, since I don’t buy tickets; I usually look both ways when crossing the street, but one never knows what could happen in the streets of Toronto.) I’ve written lots of notes and shared as much as I could as publicly as I could, and now it’s easy to link things together in a knowledge map on a wiki page that people can even update after I’m gone.

My manager told me of ways back in, and contracting companies that IBM is used to working with. It might be an option. I’d like to spend some time up front seeing if I can develop a business. Freelancing sounds like a reliable alternative, but it’s similar enough to what I currently do at IBM that I think I would learn lots more from trying to build a proper sustainable business with compounding value.

One step at a time. The project that I’m working on looks decent in IE8, IE9, Firefox, and Safari, and it looks a heck of a lot better than it did when I took it over. I’m on track to wrap that up well. Then there’s some HR paperwork to take care of, and more braindumping of memories and thoughts before they fade into fuzziness. Then the transition! Then slowly easing into experiments and feedback cycles and little bets…

Getting ready for my next experiment!

image

It’s been four years of awesomeness at IBM. I’ve:

  • helped companies and communities collaborate
  • facilitated brainstorming workshops with executives from leading companies
  • built web apps in Drupal and Ruby on Rails
  • created popular tools for community newsletters and analyses
  • drawn comics that made people smile across IBM, and
  • learned from and shared with people around the world.

It totally rocked. Thank you!

Mid-February 2012, I’ll be on to my next experiment. I want to help people save time and make better decisions. Let’s see how we can make that a sustainable business!

I’m looking forward to learning more about business, and sharing the adventure with you. =)

Stay in touch!

Stay tuned!

Work, extracurriculars, and measuring time: an epiphany

I remember now why I had stopped tracking time before. Breaking things down at the project level made me feel weird about my extracurricular interests at IBM, like the community toolkit and now the IBM comics. On one hand, I wanted to support our utilization goals and claim time as accurately as possible. On the other hand, I didn’t want to give up personal time, especially as I could use it to build more functionality into Quantified Awesome. I felt conflicted. I found myself slipping from the feeling of an abundance of time to the feeling of a scarcity of it, to be carefully portioned out among too many demands.

Today, brainstorming how to address my worst-case scenario considerations, I realized something: I’d been thinking about it the wrong way. It’s not extra time I’m donating or a hobby I might outgrow. It’s a live opportunity to test ideas with a massive, built-in internal market.

Comics on the intranet homepage? A fledgling artist couldn’t buy that kind of space. A community analysis tool that other people have come to rely on? Good practice in supporting disparate users and scaling up value.

No money might change hands, but a steady stream of thank-you notes helps my manager argue for a top rating, which often translates into a bonus.

So now I’ve got a couple of ways to rethink how this fits into my life.

I can promote these extracurriculars from the category “Work – Other” to “Discretionary – Other” or something similar, and budget myself four or five hours a week. It’s not work, it’s learning.

Alternatively, I can keep it under “Work – Other” and add an effective 10% overhead to my billable work. Many people have told me that I’m a fast developer, anyway, so scaling my output down to that of a somewhat above average developer will still mean that we do good stuff. The cognitive surplus goes into process improvement, self-development, and happiness, which is definitely worthwhile. I get stressed when I feel like I’m letting my other priorities slip, so spending time on them is important too.

These extracurricular interests can create a lot of value. I should adjust my measurements accordingly so that my measurements don’t lead to conflicting feelings.

How you measure affects how you manage.

Things I want to learn more about through work

Testing business assumptions: I like this definition from Eric Ries’ book, “The Lean Startup”:

A startup is a human institution designed to create a new product or service under conditions of extreme uncertainty.

I’ve come to realize that the most important part of this definition is what it omits. It says nothing about the size of the company, industry, or the sector of the economy. Anyone who is creating a new product or business under conditions of extreme uncertainty is an entrepreneur whether he or she knows it or not and whether working in a government agency, a venture-backed company, nonprofit, or decidedly for-profit company with financial investors.

I like the idea of treating work as an experiment that reduces uncertainty and helps us do something better. I want to get better at bringing out those uncertainties and planning how to resolve them.

Visualizing data and making better decisions: I like collecting data, bringing them together in dashboards, and figuring out visualizations that can help people make better decisions. Last year, I implemented a visualization for a Drupal project so that investors could see where the gaps in funding were. I’m working on some visualizations for my personal dashboard. I think it’s useful to be able to help people find patterns while avoiding false positives or visual noise.

Building systems that fit the way people need to work: I like the way we tailored the last project based on constant client feedback. I like saving people time by building systems that help them work more effectively instead of requiring a lot of repetitive work.

Hmmm…