On Flow

See Work 2.0, an excellent article of the "advice from the trenches" variety penned by Steve Streeting. He's the (former, I hear) lead of the OGRE project; back problems are forcing him to modify his old work habits.

...the first 15 years of my career was much the same as every other enthusiastic developer: you put a ton of hours in. 12-16+ hour days, evening and weekend coding marathons, pizza in the keyboard, crunch times, 3am debugging sessions where you just can’t go to bed because you can feel the source of that bug just beyond your fingertips, dammit, desperate last-minute sprints to deadlines where you manage to slot that last piece in, Jack Bauer-like, just before the world goes to hell.

We call this "flow". I first heard about it from Peopleware back in the day and it sounded great: better concentration, more productivity, less human interaction! For a young programmer what wasn't to like? And yet, as a young programmer, I had about as much say in how the office got run as the water cooler. My attempts at "flow" were perpetually foiled by meetings, phone calls, and chatty neighbors. I got frustrated, believing that things could be better, pushing against the situation instead of learning how to work within it.

Farther along now, I think that flow is not only over-rated, but potentially harmful. Let me qualify that: I find flow to be counterproductive. A quiet work place free from distractions: very good. Getting into a zone and sitting in it for hours: very bad.

Flow makes you blind. When you get into a flow everything falls away and it's just you and the problem to be solved. You crank away and turn over code and it is all great fun. But flow, by definition, puts you on a rail. You came into the session with a collection of beliefs about the problem, with preconceived notions of the "right" solution and about the problems you would encounter along the way. Now you're on the rail, you're in your flow, and you're shooting like a bullet straight at that goal. Wonderful.

But, in my experience, we rarely if ever aim correctly the first time. And while you're whizzing along in your flow you are flying past all kinds of possibilities and opportunities. If you don't take time to step back and take a breath, you just flat out miss them. Sure you solve the problem you went in to solve, but not as well as you might have. And the cost of those missed insights and opportunities, over time, is huge.

Flow blocks inspiration. My best ideas come as inspiration, often appearing as fully formed thoughts from...well, from I don't know where. Inspiration only comes away from the keyboard. It seems to be a truth of the human condition: you work your ass off on a problem only to have the answer appear while you're standing in the shower later (and I wonder if anyone has ever tried to correlate increases in intellectual output with advances in plumbing). When you're in flow, you're by definition sitting at the keyboard. You are in "output" mode; you are not receiving. Again, opportunity cost.

Flow creates work. You're in your flow, you're knocking out code left and right. You've totally whipped the problem you set out to solve, and it's only midnight! What do you do now? You can't switch to a totally different task, because that would require reconfiguring your mental working set and ruining the flow. Documentation is no fun, and you're too locked in to the task at hand to make any sense anyway. You don't want to walk away and lose a good flow. So instead, you start gold plating. You start "fixing" things, and adding "features". Of course, there's always just one more thing you can add, and the next thing you know you're in one of those "3 AM debugging sessions" Steve mentioned, trying to solve the bug caused by the crap code you wrote two hours ago when you should have just gone to bed, and which tomorrow you're going to have to rewrite anyway. You're working "12-16+" hours when you stopped being effective after 8. (And believe me, I'm not casting stones here, I've been there and done that too many times myself.)

Flow is bad for you. Sitting for extended periods of time is bad for you; Steve's own situation makes that point pretty well.

I've come to prefer working in what I'll call "pulses" instead of "flow". I like focusing completely on a small, well-defined task for a short period of time. I like using the pomodoro approach: 25 minutes on, 5 off. I like doing long-term improvement projects, both personal and professional, in small intervals as part of scaffolds. I like having a variety of projects going at the same time and switching between them at regular intervals. I like getting away from the computer entirely and doing something else (the lack of which I consider to be my biggest weakness right now). In all of this, I believe strongly that the time not actively working the project is just as productive, if not more so, then the time sitting at the keyboard.

To bring it back around, Work 2.0 provides some excellent advice on working effectively with pulses. In particular, I like his advice on maintaining an external context: keeping notes, task lists, diagrams—as much of your mental state as possible—outside your mind. I use Things from Cultured Code for this, using the excellent quick entry feature to capture any thoughts or possible next actions. Pen and paper works, of course. Vitamin-R looks interesting too.

