Work


I mentioned a few times that I’ve been working a lot harder than usual the past 6+ months. The project is a completely unplanned, unscheduled, unspecified, self-initiated makeover of our GUI application.

I’m not going to talk about the gory technical details because I can’t. The last couple of weeks were extra crazy because some sales people are going to a trade show and they want to show the new GUI. Last Friday I checked in close to 30,000 lines of code changes, and got this back from the sales guy:

… even at this ‘alpha’ stage, it genuinely looks brilliant. … Whilst it is a phase1 of the GUI enhancements I gotta say it’s a MASSIVE leap forward from the prod (old) GUI. Chalk and cheese comes to mind. … we have already had a couple of people, when stopping by our booth say, unprompted, that the GUI “looks really great”.

Keep in mind this is a sales guy, but this is an internal email so he’s likely 14% less boasting than he usually is.

Anyway I’m taking tomorrow off.

I wrote about my growing workaholicism about half a year ago.

It didn’t get better.

The last two projects (UTF8 and hg) are still not finished. But a new project in the last 3 months or so has been the main cause for evening logins.

I mentioned it in that old post: a complete remake of our GUI using JIDE docking framework.

It’s a greater project than anything I’ve ever worked on. I’ll truly be proud to say that I’m the creator of something functional and useful, even just for those a few hundred users of our system.

But that’s not why I’m writing this post.

I re-realized that I work this hard because it’s easy.

Easier than life.

When I’m programming, all I have to worry about is programming.

Getting a computer to do exactly what I want it to is not trivial.

But it’s many orders of magnitude easier than flushing our living room HVAC with dozens of buckets full of rusty water and pray it will work again on the coldest day of the year so far.

And it’s infinitely easier than getting Valentina to go potty when she’s watching Dora.

It’s only harder than one thing.

That’s why I’m writing this post instead of programming.

I can’t fight the natural law for the path of least resistance, which guarantees local optimum but usually at the cost of global optimum.

A rhetoric question beseeches a rhetoric answer: I don’t know.

RYF’s latest blog links back to an earlier piece, which I don’t remember reading, but it hit me like a marshmallow on my toe nail:

我觉得,人生在世总要做一二件属于你自己的事情,自己发起、自己负责、自己主导、自己完善。就是说,这件事是同你个人紧紧联系在一起的,就像阿三的这个项目。

我想,我们每个人都应该有一二个自己的项目,人们提到你的时候,就会提到你的项目,反过来也一样。

人的一生,说长不长,说短不短,正好够用来做完一二件事,所以不要浪费它。何况也许只有这样,才能充实而愉快地度过有意义的一生。

I’ve been working like crazy for almost half a year. Almost every night, including weekends, I use remote desktop for hours, quite a few times till 1am (last night) and beyond.

I’m not complaining about the work load. I’m complaining about myself getting used to it. I don’t know what to do if I don’t click the Remote Desktop at night. Actually no, I know there are thousands of things to do, but somehow I just don’t want to do them. Clicking Remote Desktop is the easiest thing to do.

I have to admit that I’m quite proud of what I’ve done. It’s the first time I can say that since I started working. This list don’t mean nothing to non programmers:

  • Wrote a converter to convert hundreds of proprietary text files that describes the GUI windows in our system in a very lame way into XML under the new GUI framework that I’ve been working on the last 3 years.
  • Picked a commercial Java GUI library (JIDE truly rocks! It was founded and run by a Chinese guy with a similar background and age as me) to introduce docking into our GUI. It will be the foundation of a complete remake of our arcane and awful GUI.
  • Use the same library to turn any table in our system into a full featured pivot table that’s even better than Excel. No server side change is needed at all.
  • Use UTF8 to enable non ASCII. It would be many many years till we get to full i18n, but I’ve started to spin the wheels out of prehistoric dark age.
  • Use Mercurial to replace TeamWare, which uses–u better believe this–SC freaking CS. I learned python and wrote more than 4k lines of code to create extensions to cater to our rigid development process. I’ve written scores of multi-page emails and hundreds of revisions of wiki documents to explain the new processes and explore the options. If you still use svn, you’re fossil.

The last one probably took the longest time (still not finished) and most work.

But are these my projects? Is this feature, this software, this company, this business, what I want to do for my life?

Hell no.

You can’t always get what you want.

And you can never get what you don’t know what to want.

CRAZY. CRAAAAZY!

It’s not as bad as “Corporate Counsels Payroll, Nina speaking. Just a moment.”

Sometimes it’s pretty close, like just now.

  • The never-has-nothing-to-do sys admins are looking at restricted web sites again. Restricted to other employees, I mean. One of them has a truly explosive and hysterical laugh. Worse than the “hyena lady” in Sleepless in Seattle. I used to sit 2 rows away from him and was tearing my hair cell out. Now I’m 5 rows away and it still hurts.
  • The fast-talking MBA project manager has been asking everybody when they’ll finish their projects as always. Only speaking faster today.
  • The sales partner’s secretary has been typing like mad, when she’s not calling places to reserve/cancel appointments. Donno why her seat is among the developers. Donno why her keyboard sounds so loud, either.
  • The guy who always strolls around the floor is doing it for the 36th time today. He always wears a suit. And a hat.
  • 3 guys sitting on my back side have been talking about all kinds of stuff. In Russian Serbian, Argentine, and a monotonic robotic origin-unknown accents. Maybe the 3rd guy IS a robot. Gosh, why didn’t I think of that before?! That explains a lot of things…
  • The guy sitting next to me just started today. In the morning he stared at the screen for about an hour trying to log in. Then he’s been making phone calls to insurance company, asking sys admin how to do this and that, etc. In Polish accent.
  • A guy just bought a handheld GPS and is showing it off. He can’t get a strong signal so he opens up a window and sticks it out. The wind is howling through the crevice and he’s bragging that the device can talk. In good old American accent. The other guys marveling at this modern marvel are my compatriots with you-know-what accent.

I myself is to be blame for the ordeal, though. I brought the super nice Bose QuietComfort headphone to work a few times, but got tired of commuting with it–certainly I can’t leave that expensive thing in the office. Now what I have is a cheap headset and my ears hurt after wearing it for 30 seconds.

I figure that there are very few tech companies in the world where developers have private offices. That’s why Fog Creek always looks to me like Google’s next door neighbor in programmer heaven. In my current company of more than 100 employees, there are only 8 private offices for the partners, CFO, and sales/finance/HR managers. Even the director of development sits among us in sprawling grey desks.

Oh wait, the receptionist kind of has her own office. Hmmm. Maybe I’ll trade for her space if it gets too rough and tough around here.


UPDATE: There’s one distinctive noise missing yesterday: the guy who skypes our outsource team in Ukraine for about 4 hours continuously everyday, in Russian-accented Russian.

But I don’t care any more since I have my QuietComfort now. In a month I’ll be able to transcribe all of Beethoven’s string quartets from memory 🙂

Questionaire in 11/2005 issue of Software Development.

  1. When it comes to policies, procedures and development standards, I:
    Follow them because consistency is important, but I offer to draft the changes needed to correct or update them.

  2. When writing a project-related document, I:
    Reference other documents or ask questions to make sure I understand what’s required, taking my best shot at it before submitting it to my manager for review.

  3. When I solve a particularly difficult technical problem, I:
    Provide my coworkers and manager the details of the problem and solution, to spare them similar difficulty.

  4. For routine communication with my manager, I:
    Ask her how she prefers to receive routine communication, whether by e-mail, phone or office visit–and then keep in touch accordingly.

  5. When I receive a new project assignment, knowing I already have more work than I can do effectively, I:
    Accept the assignment, but ask hwat priority it should be given in relation to other assignments.

  6. When I receive an assignment I feel is “grunt work”, I:
    Recognize that a certain amount of pedestrian work must be done, and respect my manager’s judgment in the assignment.
    (This is the only one I got “wrong”. I picked “Politely inform my manager that my skills could be put to better use elsewhere”)

  7. My attitude toward keeping current with tools and best practices is:
    I enjoy reading articles and books about the software development profession, even on my own time, for my own personal development.

  8. When demonstrating my development work-in-progress to coworkers, I:
    Take notes of their suggestions and follow up on each one, either making the suggested change or justifying why it isn’t feasible, realizing that they’re trying to help me improve the product.

  9. When reviewing my colleagues’ work-in-progress, I:
    Offer constructive criticism, focusing on the product and not the person.

  10. When my performance evaluation is coming up, I:
    Send my manager a detailed update specifically addressing how I met the performance objectives established for the performance period.

Next Page »