This is a document that I wrote back in October 2007. I forgot about it until just now. My original idea was to define my “dream job” within Adobe, explain exactly what I wanted to do, and tell them why they should hire me. For a variety of reasons I never sent this document. This was during a period in my life when I was considering a few different options for my “career”. I was doing the Flex consulting thing and billing my time hourly (which is pretty sweet). I was talking to Universal Mind about making the shift to a full time employee, and during that decision I considered what other full-time options I had.
When I first started this whole Flex blogging thing my original goal was to get a job at Adobe. No joke, I basically started blogging thinking “I’m going to blog, get good, show people I can do good shit, then ask for my dream job at Adobe.” The Adobe SF office is a 5 minute drive or 15 minute bike ride from my house in San Francisco, and I figured it would rock to work there doing something Flex related. Then my eyes were opened to the world of Flex consulting (the money, the women…) 🙂 But I always had a desire to go work for Adobe. So when I was considering full-time options, I obviously thought of boarding the mothership. So I wrote up a job proposal that describes the kind of job that I wanted. Yes, this is completely arrogant and egotistical. There were no job postings that I liked, so I decided to make one up. This was basically my way of saying: “You guys should want to hire me, but your job openings suck, so not only should you hire me, you should also make this sweet position just for me.”
I never sent this. In the end I decided that the position I was offered at Universal Mind was too good to pass up, and I was being ridiculous for even thinking anything otherwise (which I still believe). But I just read over this proposal again and I think that a lot of the ideas I bring up are still good ones. I would love to see this kind of experimental position created. So without further ado, here’s the job proposal I wrote. This is the main part of the document, I only took out the last page or so that talked about my relevant experience. If you can take this and get Adobe to create this job for you, go for it. I think this job would be sweet and it would benefit the Flex community and the Flex product as a whole.
I am interested in a position within Adobe that would allow me to create experimental user interfaces and data visualization prototypes using Flex. The purpose of this proposal is to clearly explain the ideal position I have in mind, why such a position would benefit Adobe, and why I would be right for the job.
I propose an experimental software developer position to explore alternative and inspiring user interfaces created with Flex, focusing on alternative input methods and advanced data visualization techniques. Work would be heavily focused on Actionscript 3 and, more specifically, utilizing the Flex framework. It is important to emphasize the experimental nature of this work. This work is meant to move AS3 and Flex onto the cutting edge of research and development in user interfaces. The end goal of such work would be to inspire and teach the Flex developer community by publishing the open-source research results and blogging explanatory tutorials.
Reasons for being within Adobe
An important question that should be discussed is the benefit of bringing experimental community-focused development in-house in Adobe. I am already involved in open-source Flex projects externally, and I have done a fair amount of experimental work using AS3 and Flex that has been published on my blog. Regardless of where I am employed, I plan on continuing this type of work. However, being within Adobe will provide some serious advantages to all parties involved.
Experimental projects benefit three distinct stakeholders: me personally, the Flex developer community, and Adobe. However, nearly all the experimental work that I do is done outside of paid working hours, forcing me to decide between work that gets me paid and work that gets me excited (which can often overlap, but seldom do completely). A traditional employer does not have the resources to allow me to work on experimental projects that may or may not have a commercial use. But even if an experimental project is completely useless in the commercial software space, it still benefits me (through personal growth and education), the Flex community (through published source code and inspiration), and Adobe (by generating buzz and interest in the technology). Adobe is the only commercial organization that benefits financially from work that might have no commercial purpose.
While Adobe benefits from projects with no commercial viability, Adobe would also be in a position to benefit from possible commercial success of research projects. All projects would be reviewed by Adobe, which would allow the company to decide if a research project has interesting commercial possibilities. If so, a project could continue as an internal product development effort. If Adobe decides it does not want to pursue a project internally then the project still benefits the Flex community when it is released open-source.
The decision to take on research projects would take multiple factors into account: awesomeness, pragmatic feasibility within a limited timeframe, potential benefit to the developer community, and potential commercial application within Adobe. The first and most important factor is the wow factor of each project. I plan on making experiments that blow people away and show off the strengths of Flash Player. Flex/Flash Player allows us to make interfaces and data visualization prototypes unlike anything ever seen on the web (or on the desktop for that matter). I want to make things that amaze people.
Projects will also need to have short timeframes, at least in terms of creating something impressive that can be shared with the community. Future development of experimental projects might continue after the initial project timeline, either within Adobe or in the developer community, but each project would have an initial exploration phase of no longer than a few months. I’ve found that setting such time constraints leads to more focused development and more impressive results.
A major goal of all projects would be to benefit the developer community through the release of source code. Each project would include blog posts and technical articles explaining how the project was developed. This will encourage the developer community to use the source code in other projects, and will also provide inspiration that will lead to the development of even more impressive projects within the community. I have considerable experience blogging about custom Flex component development and AS3 experiments. I understand the importance of useful resources with well-written source code and explanations. As a developer, I think the most important resource for learning advanced techniques is the wealth of information found in blogs. I know that personally I’ve probably learned more from Ely Greenfield’s code than from any other single source (not to mention the amount of inspiration his examples provide). But now you’ve got Ely off architecting instead of writing code. It’s my personal opinion that Adobe should get back into technically-focused blogging, as opposed to the non-technical evangelism that seems to be the current priority.
The final consideration, which is purposefully listed last, is the commercial possibility within Adobe. A research project may have serious commercial possibilities, and given further development might turn into an official Adobe product. This seems all the more likely given Adobe’s movement into software services that are based on Flex (Buzzword, CoCoMo, Pacifica, Photoshop Express, Premier Express). It’s important to note that I would hope potential research projects would be brainstormed with possible commercial viability as an afterthought. Personally, I believe the most inspirational work is done without first considering the commercial possibilities.
BRAINSTORMING: possible directions for research
Be aware that the list of potential research projects below is an off-the-top-of-my-head list. The number of awesome possibilities that show off Flex/AS3 is nearly infinite. I have provided a list of current research interests, but the intent of this document is not to propose specific projects, but instead articulate why this type of experimental developer position is important.
There are various open-source projects for eye tracking using normal web cameras. This software could theoretically communicate to a Flash/Flex application using a local socket connection. This could allow Flex applications to receive data about where the user is looking within the interface. The possible uses of such data are amazing. We could make a Flex analytics app that would let developers visually analyze how users are interacting with their software. We could track not only mouse click interactions and mouse movement, but now also the actual eye movements. Companies that develop Flex applications would love the ability to accurately track their user’s focus. And with video we could track where people are looking as the video plays, which could be commercially valuable for online advertising companies to run studies, especially now that video-overlay advertisements are becoming popular. Imagine a heatmap that plays live over a video indicating the hotspots that most people view.
I’ve been experimenting with some home-brew multi-touch hardware and an early AS3 api that allows me to incorporate a multi-touch interface in a Flex application. Multi-touch is currently a hot topic because of the iPhone and the Microsoft Surface. In terms of availability to developers, the Flash options for working with multi-touch are the most advanced and powerful. The AS3 API needs a lot of work to be ready for mass use and the hardware is still in its infancy, but the demos that we could build would blow people away.
Alternative menu systems
I’m interested in exploring alternatives to traditional menu systems within Flex applications. I’ve had great success implementing a radial menu in Flex in my TileUI prototype application, I would like to explore menus that size their items based on past usage, three dimensional menu systems, powerful shortcut-key navigation with Flex, and zooming menu interfaces.
I have implemented a 3D interface for an experimental project called TileUI. This project used many available open-source AS3 libraries (most importantly PaperVision 3D and Actionscript Physics Engine). The result is an impressive prototype that shows off the amazing visual capabilities of the Flash Player. I would like to take the concept of 3D interface design more generally, and explore alternative 3D possibilities that would really demonstrate how we can create experiences far beyond traditional user interfaces.
- UPDATE: Well shit, turns out that posting the source of the almost-open-source-but-not-quite-yet Flex SDK is a no-no for now. I assume once the Flex 3 SDK officially goes open source this will be OK, but for now I've been asked by Adobe to take it down. As you say master.…
- I was honored to be asked to give a keynote presentation at 360|Flex in DC last month. All the sessions were recorded, and John Wilker was gracious enough to let me post the full video of my keynote. This keynote was a bit different. I went out on a limb…
- [UPDATE: apologies if this showed up as new in your feed readers when it isn't, I had a database problem and had to restore two old posts. Also, the voting has now been closed, so no need to go and vote, thanks to everyone who voted!] John Wilker just posted…