The rest of Steve's advice is just as useful: ignoring tangential issues, focusing on individual tasks, prioritizing negatively...check out the full article.

(* Now, sometimes you just need to get the thing done. I put food on the table with client work and I understand the reality of a deadline. There are times when "done" is more valuable than "great", and sometimes more valuable than "good", and in those times the opportunity to get into a flow can make all the difference. But those times should be few and far between.)

Musicality 1.1.1

I am continuing to work on Grooveshark support for Musicality, but in the meantime: a bug fix release to tide you over. In particular, I've (mostly) worked around a bug in Flash 10.1 that causes all of the Flash elements on a page to disappear when the window is minimized or hidden. So if you hide Musicality while Pandora is playing, and then restore it, all of the Pandora music controls will be missing and you'll only see the blue background. This isn't just a Musicality problem; it happens in Safari as well.

My workaround isn't perfect. If you minimize the window before the Flash has had a chance to load, it could still disappear. If this happens to you, simply scroll the window a little bit and the Flash will reappear. Even better, close the window instead of minimizing or hiding, as this seems to avoid the problem altogether.

I'll keep working on the workaround, and perhaps Adobe will be kind enough to come out with a proper fix. Stay tuned!

Also fixed: a bug that would cause Musicality to crash if a song submission to Last.fm failed. As Last.fm's submission servers seem to have a serious case of the hiccups this week, some of you have likely run into this bug.

You can get the latest version by choosing Check for updates... from the Musicality menu.

Enjoy!

On Balance

Okay…(deep breath)…I did it. Musicality is released. The website is redesigned. The store is running. I have customers. I have happy customers. All is well.

At some point I'm going to talk about the lessons I learned during the craziness of the past several months…just as soon as I figure out what exactly those lessons are. Today I'm just happy be out from under this rock with an opportunity to share one of those stupid simple why didn't I think of this six months ago quick improvements to my work-a-day.

The problem statement

I've got all these different area vying for attention. Improvements to Musicality are très importante, but I've got to run the business too, and the website needs serious work. And all those great, kind, (did I mention good-looking?) Premake users have been waiting patiently for a new release. And oh, the bank account is looking scary, and that iPhone app isn't going to code itself. I am making good progress on things, but I feel like whatever I'm not working on right now is falling through the cracks. Nagging, generalized anxiety.

I need balance. I need confidence that everything is under control. That I'm going to get to that very important thing that I need to get to, and soon. That everything is getting attention and enough of it (but not too much!).

Pomodoro to the rescue

I've talked about pomodoro before. 25 minutes on, five minutes off, repeat until done. (Funny side note: my friends and co-workers who read the blog always comment on what a good idea that is. But then they're surprised when they discover that, hey, I actually do it.) This pomodoro idea has always been kind of a background process. It is how I do my work, but has no bearing on what that work is.

After agonizing over how I could possibly manage everything I've put on my plate and accepting that I can't not do any of it (did you get that?), I decided to try a little experiment and give those humble pomodoro a bit more responsibility.

