I’m still in the midst of wrapping up a 6 month Flex 1.5 project. It had about 3 phases, and currently am doing bug fixes and enhancements. It’s hard to balance because I’m now doing a full-time Flash gig up in Detroit and there is a lot going on. Most of my roles in the past, salaried or contract, have been coding muscle. A lot were more specialist; server-side developers & designers abound, but a Flash coder? Dude, you’re hired.
This role in particular is quite challenging. First off, it’s Flash 7, not Flex 1.5. Second, it’s deadline driven first, design driven after that. Anyone who’s been in this industry awhile knows software is never released on time. Programming is an art, not a science, and thus placing deadlines to it is more for team morale & focus, not actual delivery dates.
So, right off the bat, I’ve got a problem. Suddenly, there is an extreme emphasis on feature destruction and time identification. Assuming all time estimations on a specific feature are correct, you then identify what feature can be waxed, to what level, and how much time & resources that removed feature gives you. You then extrapolate on if you sacrifice 2 smaller features, how does that affect the main big one you still really need?
Furthermore, these features are design driven, not Database or business driven. If it enhances the Ford brand, it’s a good thing. My job is merely to identify time, cost, and effort levels. In my eyes, I’ll relay those datapoints to project managers to make those decisions with the IA & Designers. There is a positive in everything, and in this case, there is no “negotiating” scope in a feature. It is done in a certain time frame, and has a resource cost. One might say risk as well as level at which it could be implemented. In this case, no, they would be wrong.
First, know the premise of super-accurate time estimations for programming are flawed to begin with and never accurate. Second, risk IS time. With a deadline driven project, anything you do detracts from the most important resources; time. You don’t have “time” to experiement and make prototypes / tracer bullets like you do in larger projects. Things you would take for granted are no longer even available in this type of project.
The design & wireframes aren’t presentable yet, but I’ve got a pretty good idea of what’s in store. Furthermore, with the mantra of “Abandon all OOP ye who enter here”, it makes all the shortcuts, hacks, and smoke & mirror techniques I’ve learned over the years that much more valuable. A lot unfortunately started to go the way of the Do-Do bird. My last manager on my Flex project is a purist, and Architect with a lot of experience, and a damn good reason for every rule he asks us to code by. He’s still open minded, but this type of development is a huge abrupt 180 degrees from the Flex 1.5 work. When you work with a company that never misses a deadline, and the project is driven by design, maintainability is the last thing you think about. Encapsulation is still good, but re-usability is not. If you are coding something to be re-usable, you’re probably taking too much time.
If you made it through that last paragraph, you can see how hard of a perspective change it is. Going from a programming environemnt to a design one. Going from a business driven development to a deadline one. Going from programming for encapsulation & re-usability to coding as fast as possible, as much as possible that uses as little bandwidth as possible.
That last part is the worst. Having to deal with the fact of SWF size is a requirement I’ve never had to deal with in the past. The majority of my work has been multimedia, CD-ROM, kiosk, or intranet based. I know all about asset optimization, but with code, there is only 3 things you can do. Remote SharedLibraries are too much of a management nightmare; while they work great, they don’t work with deadline driven development. LZW compression on your bytecode is kind of fixed; all you can really do is pray. I’ve heard of obfustactors that shrink size, but I think #3 is the only avenue of approach here. The final thing you can do is use loadMovie. The former framework actually loads a 40k SWF so a multitude of sections throughout the website can utilize this main code base. I haven’t figured out how much code is duplicated through each section since I see no specific use of intrinsic for some of the classes, but my gues is very little. It’s the first framework I’ve seen that was specifically developed to utilize loaded SWF’s. When perceived download speed counts, this is a 100% viable use case, ease of coding be damned. Anyone know of any others?
On another note, in preparing for all my talks, I’ve noticed quite an interesting parallel between Flex & Flash. As I start to transition to this new fulltime Flash job, I’m reminded of one of the reasons I left Flash for application development in the first place. There is, however, one undeniable truth. Flash does design well. And you can code it.
Flex on the other hand does coding well. And you can design it. See the priorities? I’ve spent what little free time I’ve had in the past 4 months throwing every kind of weird design challenge at Flex 2. I’ve gotten some real challenges in my Flash days, so I figured the quickest way to learn Flex’ strengths & limitations was to attempt implementations of some of the more common Flash design needs. The tests are really hard to do. First off, by their very nature, Flex 2 & Flash are used in different markets. My last project was larger in scope, and long in deadline, with copious amounts of framework, OOP, refactoring, and other programming specific challenges.
In this case, the deadline is extremely shorter, the project is for marketing purposes, and the challenges will be getting a brand new team up to speed, and quickly. Quick enough to work in parallel on a technology that doesn’t really foster parallel development under an already extreme time crunch.
So, those typical types of work frame your point of reference, and influence what you deem “acceptable”. For example, when I implement a design in Flash, I do my best to implement it in such a way that if it doesn’t need to be programmed, it isn’t. I make full use of the timeline, library, etc. Most of the the time the designers on my team still can’t really work on the file alone, but they CAN make changes quickly if we work together. Because the progaramming is what in the end makes the project work, you have to basically give responsibility to the developer to make it happen. They are responsible for making the file work. A working file, however, is not success. A good looking file that sells whatever your Flash work is selling is a success, and that is mostly accomplished by the design you are coding. Thus, it’s still in your best interest to make the design you’ve coded it as to be easily modified. Flex, different story. You have the developer’s best interests at heart.
Are those accurate assumptions? Probably. Being pragmatic, the products were made for different markets, so forcing Flash to do enterprise application developement is not the best thing, nor is making Flex work in a marketing firm.
That said, even with those perceptions, you still hit the wall pretty hard on the fuzzy side. The only thing that really defines a “point of no return on time investment” is project type, and thus, the market that you’d use Flex & Flash in.
For example, application development can be done in Flash. I’ve done it and was successful with using it as a technology. However, if I had the chance to do it again, I would have used Flex instead. The projects didn’t have a strong need for design, animation, sound, and video. So, it’s pretty easy for me to identify when Flash isn’t the best tool for the job, even if I know it’s talents could give it an edge. You just ask the client questions, and you can pretty easily figure it out.
Flex? Same story. If the whole point of your app is to have marketing impact, (selling a brand, product, service,etc.) and you make no use of any of the programming features of Flex 2 (not Flash Player 9 – 2 different things), then Flash is clearly a better choice. That question is never asked, though. Designers & marketing studios already know this, and thus they use Flash, and have done so for a long time. On the flip-side, a lot of other software shops and companies are looking into Flex recently, and adopting it for a lot of their web application work. There is no software shop that does strictly marketing work; they build software, not Flash websites. The design shops that ask abouut Flex are only doing so because of the past marketing confusion Macromedia & Adobe spawned. Aral went into this awhile ago.
There ARE some people doing a lot of amazing things with Flash applications, but I’d argue they are not Enterprise size, and if they were, it’s because they employ some supreme bad asses. Those people are in a unique position, and from a business case, do not factor in. They are unique in a good way, but can answer their own questions.
So, in the end, I’ve always found it hard to do good coding practices in Flash. You have to make a lot of allowances to have the overall app work. Since the designs tend to be non-conversative, you can make some allowances in code. Sometimes, like in my case, bandwidth is a consideration, and you suddenly have multiple SWF’s. Yes, you can still write classes, but your logic isn’t centralized, and the project can be in flux because of stakeholder decisions, thus ruining any well thought out programming plan.
The opposite for Flex 1.5. There really is no good layout or design tool for Flex 1.5. FlexBuilder 1.5 was really slow and not always pixel accurate. Layout was more orienated at getting things semi-accurately laid out, with the assumption the built-in layout engine would take care of the rest of the details. Flex 2 changes that with a really good preview of what your app will really look like when compiled, pixel perfect layout and snapping of objects, as well as built-in understanding of most styles. Combined with states & transitions, and you have a LOT more design control than you had in the past. What point does that take you to? Even with states being built on the DisplayList, allowing things to be moved and removed while still retinaing all code listeners, it doesn’t offer the level of design integration that Flash does. Granted, if you’ve ever tried to animate a button, and when it’s done add an event listener, you’ll love states & transitions in Flex 2. All the timing based coding you wrote, customized each time for a new design element that was a pain in the neck to maintain is now gone and replaced with a wonderul, declarative based state. The transitions still give you animation & layout control, while not being meshed with your state more than necessary.
Still, I’m “in a mold”. When things start to take too long, you end up doing what you do when trying to code something; you just use the timeline. The same holds true for Flex. If there is some specific design element that feels forced in code, or you spend too much time coding in Flex 2, you’re probably better off using Flash for that particular part, in this case loading the SWF.
I’m in Detroit for another 7 weeks or so. My flight was cancelled so I’m in the hotel attempting to get ColdFusion setup on this laptop so I can work remotely on other stuff. After giving my presentation to the Adobe User Group of Atlanta, I found some holes in my presentation I’ll need to fix this week for New York next Monday. A lof the designers want to see proof in the pudding; they want to see a complex Flash design implemented in Flex. The developers want to see how much coding is involved to make those Flash elements work. I have very little time to attack those weakneses in my already overwhelmed schedule, but I’ll do what I can as I recognize them as important. You can talk about the methods of HOW to implement Flash designs into Flex to allow it to have a design driven aspect to a project, but without a real, working design, it’s all busllshit. The latter, however, is easy. The amount of coding to get Flash elements into Flex is elementary AS3 that I’d argue a lot of hybrid Flash designers could actually do themselves.
Either way a lot of unchartered teritory here, and being back in a Flash project really helps me see both markets as well as both technologies intimately in a short timeframe. I had a few more things I wanted to blog about but I’m exhausted; all this travelling back and forth between Atlanta, Detroit, home, hotel is really draining. Add that I’m no longer just a coder, but someone who needs to identify resources, and lead my team to ultimate victory is rough. I’m really good at pointing out things that don’t work, like the feel good speeches, and the working weekends to make up for lack of forethought about research, and all the other project from hell experiences. Apparently this is where those lessons learned pay off. They don’t necessarely point out the RIGHT way of doing things, but I’m going with my gut; it’s always worked in the past.
Hey Jesse,
I’m over in the Lansing area (70 minutes from Detroit). I’d love to come over with TechSmith’s Chief Evangelist and take you out to dinner (or maybe you’d even like to come deliver a brown bag lunch discussion on web technologies and take a tour. Drop me an email and let me know if you’d like to get together.
Brooks
Dude, they’re lucky to have nabbed you. I knew those guys were making a mad grab for flash gurus, but grabbing the king… not bad. Makes me with I’d stayed so I could have worked with you and learned from the master. Tell Mysza and Shippey I said Hi. :-)
Hi Jesse,
I’ve been reading your blog for some time now, and I’d like to contact you. Many times I’ve learned something from the tips you post, and now I might be in a position to return the favor.
I also work for a large-size online agency with a major automotive client based in Chicago. I’m a senior developer, and have been involved in all aspects of the business. I may be able to offer some helpful insights.
Actually, if I’m not mistaken I’d bet you’ll be working with a number of my old colleagues! Let me throw some names at you and see if you’ve met them yet.
-t.
Interesting project ;)
Reading your point about enterprise-level Flash projects and developers in such instances being ‘supreme bad asses’, I think that it’s not necessarily that they’d have to be so hardcore but more that it’s just not being done yet. I wrote an enterprise-level project management system for a client (front and back end including proprietary encryption system). The ‘enterprise’ portion really involved the server and the data format being used between the server and the client. The Flash portion, while it did have some logic, was really mostly a presentation layer. There was GANTT charting and the client app. did need to have some intelligence but as long as it behaved in the client there wasn’t much need for any heavy coding. Performance was needed on the server, in other words.
I’m currently developing another enterprise-level app. –actually, more of a supra-enterprise-level app. because it’s running within multiple enterprises and hooking into our own systems as well — and again the Flash portion is not much of an issue. The interface is incredibly complex and so there is the possibility of performance issues but this has to do with properly structuring the interface so that only required elements are on screen. Simply ‘duplicateMovieClip’ a thousand times to see what I mean…and again, it’s not complexity, it’s just management. A proper API with good virtual thread management takes care of such problems :)
Jesse, really interesting post, i’ve been reading your blog for a while now and really appreciate your contributions. I’ve been working in the e-learning/software/dataprocessing side of the automotive industry for 8 years. I’ve found that this industry is heavy on the deadlines and they are firm. They are listed in the RFP upfront and they are often brutal-every activity has to be line-itemed often without any real detailed description from the client on what it involves(welcome to the auto industry!). With that situation in mind the professional services vendors like mine tend to have to ‘throw’ good programming practices out the door. I often have to utilize templates from other vendors who have done work for my client before and there is a definate pseudo-development structure i see used more or less across all of the work. A true mix of art/animation and code-in includes, on the timeline, in dynamic loaded assets(loadMovie is my friend!), nested MC’s. It’s not pretty but you know where everything is and if the code is redundant so be it! Often our users are connecting from dealerships that have 2-5x dial up speed at best which gets chewed into by the overhead of the portals etc. I often am supporting back to win98. The realities of time, scope, and money, target audiance forces this stucture-at least in marketing service, and training as i see it. Coporate level IT system deployments always seem to have more money, time and just have different situations. I’ve been looking for ways to inject more structure into our development frameworks but with every client/dept being different your often basically buildiing a prototype on each new contract. I have several multimedia guys who work with me and i’m always trying to abstract enough code to allow them to make simple calls while building animations and simulations but you have to watch the clock! The downward pressure of pricing in the industry has also forced some clients to accept less than what they wanted by going with a cheaper bid-this causes all the vendors in the industry to cut corners on future bids and as you ‘Abandon all OOP ye who enter here.’ In a few cases a client has been able to get a well crafted template/framework in place but often adding any new functionality is expensive. I’ve developed a kinda angel/devil on the shoulders mentality- i look for ways of bringing coding standards to the project but i also watch if what i’m doing could be handled with procedural code on the timeline with keyframes and allow me to get onto my animation work. I do really think it’s a kind of niche programming/fla/timline/keyframe structure that helps us survive in this industry. Just my 5 cents.
-ethan
Totally agree, Ethan. I think 2 areas of improvement that I can see are having someone who can effectively communicate why creating more re-usable components in a design comp leads to more time for use developers to spend on doing the harder parts of the design.
All too often I hear about a negatively perceived engineering group, when said people are all very talented and positive; they just don’t realize the best ways to work with eachother. That’s totally understandable when you barely have enough time to catch your breath, let alone ‘fix a process’.
One thing I try to espouse to designers is if they can re-use interface elements, it means the engineering team only has to create those parts 1 time. That means less development time for a larger portion of the site, and less debugging time. That then gives the designers more negotiating room to get some of the more challenging & ground breaking features they sometimes don’t get to have implemented.
Lastly, I still have yet to see the point of re-usable code. Base classes? Sure. Like, everything is dynamically driven at a lot of places I’ve seen. This allows the client to change content on a whim and not have to spend a dime on the design firm since it pulls this information in dynamically anyway; they just have internal IT change a text file, or modify some DB table.
However, the View’s are pretty much fodder. Yeah, a compact UIComponent is nice, but a List for example changes so much between projects, I fail to see the point. Again, there are a lot of good base classes that you can use every project, but even the word ‘class’ is hard to justify sometimes. It’s a tough industry for a traditional programmer to work in, I’ll give it that.
Jesse, i was nodding all the way through your response! I guess what i was trying to express in my poorly written way is on the one hand you see these great open sourse/free frameworks with al this great OOP/MVC code and you read all the posts about how this will speed development, ease new additions etc. And i think it will-in certain areas and types of projects.
On the other hand is the reality of my particular industry which is not interested in paying for the upfront dev for a framework-even if you explain to them the cost later on they are okay with it as it’s a project based money structure so that could very well be pulled from next years budget. My clients tend to have about a 4 month view out. Add to that- working with multiple customers who have their on ‘standards’ and your last paragraph is basically gospel.
It really is a niche industry where flash has grown a unique ecosystem. It is a compromise to speed some things up with code structures and still allow the animators tools in flash to get the job done with keyframes and code spread out on an organized timeline. I’ve yet to be able to get a flex project pushed through-if we did more corporate business processes type of jobs it might happen.
In relation to getting different groups to work together- we constantly have to work at having our SME’s and multimedia/programmers try to understand the other’s ‘reality’. It’s hard but incredibly important and can really help a project be successful.
I hope your job goes well and welcome to the detroit area.
-ethan
Thanks a lot for the corraboration, Ethan, very valuable to justify and confirm realities here.
Jesse, excellent topic and some great points you made. Ethan, loved your responses, they really hit the nail on the head.
I find code re-use extremely useful when applied appropriately. Like eating ice cream it needs to done in moderation and too much of a good thing is no good at all. A best-practice for one project might not be the best-practice for another. Implementing MVC on a banner ad will do nothing more than waste time and money. However, importing a bandwidth tester you