Blog

  • Customer Expectations

    This is more applicable to service work than product work I think. I had a discussion last week that greatly changed the way I work. I learned the customer’s expectations.

    One of the reasons’ people have problems in personal relationships is that they do not communication expectations to the other party. This builds up frustration with the other party when he/she/they fail to meet the unsaid expectations. This is unfair to the other party who is unknowingly making the person angry without knowing it.

    On the flip-side, I’ve found I usually am better off asking what are the other person’s expectations up front to ensure we’re all the same page. In understanding how to best work with others, this is probably the single most important question to ask at any level.

    The reason I bring it up here in this context of relating to work is that my style of work is adopted based on the client’s expectations. They want to see something to develop trust? I build something simple out quickly that works with no intention of updating the code base. They want to see continual progress and constantly change things? I build based on iterations. They want it perfect? I hunker down and test the heck out of it.

    Those may seem obvious or relatively non-important, but I think they deserve to be re-iterated. In smaller teams there is more transparency, so even designers & developers on a team shielded by management are still privy to what the customer expects. On larger teams, or in ones where client communication is small to nil, without a clear communication of expectations, false impressions can not only sprout, but get entrenched into an attitude of development.

    I’m not sure of the signs, but I know if you do recognize them, it is paramount to quickly clearly communicate, again if need be, the expectations. Why?

    If you are a contractor and someone hires you for a small project to “see what you can do”, while the temptation may be to blow them away, I suggest you meet the expectations first, and if you have time, do the additions ONLY when you’ve met the original expectations. If you’re on time but didn’t get to add the extra things, feel free to share “what you wanted to add”. Better to build trust than to over promise and never deliver. I recognize that it may take less time to build the extra’s in initially, but I have failed time and time again when taking risks here, and I refuse to do so again… unless the risk is reasonably calculated, hehe!

    If you are a developer under the impression you can “shoot the client an early build” when they signed off on mockups they expect to be perfect and working 100% as designed, you will fail, give the client a negative impression, and feel frustrated with your efforts being discounted since you aren’t getting the type of feedback you wanted.

    If you are under the impression it needs to be 100% perfect and tested, and the client hasn’t seen anything for weeks or even months, you’ll be extremely frustrated and defensive when they return lackluster feedback and want changes. If the client is open to a more iterative style of development, or you get the impression they are untrusting or shifty in “what they really want”, it’s best to adjust your development style towards that type of development.

    A former executive of General Electric encouraged companies to have a set of company rules, edicts, or ethics that the entire company, every employee, could use in their decision making process. Their wording, order, and amount all had significant impacts on the company. What the company stood for and how they go about accomplishing what they do is held in this list. The point, though, is that they are the “expectations” of how you do business in the company as an employee. This ethical guide leaves no room for questioning on how to approach problems from an ethical point of view, leaves little to no room for doubt on what is most important if written well, and serves as an overall guide for your company.

    This empowering of clear focus is exactly what clearly articulated expectations do. They allow you to be successful, and remove all obstacles, leaving most of it up to your team’s collective skill set leaving your problem solving ability to be focused on algorithms and software bugs instead of customer bad feelings.

    The reason for this post is I was recently in a situation where I assumed the client knew about the benefits to iterative development and agile development and was clearly mistaken. This lead me to develop in a fashion that focused on getting initial functionality down with bugs or not-so-finished functionality into a working build that I assumed I could get user feedback on early. This was a polar opposite of what the client was expecting, made my team, and me in particular, look bad, and was setting me up to fail. After a discussion of the client’s expectations and some context as to why they were like that, I realized my attitude was wrong, my style of development had to change, and I could now be successful my decision making process vs. always defaulting to wrong. The downside was this wasn’t early in the development cycle, so the damage in time spent had already been done. I also learned that you can’t always change these expectations either and just have to deal with it.

    Bottom line:

    • Don’t assume people recognize that even though you didn’t deliver on time, you were going to add all this cool extra stuff.
    • Don’t assume every client knows what Agile or Iterative development is, nor cares.

    Ask the other party what their expectations are, and confirm you can meet those expectations with the understanding you’ll do your best to exceed those expectations time allowing.

  • Yahoo! Messenger Plugin First Attempt… Failed

    I attempted to get a working plugin with the Yahoo! Messenger Plugin SDK via the new beta version of Yahoo! Messenger that Justin mentioned. There were a few inconsistencies and issues with the documentation, but they used the “B” word, so I’ll be nice.

    There was no registry file so I modified the keys myself. The participant code wasn’t clear on where you are supposed to put it. The example code is also missing a ) preventing it from running. Finally, the ActiveX control section is the most confusing thing I’ve seen in my entire life. If you want to make JavaScript look like Perl, there is a great example. Bottom line, you do NOT need the ActiveX code to make Flash work. You just embed your SWF and you’re good to go.

    However, the ExternalInterface isn’t working for me. I posted a bug to the mailing list, but am still awaiting moderation (1st post is moderated). The __flash__addCallback function for ExternalInterface is failing.

    So, I instead used the Flash / JavaScript Integration Kit instead. This worked; I could send some debug messages to Flash to see in a custom textfield, so I know it was working.

    However, my onPluginMessage wasn’t getting fired via an IM message. So, I tried using the IMRecieved event, but it kept saying the object doesn’t support this property ( yahoo.SetEventHandler(“IMReceived”, On_IMReceived); ).

    That’s bs because the line above it uses PluginMessage one just fine, so my guess is the class is throwing some exception. I couldn’t tell if that event was allowed in a Tab window or a SidePanel… the example code wasn’t really clear what was allowed where; kept mentioning “another plugin instance”.

    After 4 hours, I gave up. Hopefully they can answer some questions on the list.

    Anyone get farther than I did?

  • Flex Chronicles #19: DataGrid columnsChanged

    I was building this component to work with the DataGrid. It needs to to really “understand” the DataGrid, and part of that is being very intimate with how the DataGrid’s columns work. This is an array that holds DataGridColumns. These give data on how to draw the grid. The component needed to redraw itself if you passed in custom columns, just like if you passed in a custom array for the DataGrid. Additionally, it needed to update when the DataGrid itself had its columns changed.

    Typically that last one is a rare use case, at least in my experience. You don’t go dynamically adding & removing DataGrid columns. However, if you do not explicitly set a columns array for the DataGrid, it has to read the first object of the dataProvider you send it (typically an array of objects). It then generates the columns from this object. The problem is, this initial event of generating columns does NOT fire a columnsChanged event. It was hard enough getting at the source code for the DataGrid, and I certainly can’t start building a stockpile of modified mx components in our class tree else I risk the portability of our code. Don’t get me wrong, I’d love to, there are a ton of little things I’d change, nothing big.

    So what to do? Fix the function. This is easy in AS2; you just modify the prototype. This fix basically tells the DataGrid to call it’s existing generateColumns method, but in addition, dispatch the same event it’s getter / setter does so those who care can be informed.

    DataGrid.prototype._generateCols = DataGrid.prototype.generateCols;
    DataGrid.prototype.generateCols = function():Void
    {
            this._generateCols();
            this.dispatchEvent({type:"columnsChanged"});
    };
    

    Yes, yes, I know… “Stop blogging about Flex 1.5, Jesse. Blog about Flex 2 instead!”.

    Dude, it’s up to my client, not me… I’m working on it!

  • Red Bull Build – Week 3

    2 weeks ago, I went to Orlando, Florida for the Red Bull Build, a contest Red Bull held for college students. The winners had a design studio built for them for a 3 week stretch to build a game promoting Red Bull X Fighters, an international motorcross freestyle competition. Justin Everett-Church and I convened to offer, as he said, encouragement, advice, and to hang out.

    The place was phat, dude. It reminded me of why I got into this industry in the first place. You walk in and are totally inspired. The motorcross themes skillfully placed to not overwhelm, combined with the art (a lot from Atlanta!), decorations, and pretty lights just radiated style. The Red Bull fridges appropriately placed were very convientant and always stocked with cold Red Bull. Naturally, I helped myself. The room was so full with computers (mainly for net rendering Max 3D stuff) that they had to get an additional AC unit connected through the door to the outside balcony. The hole they cut in the door for the AC unit’s hose they turned into an elephant’s trunk. Chopped up Red Bull cans made up a really nice parrot above the elephant. The AC’s water was emptied out daily and used to water the plants outside. The bedroom was cool, and the lounge really nice. I suddenly realize why HD TV’s are cool after playing XBox 360 on it. There were various Mac Mini’s spaced around with web cams on them so you could see various angles of the studio from the web site. The best, however, was the ActionScript wall paper with branded, Red Bull X Fighters gaming ActionScript.

    I was extremely inspired. I wanted to work there forever. The Red Bull team did a fantastic job as well as offering their assistance, and continuing support.

    It reminded me of the early days of me in the industry. Those types of places are WHY I got into this industry in the first place. Highly creative environments surrounded by varied disciplines all focused on 1 goal: to create extremely cool work! You’ve got 3D over there, audio over there, painting over here, a DB guy there, some coders here, a project manager over here… wow… what a team.

    The ActionScript gent, Gabe, wasn’t there when I first arrived, so naturally I immediately set to get involved to see if I could help. Getting some of the animations into Flash was proving challenging in regards to filesize. A series of images wasn’t going to cut it because animation was about 2.5 megs, and even with just 8 animations, that was a huge initial downloads. Gabe’s idea was communicated to me by the team to use Flash 8 video. Max 8’s alpha’d Quicktime MOV’s weren’t having their alpha recognized by Flash 8, though. Bobby, the 3D guy, got his Rorshak laptop (screen was busted, looked like an ink blot) to import the Max animation into AfterEffects, and then export it out again. We then imported that MOV, and it worked perfect. Upon compiling the video with On2’s transparency, it looked perfect, and was only 28k! I’m sure at a higher rez, it probably would of been 200k, but anyway, Flash 8’s video transparency is the hotness!

    So, that was fun. It’s been forever since I’ve dealt with multimedia stuff in Flash and other design tools. Good to be working with designers and animators again, even if briefly. It was hard NOT to make stuff in that studio; you just constantly felt the urge with the energy and decor.

    Also, was really great to see Justin again. He’s from Yahoo!. He’s also sharp as a tack. We were constantly offering our opinions to Victor, one of our Red Bull hosts, about the project. I agreed with everything Justin said, and the one time I didn’t, he gave me more context as to why he said what he said, and I ended up being wrong. I love being around smart people like that!

    Hurricane Alberto tried to mess with us, and it was really neat to see even an inkling of a hurricane. I know of people think they are horrible, but I truly respect nature, and here I am in the state that prevents mine from getting annihilated every summer witnessing a mere inkling Mother Nature’s fury.

    All in all, it was really great meeting the Zombie Cow team. You could recognize passion in others and I felt like I saw it. It was great meeting Victor from Red Bull, and the others involved including the photographers and other press peeps. The studio made me really nostalgic, and a bit determined to one day create something like that for my team. It was great getting to talk all things Flash face to face with Justin.

    Bottom line, Red Bull is an extremely impressive company. This is the 2nd time I’ve been involved in an event with them, and also the 2nd time I’ve been floored by their execution ability. They way they can portray a professional attitude, exude style in anything they are involved in, and make everything happen like it was always meant to is just amazing to me.

    Anyway, it’s the team’s week 3 of 3, the home stretch. You can check ’em out on the site.

    Here’s some video I took of the studio: vid1 | vid2 | vid3

    Red Bull Build - Orlando, Florida 2006

    Finally, I have some pictures posted on Flickr.