Idea #11: Desktop Workspaces
In my job, as a software researcher, I do a lot of really different stuff.
All those different jobs require a different workflow. And almost always, a different set of tools.
Right now, I’m putting the finishing touches on a compiler for a domain-specific language that will allow really fine-grained customization of my company’s product. (I’m pretty proud of it.) But, since we’re a small company, I also do lots of other kinds of work. I’m often asked to help out with our Professional Team, setting up complex customizations for our clients. Or, a few months ago I was asked to develop a series of documents, describing a few of my algorithms (with pretty charts and diagrams) for submission to the patent attorney.
When I’m working on the compiler, I have Eclipse on my main monitor (appropriate project open), and TextPad on my secondary monitor (with a few scripts I’m working on compiling). I also have FireFox on the secondary monitor, with tabs pointed to the JavaDocs for the 1.5 version of the JDK as well as to documentation of the JavaCC compiler compiler (compiler compiler compiler). Back on the primary monitor, there’s a command prompt (for invoking JavaCC to parse my grammar and regenerate the parser) as well as another command prompt (for invoking my actual compiler).
When I’m working on documentation, I usually have Microsoft Word on the primary monitor, as well as Paint.NET and yEd (for producing all those pretty graphics).
For professional services work, I need Microsoft Outlook, TextPad, VMWare, and Internet Explorer.
You get the idea.
I’m often faced with a context-switch; I’ve been working on a software research project, and a request comes into our professional services department from an important client. So I temporarily shelf my research work and spend the next half-day in ProServ mode. When I’ve finished with the client request, I jump back into my compiler (or my classification engine, or whatever).
This is one of the things I love about working for a small company. Rather than being isolated on one project all the time, without ever seeing the light of day, I regularly get to work with other departments, seeing first-hand how they do their work. And since I can see exactly how the ProServ team works (and therefore, what the client needs), I think I can better target my research. In short, I can design a better scripting language for our clients, because I’ve been in their shoes.
Anyhow. Sorry for that digression.
The point I was trying to get at is that I’d like to have a piece of software that would allow me to bookmark my current workflow and return to it later. I’d like to keep track of all the applications I currently have open, which documents are currently open in which windows, and where each window is placed on the desktop. I’d like to take a snapshot of the current state, and return to it later.
I could have a few saved snapshots, as a starting point for each kind workflow (to facilitate context switching), as well as a snapshot for over-the-weekend, so that when I return to work on Monday mornings, I don’t spend the first hour of the day trying to remember what the hell I was doing on Friday.
Market Considerations:
I think lots of people would use this kind of functionality, if it was already built into Windows. But I have my doubts about whether people would pay money for an piece of third-party software to do it for them, even if the software was ridiculously cheap. I’m one of those people. Personally, I think it’d be handy if Windows provided multiple desktops, but I don’t think the additional functionality would be worth more than $5 or $10 to me, given how much functionality is already included in Windows by default.
Also, add-ons for Windows tend to be a little hackish, and most of them are pretty buggy through their first few releases. (Actually, most software is pretty buggy through the first few releases. But ordinary software just crashes, wiping out your current document. When a Windows add-on crashes, it could potentially bring down the whole system (or at least, completely freeze the UI.)
Even at the low, low cost of $10, I’d have to sell 5,000 licenses just to bring in $50K of revenue (which is much lower than my usual metric of $250,000). Even if software like this was extremely easy to develop, I doubt it would be financially worthwhile.
Pros:
- This is software that I would personally be interested in using. Throughout the development process, I could certainly eat my own dogfood, as they say.
Cons:
- Producing this software would likely require a lot of tinkering with the Win32 API. That doesn’t sound like fun to me.
- Microsoft is about to release Vista, which includes a lot of UI enhancements. I don’t know if they’d include the kind of functionality I’m describing here, but they might come close.
- Even if the new Vista UI doesn’t address any of these needs, it would be another development platform. And integrating with the Vista UI system would be substantially different than developing for any existing version of Windows. Basically, I’d have to either develop the software twice (to target Vista and non-Vista) or I’d have to choose which platform to support. Neither alternative is appealing.
…
This is the eleventh of 30 business ideas that I’ll be writing about over the course of 30 days. Some of them are full-fledged ideas for standalone products. Others are just band-aids to add functionality to someone else’s software. One of them will become a product over the next six months, and the foundation of my new software business.

July 3rd, 2006 at 11:08 pm
I like to disagree. If such software is available at low cost, I think it would definitely catch attention of atleast network guys (as they are fond of opening zillion windows at a time) and developers (same reason true for them).
But the point is; it should be bug-free! I know how easy it is to say this, but still this remains the number one consideration of the end-user.
July 4th, 2006 at 1:35 am
Best idea yet! I am very much like you, my ‘main’ consulting gig is a dotnet/mssql consulting project. My afterwork research uses a completely different set of tools. And i’m occasionally paid to do work on java stuff…etc.
The desktop idea is good, but theres all kinds of problems with context switching. Perhaps there are more problems that can be solved here in addition to Desktop Workspaces…
July 4th, 2006 at 1:47 am
I like it very much, I will use this app very much. As others I spend whole day changing hats: c# programmer (VisualStudio, NUnit, NDoc, and DOS window), ‘architect’ (Word, Firefox, Graph), web developer (Firefox, FTP, DW, Ultraedit, …) …. it’s so boring rememebring which document I was working on …
July 4th, 2006 at 3:32 am
I would also definitely use this thing for exactly the same reasons as you! I’ve been wishing something like this was available for a long time. Definitely do this one. The geeks aren’t the only people who would use it, many teenagers and the like who watch porn and have to close it as soon as a sibbling or their parents come over would also love this app!
You’re sure as hell to get a lot of users for this app. It will spread virally. Once you have a lot of users, you can easily monetize using advertisements. In fact I would suggest making it completely free of charge and making your $$ through ads, with the option to remove the ads by paying.
Go for it maaaan!
July 4th, 2006 at 6:03 am
It’s hard to compete with free software like VirtuaWin and I’m sure there are others.
July 4th, 2006 at 6:48 am
Great idea, unfortunately MS has beaten you to it with their Virtual Desktop Manager powertoy for XP…
http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx
It’s been a while since I used it, but I think it gives you 4 desktops you can switch between and shows a preview of each when you switch.
Doesn’t mean it couldn’t be done better though! :)
July 4th, 2006 at 9:19 am
Sure it would be great, but technically I don’t know how you could generalize the ability to reload applications back to the state they were in. Maybe I’m misunderstanding the point, but then maybe your customers would too.
July 4th, 2006 at 10:10 am
The idea is nice, but probably not to realise as a one man project in reasonable time. Its impossible to store the state of every application if you are not creating memory snapshots, even if you can do it with the classic MFC MDI application via the API java and other applications are not covered.
Plus there are already several possible solutions, though they differ in price and features:
- VMWare Workstation 5.5. allows you to do exaclty this, it has a snapshot tree where you can store the current state of a machine and return there later. The big advantage is that it stores everything and you have a 1 to 1 image of your current desktop. There are some problems with multiple monitors but once you have worked around that it is an every developers dream. (those who are not using are really missing out)
- Another option is to use one of these multiple desktop tools that range from free to unbelievable expensive. Simply create a virtual desktop for each workflow and switch as needed. Your current state will be there in the background and you can switch any time. If you want persistence over a longer time simply use the hibernate feature.
But I prefer the VMWare solution in such cases, at least if its an set of applications I use less frequent.
OK, enough advertising for VMWare, I’m collecting my fee from them now =).
July 4th, 2006 at 11:33 am
For what it’s worth, there’s a pretty good JavaCC plugin for Eclipse here:
http://eclipse-javacc.sourceforge.net/
Seems to work well. I still do all my JavaCC work from the command line as well, though; just more convenient to type “javacc -debug_token_manager foo.jj” or whatever.
Best of luck with the DSL, sounds very cool.
Tom
July 4th, 2006 at 12:32 pm
Yeah, I think this would be a big technical challenge. Restoring a snapshot would be much simpler than taking a snapshot. For example, restoring a snapshot would mostly involve:
* Knowing the command-line parameters for numerous applications, and invoking the right parameters to launch an application with the correct document.
* Allowing the user to define new invocation paramters for new kinds of applications. (For example, launching a java application generally requires invoking ‘javaw’ with the name of the Main Class as an argument.
* Using the win32 API, get the HWND for each application, as it gets launched, and set the screen coordinates appropriately.
* Even those I could use these kinds of techniques to launch most applications (IE, FireFox, MS Office, Visual Studio, Photoshop, Eclipse, etc), there would doubtless be plenty of applications that would not be launchable using these techniques.
For example, Photoshop can be launched, with a particular document, using this command:
"C:\Program Files\Adobe\Photoshop 7.0\Photoshop.exe" "d:\path\to\my\photoshopFile.psd"
Of course, taking a snapshot would be somewhat more difficult. I could use the win32 API to get all of the current windowed applications, and find out which processes owned those windows. I could also get the sizes and coordinates of those windows. But it would be difficult to determine the documents currently open in each application. I know you can use XPCOM to get the current document from FireFox, and I know there are tricks to get the current document name from IE or MS Office, but I don’t currently know how it works. I’d have to do a lot of reasearch to figure out just how much was doable.
July 5th, 2006 at 12:15 pm
Good Idea, but I solve this problem using VMWare Workstation.
I have different Workstation images for different set of tasks, but I keep all of my code/data in Subversion or local drive so I don’t have to worry about VM’s state.