So. I get eight luscious pomodoro (sorry, it's just a fun word to say: pomodoro) each day, which is about what I can fit into a humane workday after all of my other scaffolds. I divide them up between the different bits of Industriousness to create a weekly schedule, which is currently just so:

M T W R F*
Musicality - 4 - 2 -
Nextgen 4 - 4 2 -
Premake - 2 - - -
Business 2 - - 2 -
Free play 2 2 2 2 2

And…um…well, I guess that's it. And, to be honest, I didn't really believe it would work. I mean, one hour a week on the website? On Premake? Really? But I was desperate so I gave it a go.

I'm a month into this experiement now and, like I said at the start, the results have been head smacking why didn't I do this sooner good.

Alright, so yeah, Premake is only getting an hour a week.* But it wasn't uncommon for me to get hung up on something else and go weeks without looking at it before. Now I'm guaranteed to look at it every week, and I'm building up a good rhythm. Stuff is getting checked off (and 4.3 is coming soon, for real).

All that anxiety about stuff falling through the cracks? About working on the wrong thing? Gone. All the mental energy spent juggling priorities? Now available for real work. All the prioritization has already been done! Everything is getting an appropriate amount of time relative to everything else, and all I've got to do is show up and work the lists. When I'm working on Musicality, I'm working on Musicality. Period, end of story. When the time runs out, I stop thinking about Musicality and I get on to the next thing.

This is seriously motivating. I get one hour this week to work on Premake. When that timer starts I am busting my ass to make it count. I don't check Twitter, or email, or anything else, even during the break. In fact, the only things I'm running at that point are my code editor, a terminal window, Things, and, if I need it, a browser window open to the Premake website. For that hour, that's all I need.

A nice bonus that I didn't expect: I'm having more fun. I wake up in the morning thinking whoo-hoo, it's Musicality day! and I'm totally into it. (Okay, that's pretty dorky now that I see it in writing. Still true though.) There's no oh, but there's those Premake patches that need to be applied, and I need to get more keywords in my AdWords campaign, and I still haven't watched the rest of the WWDC sessions, and… There's just Musicality and that damn Grooveshark integration that refuses to obey its master, and I can enjoy it completely guilt and anxiety free.

And finally: the schedule makes it clear when the day is over. Nothing is left open-ended. When I complete the last block I turn off, and I go away. Very clear line between working and not working. Better time with the family, better sleep, better mental health. Which means that when I am working, I work better.

* Those "free play" blocks give me the flexibility to spend a little more time on "hot" areas as needed. My one rule is that I can only work on stuff that is already on the schedule for that day. So, for instance, on Tuesdays I can only work on Musicality or Premake. Fridays I do my weekly/monthly/quarterly reviews; any time left over I use for whatever feels most important.

Musicality 1.1

Hot off the presses, Musicality 1.1 has arrived. Big new feature: scrobbling! (Say what?) The songs you listen to on Pandora can now be sent to Last.fm, where they will be used to generate new music recommendations for you. To enable this feature, visit the newly added Last.fm preference pane and enter your Last.fm member name and password.


The new Last.fm preference pane

Your password will be safely and securely tucked away into the system keychain, and your Pandora music will begin appearing on your Last.fm profile. This was the most asked for feature so far, and top of my own list as well, so I'm very pleased to get it out there. Check it out and let me know what you think!

In the polishing department, this release plays nice with ClickToFlash, a popular Flash-blocking add-on. And I fixed an issue with the Last.fm song tracking which caused Musicality to occasionally display an extra Growl notification.

Next up: Grooveshark!

Musicality 1.0 Is Here

At last, Musicality 1.0 has arrived!

If you're already running the Public Preview, you can upgrade from right within the application: just choose Musicality > Check for updates... from the menu. Otherwise, take a gander at the Musicality page and download a copy for yourself. I've spent the last two weeks polishing, fixing, and generally knocking out the ugly. It was tough to let it go—there are still so many great things I want to add!—but at the end of the day it's ready for prime time.

My friends know I love my music; I'm listening all day long. I wrote Musicality so I could listen to Pandora and Last.fm while I worked. Not just listen, but actually use them. Create new stations, rate songs, skip songs, discover new music and still stay in the flow of my work. No flipping back and forth between the browser, no juggling extra tabs. Heck, to simply pause the music to take a phone call! In short, to make web music just as easy as iTunes.

Musicality has changed the way I listen to music for the better. I use it every day and, like the quote from Mike, I couldn't imagine life without it. I've really enjoyed watching other people discover it and come to the same conclusion. But as I hinted earlier, this is just the beginning! I still have big plans and this release is just setting the stage for what's to come.

So, I'll raise a glass in celebration and get back to it. If you haven't already, give it a try and let me know what you think.

Enjoy!

A Slight Identity Crisis

My sincere thanks to everyone who took the time to check out the public preview of Musicality this week, and especially to those who took the time to send me their thoughts. Your feedback was excellent and insightful; I'm excited for the work week to start so I can dig into it.

The most concise summation came from my friend Sean who pointed out that Musicality suffers from "a slight identity crisis". On the one hand it's a Pandora and Last.fm player and a good one; I received plenty of positive feedback in this regard. But its features also work with local iTunes music and it displays the currently playing iTunes track. This confused a few people who (rightly) didn't understand what iTunes was doing in a Pandora player. Others saw the iTunes integration and (also rightly) assumed that Musicality wanted to a be a portal to all of their music (and were disappointed when it came up short).

Having thought all of this over, I believe the way forward is to refocus Musicality on its original goal: a great streaming music player. Here are the changes I plan to make:

  • I'm going to remove the iTunes integration which, in its current state, is just confusing people. This will also let me be more focused with the new features and documentation.

  • Since I'm removing features I'm also lowering the price, effective immediately.

  • I'll improve the first run experience, with a more useful startup screen, better documentation, and more information on the website.

I'll be cranking hard on these changes in the week ahead, and hope to have a new release available soon. In the meantime, please keep that feedback coming! I'd especially like to hear your thoughts, good or bad, on the changes I'm suggesting. You can leave a comment right here or contact me directly.

(Now...all of that said: I listen to music all day every day, and I really want a player that makes all of my music easily accessible, no matter where it lives, in a consistent way. So those of you who were wishing for Musicality to do more rather than less: I hear you, I'll get there, and it will be great.)

Thanks again everyone! I'll be back soon with another release.

Welcome Musicality!

I've been hinting about it on Twitter and Facebook, today I am happy to announce Industrious One's first product: Musicality! You can read more about it on the new product page, but in a nutshell Musicality is a Mac OS X desktop client for the Pandora and Last.fm music streaming services. I designed it for people who, like me, love to listen to music while they work. Take all of the great music and features these services offer, liberate them from the browser and give them a proper desktop window, then add in super conveniences like keyboard shortcuts, Growl notifications, and the Apple remote. The result is remarkable: the music becomes something that helps you work, instead of being the work. Training a new Pandora station is fun!

I should mention that Musicality is for the Mac. It uses a few of the latest and greatest features so you'll need Mac OS X 10.6 (Snow Leopard) or later. And of course, you'll need an account (which you can get for free) on the Pandora and Last.fm websites in order to use their services. If that sounds like you, read more about Musicality here or download it immediately from here. This preview is free to use, without restrictions.

What's a public preview?

This public preview release is a way to get Musicality into your hands sooner. It is still missing some features and there will be bugs that need fixing along the way. But despite these rough edges we're using it every day ourselves, and really enjoying it. We hope you do too, and would love to hear your thoughts on it. Which of the missing features are most important to you? What confuses you or doesn't work quite right? Send us your feedback and help shape Musicality 1.0.

While the preview lasts, we're knocking 25% off the price in recognition of your early adopter support. You'll get the final 1.0 when it becomes available, as well as all the 1.x updates that follow, for a nice discount.

So what's missing?

Here are some of the features we're thinking about. Not all of these will make it into the 1.0 release; your feedback will help determine which ones make the cut.

Easier navigation: We're working on ways to make it faster and easier to switch between songs, stations, and playlists across services, including iTunes.

Mini-player: A iTunes-style mini-player, providing song information and basic controls in a much smaller view.

Last.fm scrobbling: "scrobbling" is Last.fm's term for automatically sending songs you listen to on your Mac to their service. Last.fm can then recommend new music you might like, help you find people with similar tastes, or generate nifty charts and graphs of your listening history. You can read more about Last.fm here.

Support for more services: we'd love to support more streaming services; let us know if there is one you can't live without.

Here are some of the rough edges we know about. We'll be working to smooth these out before we reach the 1.0 release.

Better notifications and feedback: Sometimes you might press one of your keyboard shortcuts or a button on the remote and not know if Musicality heard you. We'll improve the feedback Musicality provides so you never feel ignored.

Launch on login could be easier: Musicality works best when it is sitting in the background, letting you know what is playing and listening for your commands. You can set up your own OS X login item, but we can make it easier.

More polishing: There is still some ugly in there. We'll work to get things all pretty, polished, and shiny before we put the 1.0 sticker on it.

Try it now!

So there you have it! You can read the splashy product page or just go get it and try it out for free. If you're already using Pandora or Last.fm, you should definitely take a look. If you aren't, give them a try! They are both great services, and totally free. Either way, we hope you enjoy Musicality as much we do. And be sure to let us know what you think.

Doing More With Less

I had the intention of writing more during this process of ramping up and launching the business, sharing the view from the trenches as it were. But I just haven't managed to get to it; poor time management on my part. Before taking the leap I read all of these interviews with other entrepreneurs, about how everyone was working 14, 15, 16 hours a day to start. I read about people who failed and blamed it on being too complacent, and hoo-boy that wasn't going to be me, no sir. So I hit the ground running and then some, basking in the pearly white glow of my LCD even before my first cup of coffee in the morning, and right up until my head hit the keyboard at night.

This, of course, was stupid.

I knew I was going to be up all night, and so there was no urgency to get anything done early in the day. I found myself gold plating. Or spending too long on research, or on an approach that clearly wasn't working. And then, after dinner when I was less than 100%, I was trying to cram and check things off, resulting in sloppy and ineffective work that would need to be cleaned up the next morning anyway. I was logging plenty of seat time, but my roadmap wasn't getting any shorter.

Like I've never done this before.

I scaled back, and not only did the the quality of my work immediately improve, but I am actually getting more done day to day. My mental focus is better and so I am making better decisions. My attitude is more upbeat and so I am approaching problems more positively which, to me at least, makes them easier to solve. And the time away from the computer is allowing perspective and insight; I often come back to my desk with a better plan than when I left.

Basically I've gone back to the schedule I had when I was employed. I've got my "day job"—building the product, the website, and launching the business—which I work in the traditional hours, usually getting in between 8-10 pomodoro plus my scaffolds. I knock off shortly after the kids get home, and we hang out and have dinner together. Tonight we're continuing Aiden's introduction to James Bond with From Russia With Love, good stuff. Once the kids are tucked in I spend some time with Martha reading or playing a game—she likes to ride shotgun on my video games, shouting instructions and advice until she drifts off to sleep; we're currently working on Mass Effect. Then I come back downstairs, usually around 9:30 or 10 o'clock and log a couple more hours. However, this late night time is strictly for my fun or "hobby" projects. I'm thinking of blowing the dust off my old driving simulation code.

This approach is how I got to the point of starting my own business in the first place, and silly of me to try and fix something that wasn't broken. I learned a lot by researching the startup experiences of other folks but at the end of the day you have to know, and do, what works for you.

So, good morning! Time for that cup of coffee.

Premake 4.2.1 released

A bug in the new file pattern matching introduced in 4.2 has been causing people trouble, so here's an update to get it fixed.

Welcome to the ranks of the self-employed

Today it is official. I am no longer employed; I am now running my own business. It has been a crazy couple of weeks of winding down, of getting the business registered, putting the paperwork together, and finding health insurance for the family (though I am still waiting for approval, on pins and needles). Much of it was easier than I expected, and I'm pleased at how much I was able to accomplish while still winding down the previous job.

Not all of it was simple though. Digging up 10 years of medical history for the insurance application was a trick. We don't have very much to report, but I didn't want to miss anything and get nailed if it came up in the future. This whole area of health insurance has me skittish because I don't feel like I have any real say in what happens, all the control is with the insurer. But at the end of the day I feel good about the choices we made from the options we had.

The Operating Agreement for the LLC was also challenging. It could have been very simple, since the company is just me, but I wanted to allow for additional members later on should everything go well. So I had to consider things like shares of ownership, voting, and the protocols of adding, removing, or losing members. It was fascinating though. I would not have expected to enjoy working on something so legalese but I suppose there is a technical appeal to it, rather like finding the edge cases for an important feature and putting code in place to handle them.

And then there is the rather surreal experience of having an organizational meeting with myself, and capturing the minutes from said meeting for the records. I understand the purpose, but it is still weird.

Procrastination is a worry, but my real fear is of turning it all into "work", into a 10-12 hour a day obligation and losing the nights-and-weekends joy of it. I've posted reminders around my office, pictures and thoughts to help me keep in mind what I'm trying to do here and why. At the end of each pomodoro I make a point of sitting and soaking it in for a few minutes before betting back to the task at hand.

And speaking of tasks at hand, it is time to get back to it. This week is the website: what I've got, what I'm missing, what needs to go where, and how it all fits together. And oh yes: remembering to have fun doing it.

I am Jason Perkins (starkos), the founder of Industrious One. I'm yammering on about life as an indie, getting things done, finding inspiration and, eventually, creating the big audacious stuff.

projects:

categories: