22 June 2009
Most of my day is spent working with Adobe Flex and related technologies. Although I dabble in Flash-land and can crop a picture in Photoshop, my home is amongst the classes and interfaces Flex offers. Even though Flex is a really cool technology, to make the most of it you need to be able to get data in and out of your application. To that end, I spend a fair amount of time working with BlazeDS, LiveCyle Data Services, and ColdFusion.
As of late, every free second has been poured into FlexUnit 4. This project allows developers working with Flex and ActionScript projects to use the latest unit testing techniques and tools in their projects. It was created using Flash Builder 4 and Flex. We've been working closely with Adobe to ensure excellent compatibility with the upcoming releases of Flash Builder 4.
Many of the customers I work with tend to build enterprise systems, which tend to be a bit more secretive about what they build, so let me answer this more in the abstract. I would say all of the successes and failures have had a few things in common.
First, to have a successful project, you need to complete projects. So, teams that are successful know exactly what they are building. They know why it is important and they care about getting it done right.
Second, projects that are commercially successful are usually using technology as a solution to a real, existing problem. Sometimes we all tend to forget that software is just a way to solve a problem. When we invent the problem to justify a cool solution or start treating software as the end and not the means, the product (usually) fails.
Finally, you need to build software that people want to use. Although software that is difficult and frustrating to use is employed in many organizations, its lifetime usually only lasts until there is a better solution. If you can solve a problem well and make the tool rewarding to use, you likely have a success.
In this industry, technology changes minute by minute. So, the challenges I face are:
I learn new technology by reading everything I can find about the topics: blogs, articles, books, help files (yes, I actually do read the help files end to end). I also build prototypes constantly. Every time I find a new piece of technology I find a reason to build something in it. It might be something useful, it is likely something useless. When the OLAP grid showed up in Flex, I decided I needed to have a real time chart of my wine closet breaking down bottles of red, white, etc... geeky, sure, but I learned something.
The secret to number 1 is actually number 2. I learn everything I can under the premise of needing to teach it to someone else. Ideally, I learn something along the way.
The second and third challenges though I can't claim to have solved. I just keep working on number 2, trying to get a little better each time and number 3 simply comes down to making a decision based on the best information you have.
Monetizing your skills is simply about having the guts to assert that you are great at what you do and then having the diligence to never, ever, stop learning and being better than the day before.
Adobe makes great tools but they are just tools. They need someone skilled to use them. So, the way to ensure your success is to learn to use them well. To keep your eyes open for places where they might help solve a problem and to be willing to go outside of the things you already know to find those problems.
Elegant solutions that solve real problems. My inspiration usually comes from my peers in the industry. If you look around, there are a lot of great applications being built and a plethora of great ideas being written about every day in blogs around the world. There isn't a day that goes by that I don't see something cool.
Everywhere. We are in a society that inundates us with information. There are blogs, feeds, articles and samples produced by Adobe and the community, however, there are also tech and professional organizations, user groups, magazine, etc. The information is there if you want it.
I don't read any everything of any particular blog. Instead I pay attention to feeds.adobe.com and watch for topics that interest me. When I see something, I consume it.
I'm a geek. I am okay with that. I am a geek in just about everything I do. So, when I am not being a Flex geek, I am being a food geek. Feed me a really good meal or let me sip a great wine and I am excited. I will talk about a good dinner for a week. It's just part of who I am.
In our daily lives, information is conveyed to us in a lot of ways. Look at the books on my shelf and you will see many with beat up covers and dog-eared pages. Look at the stapler to the right and you will see a thin layer of dust on it. Without saying anything, you can tell what is more important to me.
Right now we still interact with devices, even the most modern, in a relatively unnatural way. I can't wait until interacting with technology takes on a new form. I don't want to use a keyboard, real or virtual, to get information. I don't want to right-click on the word information that I just typed in the previous sentence and ask Word to correct the spelling.
I want new and natural ways to convey information using all the things our brain does well, not just the ones that are convenient to display on a screen.
A piece of software that generates whatever software I want, without the need to write code or even formalize goals. Then (most) projects would be easier, scope creep would be much more manageable, and I could try out a lot of ideas without that whole effort thing.
Right now, I don't know that there is a faster or more effective way to produce interesting and rich application than Flex. The core features combined with the flexibility (and access to the source code) provide me with an infinite playground where I can make new and interesting things occur. That type of freedom and power always keeps me inspired and engaged.
Ha! If I could see the next opportunities or know what is next I would make more money as a very highly sought-after fortune-teller. However, barring that career choice for the moment, I want a chance to build really great applications in Flex for more clients. I want to see Flex do more in enterprise-level products. I want to solidify Flex as the way to write a certain class of application. So, just a couple of goals.