Blog

  • Using Visualization for More Accurate Time Estimations

    Preface

    I hate time estimations. Tracking time for contract work takes a close 2nd. Unfortunately, I’ve never seen a lot of combination of both; estimating a project’s time line, and comparing the expectations with the realities at the end… and then actually ACTING on that data. In fairness, “the end” is extremely hard to define sometimes.

    The only advice I have for time tracking is to do it while you work; postmortem is a bitch, and even harder to remember details when a client body checks you on a particular item. If you’re not a slack bastard like me, more power to you.

    Time estimations, on the other hand, I have found 2 good ways to do. The first is experience and the second is visualization.

    Experience

    This isn’t so much, “code for a few years, and then’ll you get good at time estimations”. Rather, you document how long you think something will take, do it, and document how long it took. You then compare the 2 times. Do this a few times. If the results are dead on, right on. If they aren’t, identify why. These risk factors are what you can watch out for next time. Therefore, why you can feel confident you can code a solid web service call in 8 hours, if the web service itself isn’t done, and it ends up taking you 12 total hours instead spread out over 4 days, you can then mark that next time you give a client a proposal with time estimations. Aka:

    • Web Service Call = 8 hours, high risk
    • Login Form based on comp = 2 hours, low risk

    Then, you can mitigate risk in a number of ways. Clearly communicate to client the risks to hopefully remove them, hit those high risk items first, or merely charge fixed bid for the low risk tasks, and hourly for the high risk ones. That, or just pad those particular items in your time estimations with a number of hours based on your past experience. For W2 work, project managers can interpret high risk items, and add their own padding and formatting the official document they showcase those in charge of pricing. For contract work, you can merely pad the high risk items and leave off the low/high risk labels.

    I’ve coded so many bloody login forms, I got that shiz down pat. Web services? Hit or miss. If the back end code is solid, I can knock out in a day a good, re-usable chunk of code depending on what it does. If the back-end code isn’t solid, it could go on for weeks. These weeks could actually only total 20 hours, but even though that’s only 20 billable, getting done today vs. getting done in 3 weeks is a major deal.

    And yes, it IS that black and white to compare the estimated times vs. the reality. I’m making the assumption above that your task assessment skills are dead on. Just because you set out to code a web service that gets a list of people from the back end .NET server, and later found out you had to code 4 instead because your app grew in scope… that counts as the same task. You need to be able to easily quantify tasks into either milestones unto themselves, or a set of mini-goals that lead up to a larger milestone. Therefore, if you see in your time estimations that you grossly misjudged a growth of scope creep in a particular area, or across the board, this indicates both a problem with your time estimations as well as task assessment… that, or client management.

    You cannot give effective time estimations on a project unless you understand the scope of the project. If scope is undetermined, and you’re getting paid hourly, the best you can do is the best you can do. Therefore, making time estimations based on already flawed task assessments will result in padding on high risk items. Those paddings, however, can be pretty accurate if you’ve seen the chaos enough times to quickly identify the risk areas and pad accordingly.

    Visualization

    Professional athletes who have a winning track record have often mentioned that they saw themselves winning before they did it. Some others have actually performed a type of meditation before a game where they close their eyes, relax, and visualize themselves winning. In the case of Hockey, they actually picture themselves in their imaginations deftly maneuvering the hockey puck to the goal. Resolute, they then go out and act out those visualizations.

    Another analogy is the end of every Chuck Norris movie. Antagonist ticks Chuck Norris off. Camera does a close up head shot of a wounded, resolute, and generally pissed of Chuck Norris. The audience has just performed the same visualization that Chuck Norris has: He overcomes the pain and opens a can of whoop-ass on the bad guy. Chuck Norris’ character then acts out that visualization.

    Visualization is also lauded by a lot of inner peace, motivational, and how to make money books. I prefer inner turmoil, I’m motivated, and already make money. I do find, however, visualization is good for body checking your time estimations. I play to win, so it seemed a good match to me.

    There are 3 types of ways people learn which are audio, visual, and tactile. Choosing the one, or combination thereof that best represents you, allows you to do effective visualization of how your time estimations will work out. I’m an audio learner; I like to talk things out. I’m the type of guy who asks people questions, and then answers them myself, then thanking the person for their help. Said person is typically left with a strange expression, curious as to what just happened.

    It’s a form of role playing to challenge the assumptions, typically talking it over with whoever the project manager is, like so:

    “So, I’ve estimated 82 total hours here, QA included. Each set of tasks is based on either a coded component, visual design implementation, or back-end web service I need to get data from. Is that accurate? Feels accurate; I went with my gut, challenged it, and tried again, typically reaching the same amount of hours. Now, let’s visualize this out.”

    “I have to sit down on Friday, and do 2 things… first, I have to do some quick re-factoring to organize client code into a specific package structure. That’ll probably take 3 hours. Second, I have to then get 2 other developers comfortable with the code setup. That’ll take another hour at most.”

    :: looks at time sheet ::

    “Do I have time allocated for 4 hours of ramp up time? It looks like just a list of components that I need to create and then wire up; I don’t see ramp up time on there.”

    You don’t want to ever feel like your working on borrowed time when your coding. To me, it detracts from me doing good work vs. working work. Working in an environment where you feel like you are walking on egg shells is the same type of uncomfortable feeling. You want to feel confident in your guesstimate of work, and go forth with a positive attitude. If you start doubting yourself right out of the starting gate, that’s a horrible way to feel when just starting a project.

    Using visualization helps you see just how you’ll start the project. If you act it out in your mind, you’ll see all those other tasks that you may not have quantified on your list of tasks. Modifying your ANT tasks, downloading and installing Flex Builder 3 beta, doing production art (break up) on the PSD to use in Flash or Flex… all are tasks that individually seem just part of the job, but collectively add up in sum time taken.

    The reality is, it’s a ton easier to put these tasks on a time sheet if you’re W2. As a contractor or consultant, it’s really hard to justify why the client’s paying you $300 to “get organized”. If I were hiring someone, I wouldn’t pay for that either. The point here, though, is to identify the items you left out on your time estimations that DO have a direct impact on the deadline. If you’re a contractor between projects, you’ll need to keep in mind that un-paid ramp up time to ensure it doesn’t eat into your billable time. This is especially true on fixed bid projects (which I refuse to do, btw; I find a hybrid approach with some parts being fixed bid while other high risk items are hourly can possibly work… per talking to one of my bosses, haven’t tested the theory out yet).

    Exposing Risk

    Visualization also exposes risk factors.

    “I need to hit this ‘getPeople’ web service, and get it working enough to ensure the data is good and will work in my customized List control. I got my VPN working this morning, and can use the web service tester app both while on VPN or on the external wireless network. The web service returned good looking XML every time I hit it.”

    Good. Low risk there. Connection’s good, web service is good, and you’re ability to test from different networks is good.

    Imagine if you did NOT yet have VPN access; do you have to go through a ton of company red tape to get a login? Do you need an account in the back-end system before you can get a user token to actually hit the ‘getPeople’ web service? Have you even tested the ‘login’ service that generates this user token? Are you positive the external wireless isn’t still hitting the internal network behind the firewall?

    Once you start talking through this scenario, and the insane challenges associated with coding in this wild jungle, you’ve quickly identified a high risk item that requires appropriate padding. It also makes it easier to prioritize the more higher risk tasks first.

    For some people, it’s hard to get out of the engineer mode and into the role playing mode. Therefore, visualization can be done a few minutes after you’ve done your time estimations, or even a day after once you’ve “slept on it”. You’ve taken the programmer’s view of what needs to be created. The next day, you then walk through the work flow scenario with a fresh set of eyes and a fresh cup of coffee.

    For contractors/consultants, don’t do this in front of clients. They’ll get nervous when you start “magically” remembering new tasks you need to account time for. However, it can be useful when vocally visualizing someone ELSE’s time estimations that you don’t agree with; walking through each task brings a sense of reality to them and can add weight to your argument. Use your best judgment.

    Conclusions

    Being able to quantify software development into a set of tasks that fits nicely into an Excel spead sheet which is dropped into a Microsoft Project gant chart is just plain hard. Software development is an art. From the get-go, your setup to fail. However, it’s also a business and indicating cost is just a fact of life. It comes easier with experience, both correctly identifying all tasks in appropriate size as well as with the appropriate amount of time for those tasks, padding included on high risk items.

    Visualization is just a 2nd pass, just like database normalization or 2-pass video encoding, that you can apply to your already created time estimations to double-check their accuracy. It comes at it from the qualitative angle; “Am I really going to work the way these tasks are laid out? Are these tasks valid and thorough?” Visualization helps answer those questions, identify missing tasks, and expose risk items.

    Self actualized project timelines 4 t3h bling bling!

  • Making the Business Case to Attend MIX 2008

    Last December, I was invited to Microsoft to get a preview of what Microsoft was working on and would showcase more so at MIX 2008. They are definitely doing cool work, and I’m sure will have a lot of great things to showcase.

    Now that I’m W2, I have to give my CTO a list of conferences I’d like to speak at this year. I negotiated 1 per year as part of my hiring agreement. Since I don’t see the need to be uber-engaged in selling myself when I’m 100% focused on my at work endeavors, that seemed fine as opposed to the regular 2 or 3 per year. I figure I can possibly finagle 1 more in if I play my cards right. The worse he can say is no. 360Flex doesn’t count because it’s in my backyard… well, sort of. Closer than Italy.

    If I attended MIX, it’d be the first conference I’ve attended where I didn’t actually speak. I learn a ton at conferences in between the sessions; I don’t actually like attending sessions as much as I like engaging people outside the sessions. Either way, both are great places to learn. However, speaking at a conference allows you to be perceived as an expert at a subject matter, even if you really aren’t (same as writing a book). Further, it builds credence to your personal brand and thus makes you a more desirable candidate for hire. You get to learn, you build brand awareness about yourself, and you get to practice being a better public speaker. Therefore, it’s pretty easy to justify the money for travel & accomodations since if you speak, you don’t pay for conference admission tickets.

    Not speaking at MIX 2008 isn’t such a bad thing; I’m a n00b in the Microsoft world. I’m a Silverlight n00b as well. Therefore, going to a conference out of my comfort zone, yet still relevant immensely to my industry, still seems like a good thing.

    From a business perspective, there are a lot of reasons. First, I work for an online video company. We make money in allowing customers to have video on their websites and used in their software. They can deliver 24/7 networks, on demand video, syndication, and live broadcasts. Silverlight’s trump card, which its using to pole vault quickly into relevancy, is its cross platform angle at delivering windows video. This is important for a number reasons. My company has a significant amount of investment in Windows Media forming an end to end solution for live, 24/7, and on demand video with support for remote locations.

    The technology that supports this based on what I’ve seen is way more mature on the back-end with regards to transcoding than Flash video. No one uses Spark anymore. On2’s price and back-end encoding solution examples are a joke and thankfully will hopefully get annihilated pretty soon by the tidal wave that is H.264, aka MPEG-4 Part 10… assuming licensing doesn’t spook people away. Thankfully, I have the luxury of bitching about those back-end solutions, but not actually having to code nor maintain them.

    After seeing a 2 meg bitrate H.264 video stream from a secret FMS3 enabled-Akamai server today with no hiccups, I’m chomping at the bit. And so are our customers. Yes, they want to pay the extra bandwidth fee’s that are associated with the higher bandwidth consumption of H.264. Why? ‘Cause it’s the hotness! Curious if they’ll do so for VC-1?

    To be fair, we debated getting 15 of us to all do it at once to see if we could clog our 30 meg pipe.

    All you Net Neutrality people need to give up. H.264 content, and thus its immense file size, is yet another reason why telecoms and cable networks need to charge by bandwidth to make any money off of their, currently, dumb pipes. While I’m a major fan of flat fee’s as a consumer, I have a feeling that as businesses pay companies like mine to deploy H.264 content, millions of consumers will consume it. That is also consuming a TON more bandwidth when you look at it in scale. Mark my words, Texas is only the beginning.

    As more and more customers ask for Flash video, both open source and commercial institutions are releasing a lot of better support for getting Flash transcoding solutions into a back-end work flow. That’s great, but there’s still a lot of great code deployed on Windows Media, today. The front end is the only problem. Silverlight hopes to remedy that with not just a solution to the suck that is using Windows Media on the web, but also a multimedia client technology to build atop of.

    Some customers will ask for both as the marketing machine continues to crush all in it’s path. Therefore, Silverlight and Flash cannot be viewed as solutions unto themselves, but merely a solution for a particular customer’s need. Aka, you need to support both. This isn’t to return to the horrid HTML window pop-ups of the past where you chose what plugin to use. Rather, it’s to take advantage of already coded and working back-end services, additional codec options, and the fact that Silverlight is a rich internet platform just like the Flash Player is.

    That last part is the main key here. We are using Flex and Flash at work for both PHP and .NET and so are a variety of other companies. However, I have a feeling a lot of companies that are either using .NET exclusively, or are associated with firms that use .NET for specific services will want a Silverlight solution from us when given the choice between Flash or Silverlight. You can either say no, and not take their money… or you can say yes, give them Silverlight, and take their money. What’s the cost?

    That is a rehetorical question as I don’t know… building Flash video players that scale for millions of customers is hard. Maintaining that code, sequestering custom development for those customers who front bling in organized code repositories, and balancing legacy features with additional latest greatest is REALLY hard.

    As I read the above 3 paragraphs I just wrote, it really has less to do with learning Silverlight for it’s own sake (features that Flash Player doesn’t have, some features done differently, and different way of doing things to expand my personal horizons), but rather to ensure that when customers (while I’m W2) and clients (if I ever go back to 1099) ask for Silverlight solutions, I can give an informed answer.

    Do I want to be capable of responding? To be honest, no. I love doing Flash & Flex, and using Blend and Visual Studio is not yet as fun. If it’s fun, I’ll use it; if it’s not, I won’t. That joy in using products is what drives me to create quality software for my clients and customers, even when I’m exhausted. I think I see the potential, however. More importantly, I believe. A lot of people during the Flex 1 and 1.5 days said Flex was destined to fail because of it’s draconian business unit (except for Lucian Beebe, he is the f”ing man!), its insane price tag, and with a compiler that was on the server instead of the client.

    Yet Flex is now an insanely successful product. Regardless of what the Adobe financial reports say, businesses are dying for good Flex talent. I knew it wouldn’t for 2 reasons. The first reason, and the most subjective and thus invalid, was my “aha” moment when using Flex 1 for the first time. I used 1 binding and built a form. What was special at how damn quickly I did it, and how flexible the component layout engine was. I knew I was using something special… even if it cost me $17 bucks for 2 demo CD’s since you couldn’t download a demo of Flex back in the day. I made that $17 back in consulting, so it’s all good.

    The second was in meeting those in charge of Flex and deluging them with questions, accusations, and frustrations. They had a good grasp on the industry, fearful perception (I’d argue un-resolved frustration) around the Flash communities vitrol laced reactions, but most importantly a consistent drive across the team to take Flex to the next level. You could see this in the early days of the Flex team and their participation in Flexcoders. They’d not only answer questions in the community, but ask them back. They’d do what other companies sometimes consider a faux pau, and use their customers as sounding boards.

    I saw that same thing at Microsoft, both while I was there, and outside the walls. That determined attitude, drive, and already deployed marketing budget means Microsoft means business. Granted, there are a lot of different facets, multiple hands in the jar, and way more challenges. Regardless, this isn’t Liquid Motion.

    Us Flash Developers know that the only reason we were successful was because our plugin “just worked”. Those 2 words (in present tense) became a catch phrase used to sell Java developers on what Flash Player was a great runtime to develop for vs. JRE. If Silverlight gets there, and actually works well enough on both Mac and PC across browsers, we’ll see more and more agencies doing Silverlight work. We’ll start to hear about more and more Silverlight projects done behind the firewall (that’s where Flex started remember) and undoubtebly the obligetory Techcrunch series of posts about startups using Silverlight in some shape or fashion for the crux of their business. Even if it isn’t the crux, bloggers in the .NET sphere will be sure to tout it up as being so.

    In conclusion, I want to go to challenge my assumptions. I hate Las Vegas with a passion (if I were single and 22… sure, why not, but I’m not now, so…). I want to see if the majority .NET shops really do conform to my stereotype of “using Silverlight because it was made for our back-end even though Flash or Flex would work just fine right now”. I want to also see if they conform to my stereotype of the same way Enterprise Java devs view design; as not playing an integral role in the development of applications, being only useful to make initial sales via eye candy. That same attitude results in hiring hybrids or “Silverlight Developers with design experience” to augment teams when confronted with customers who are used to working with agencies and are wondering why this software development shop doesn’t give a flip about the accuracy of their design comps. I want to see if the general consensus and excitement is really towards WPF, and not Silverlight… or if the .NET guys are really just biding their time to jump on board the RIA band wagon. I want to see those Designers who are actually getting paid to not just do WPF design, but Silverlight specific design work and actually using Design and Blend.

    Additionally, I want to see Microsoft’s reaction to these things. Does it affect their attitude? Do they give off the appearence they’ll change direction or merely confirming they are on course?

    Reading the blogs outside the Flex / Flash / Java / ColdFusion bubble, a lot of the .NET bloggers seem to be a lot like us. Completely in love with their technology, and willing to push it into areas other things may be better at, yet their love and drive make it work. I see a lot of similiarities and I’m curious how this story begins. Knowing so helps me contribute effectively to the business I now work for.

    Besides, there is everything right with getting out of your comfort zone, meeting new people, and learning.

  • Gaia Arguments, Real World Bridge Pattern, and gaia_internal

    The Gaia Beta was released today by a friend of mine, Steven Sacks. Gaia is a Flash framework created for Flash Designers & Developers who create Flash sites. The reason this is an important is that it now supports ActionScript 3 and Flash CS3.

    Discussions

    I must of racked up at least $500 in cell phone / mobile bills talking to Steven about Gaia over the phone over the past few months (he’s in Los Angeles, I’m in Atlanta). This doesn’t include numerous emails and IM’s. We’ll argue about implementation details, coding styles, and design pattern implementations. Sometimes their just discussions about details because we agree and are on the same page. The arguments about terminology and Flash authoring techniques are usually one sided; Steven stands his ground, has chosen pretty appropriate industry lingo, and knows his audience way better than I do.

    My job isn’t to congratulate him on the immense amount of work he’s done on the AS3 version, on porting the new ideas gained in AS3 development BACK into AS2, or for just the good execution of his passion. My job is to be his friend. That means to question everything to ensure he’s thought thoroughly about something, to be devils advocate, and generally be a dick to see if he cracks. If he does crack, it’s a weakness exposed, and we then have to discuss about who’s opinion on fixing it is better.

    This doesn’t happen with everything, only small parts of Gaia that he asks for feedback on. The rest I have confidence he already got right… although, I did manage to write 24 TODO’s/FIXME’s for 3 classes he wanted my feedback on. F$@#ker only agreed with like 2… or at least, he only openly admitted 2 were decent. I’m sure if I did the whole framework, I’d have more, although, I might have less once I then understand most of the design decisions :: shrugs ::. Doesn’t mean Steven would agree; it’s his framework and he’s a good Flash Developer. With his understanding of other Flash Designers & Dev’s and how they work, he ultimately knows best.

    Solving the “no more _global” Problem

    One part Steven DID let me actually help a lot on was the global Gaia API. In Flash Player 8 and below, this Singleton existed on a namespace called “_global”. This was a dynamic object you could put anything you wanted on and all code everywhere, including dynamically loaded SWF’s, could access. Aka, the perfect place for the Gaia API Singleton. Naturally, we both were like… crap, what the heck do we do since there is no _global in AS3. Damn Java developers can do DIAF. Someone get that Python creator guy’s number and tell him that Macromedia would like to re-consider their offer back in Flash 5 instead of going with ECMA… oh wait… Macromedia is no more… dammit!

    It just so happens, Steven remembered reading my blog entry with the proposed solution for Flash CS3 not having an exclude.xml option. The server architect and long time Java dev at my work, John Howard, suggested the Bridge pattern idea initially, explaining that interfaces are smaller than actual class implementations in file size. Steven and I discussed the Bridge pattern way I suggested, using internal classes in an SWC sneakily injected into people’s Libraries, and another solution proposed by one of my readers, Sanders, in the comments. The Bridge pattern seemed best, but we were concerned about file size because it was an un-tested theory. As you can see, this turned out to be a good theory; 1.3k == f’ing dope!

    When I went back and re-read my blog post I realized I didn’t really explain how the Bridge pattern works in Flash Developer lingo. As my blog reader audience has accumulated Java & C++ devs just getting into Flex, I’ve tried to use lingo they’d jive with. So, let me re-hash what the Bridge pattern attempts to solve in 1 2 3 4 sentences 1 paragraph.

    You cannot exclude classes in Flash CS3 using exclude.xml like you could in Flash MX 2004 using AS2. Therefore, if you re-use classes, say “Gaia.api.goto” in other FLA’s that will later be loaded in, you’re duplicating classes in many SWF’s, greatly increasing the file size of your entire site. Instead, we just created Gaia to be a shell that makes calls an object “we’ll set in the parent SWF”. This Gaia shell class compiles to 1.3k vs. the 6 to 12k the implementation would of normally taken. That’s 10k (probably more) savings per SWF.

    These savings make HUGE differences on enterprise size Flash sites like Ford Vehicles and Disney; basically any huge Flash portal that gets one million+ visitors a day. Akamai or other CDN‘s aren’t exactly cheap. The 10k you save per SWF could be $10,000 in bandwidth costs per month. But screw the bandwidth costs, it’s all about the user experience, baby! Fast for the win.

    The gaia_internal namespace

    The down side was I KNEW we’d have to expose at least 1 public variable on the Gaia Singleton. We don’t want people setting things on the Gaia api class they aren’t supposed to; whether on purpose or by accident (accidental h@xn04?). So, I copied what the Flex SDK does. They use this thing called “mx_internal”. It’s a namespace the Flex team created for the same situation: You want to expose a public property, but you don’t want other people messing with it.

    You can’t use private because it’s not accessible by other classes. You can’t use protected because you have to extend the class. You can’t use public because that implies its ok to touch… like certain outfits certain genders wear… and in the same vein, that doesn’t really mean you CAN touch! In that scenario, it’s a wedding band. In the ActionScript scenario, it’s using a specifically named namespace you create your self. I suggested gaia_internal. That way, only Steven can use that namespace and thus set those properties. If other people do it, they’re either really smart, or crackheads. For the latter, it makes it easier to call someone out on doing something un-supported if they are actively using the gaia_internal namespace in their code.

    It ALSO makes it easier to change implementation details in the future if Steven so chooses. Like all things in Flash, even AS3, things will be custom created for certain projects. This could include changes or extensions to the Gaia framework itself. You should encourage this instead of be against it. Therefore, keeping weird internal things in a specific namespace helps, at least a little, ensure existing projects won’t have to worry too much about changes & improvements in future versions of Gaia.

    Future Solution: Using Flex’ compc

    Yes, Sanders, your solution is technically superior. As others have told you, however, it is too complicated. Flash Developers thrive on getting cool stuff done quickly. While I’m sure some Linux afficiando, command line pro, Emacs weilding zealot will argue that he can run your solution faster than I can hit Control + Enter, most Flash Devs don’t care.

    We all agree the Gaia api should be 1 class; not 3. The whole point of the Bridge pattern is to support new implementations. I highly doubt Steven will ever create a new implementation of Gaia; we just followed the pattern to save filesize.

    Therefore, what you need to do to both win the hearts of millions of Flash designer & developers everywhere as well as fix a flaw in Flash CS3 is to write a JSFL script that does your solution; and then have a way to map your JSFL script as a keyboard shortcut (this part is easy; its built into Flash). The golden rule in Flash is you should be able to “Test Movie” and see it work. It’s the same thing as checking in code that compiles into a Subversion repository. If you nail that, you’re golden and the Bridge pattern way will then become a nightmare of the past we can all forget.

    If you need help writing JSFL, let me know; my skills are rusty but I can re-learn pretty quick. The goals are:

    1. Get a JSFL script to compile as normal so you can see a movie work via Control + Enter “Test Movie”
    2. Get a JSFL script to run your magic so the classes you don’t want compiled in (aka Gaia, PageAsset, etc.); you can then map this to like Control + Alt + Enter (or whatever)

    Conclusions

    If you’re a Flash Developer who builds Flash sites, go check out Gaia. If you’re using a ton of loaded SWF’s in your site, go check out my original entry as I now have proof the theory works. If you’re Sanders, GET TO WORK! AS3 Flash Site is about to die… needs Sanders’ bandwidth reduction, badly!!!

  • A Flash G Talks about Silverlight

    At Mix n Mash 2k7, I was interviewed by Nishant Kothary from Microsoft to talk about Silverlight and Flash Player for 10 minutes. It’s kind of quiet with ambient noise so use head phones, or blast your volume.

    That’s “G” for Gansta’, not Guru; I do not impart wisdom, rather I lay da funk!

    A Flash G Talks about Silverlight

    Jesse Warden Silverlight Flash Interview