Filed Under: work with 0 Comments
While listening to the BBC World Service, which I tend to do when I work from home, the program Global Business all of a sudden caught my attention when I heard the mention of Lean and the Toyota Manufacturing System. Having studied and applied Lean principles for a while I became interested in the program. The focus of the program was how Lean was being applied to companies in the services industry who produce no physical products to apply quality control to still benefit from applying Lean principles to their way of doing business. The program outlines how companies such as Amazon, GE Moneybank and gem all use Lean principles in order to make more money and help grow their business.
The program interviews author of “The machine that changed the world: The story of Lean production” James P. Womack of the Lean Enterprise Institute who explains easily how for instance Home Depot and Wall Mart have disconnected themselves from customers by either off shoring customer services or using temporary unskilled workers instead of full time employees with actual. He goes on to explain how businesses who say “taking people seriously costs too much” are totally missing the point. I will not repeat everything he said, but instead encourage you to listen to the program (see details about this at the end of this post).
One of the more surprising places that Lean has been applied is in call centers and the program shows how the Northern Ireland call center company gem have grown their business by applying Lean principles to customer service. By treating customers as actual human beings as opposed to treating them as numbers in a queue. Gem employees and executives are all measured on customer satisfaction and not how. They provide value to their clients by providing a feedback loop back letting them know how they can improve their business. Gem work with their clients
Steven Perry (I apologize if I spelled this wrong) of Transform also explains how they where hired by the government of Northern Ireland to try prevent jobs being off-shored and making their works important. By applying Lean principles to call-center companies in Northern Ireland they are securing jobs and making companies grow. One amazing example is a call-center handling technical support for an airlines company which keeps getting complaints about the email system not working properly. When contacting the CEO of the company the call-center got a reply that it was too expensive to upgrade the email system and that people would had to live with a few quirks in the email system. The call-center company then looked at the emails and discovered that the emails contained shift rosters, lists of passengers transferring from the airline to other airline and details about parts not arriving on time. When providing these root causes to the CEO it was an obvious decision to upgrade the email system.
The program also outlines how Lean principles when applied provides great value to companies providing services and how they transform themselves into management consulting companies and not just simple service companies.
GE Money Bank measures customer satisfaction by using a simple survey with 5-6 customers and are not linked to change, growth or volume. Instead they measure customer satisfaction using net promoter score, which means asking customers, “would you recommend us/our product to your friends?”
Linking this to the Lean philosophy GE Moneybank sees an answer of “yes, I would recommend your product” as a much better indication for future growth. Their business executives are all measured and paid according to these scores and this enables them to execute their business based on Lean principles and by doing this making billions of dollars.
1) Lean does not only apply to companies manufacturing products
2) Lean is gaining momentum in most areas of business and will become the standard way of doing business also in the software industry.
The software industry have started on it’s path towards Lean by starting to apply agile principles to software development. But in order to make the industry more mature and help customers get better value for their investments in information technology I am certain that our industry too needs to apply these principles in order to everyone in the entire business to focus upon the customer. Agile only does this for a certain part of an organization whereas Lean has principles which more easily transcends into the management sphere because of it’s roots in the Toyota Manufacturing System.
(I sincerely apologize for the tabloid heading of this section, but I just could not resist the temptation and again I am sorry) Lean has not become very relevant in Norway yet and we are still getting used to the idea of applying Scrum and agile methods. However there is a Norwegian consulting company called Iterate who both apply Lean to their clients, but also follow the same Lean principles to the way they run their own business. When talking with them you learn how Lean also can be applied to a company which makes money by billing hours.
I had the pleasure of being in contact with Iterate and it really is quite fascinating to learn how they apply Lean to a consulting company. By focusing internally on making sure their employees are treated as the knowledge workers they are and not cash-cows and by doing this providing their customers with excellent services by applying the same principles. They do not have what I call the “Accenture focus”, which means focusing upon getting the most number of hours squeezed out of any client, but instead treat the customer the same way as their own employees. Just like with call centers in Northern Ireland, Iterate of Norway applies Lean principles in the the service industry and they both do it with success.
Download the program or subscribe to the Podcast and look for the program called Lean, Mean and at Your Service: 29th April 08.
Filed Under: Misc with 1 Comment
Just recently I got a new computer and not wanting to use Microsoft Office for writing documents I thought I would give the Adobe acquisition Buzzword a chance. I have used GoogleDocs for a while and it works ok, but I wanted to see if the Flex based Buzzword was any better.
I started off writing some technical documentation and found the word processor to do the job. I could insert images and format lists which is basically all I would do for any document. What is missing is more short cut keys and some other minor things, but all in all I thought the service was cool. I haven’t gotten the chance to try the collaboration features yet, which really is one of the coolest features in Google Doc’s.
Anyway, while I was writing my document I had to spend some quality time catching up on my RSS feeds. When I went back to Buzzword it had a really nice surprise for me which really shows how one simple design on a feature shows that a company “gets it”. What usually is an annoying feature that you don’t want to see was transformed into something cute and unexpected. Just look at the screenshot below, there is no way you can be angry for having to log back in when you get prompted this image.

Filed Under: Flex, work with 15 Comments
Being a Java developer I felt that Cairngorm was a God sent as it provided me with a familiar way of constructing an application architecture. This made the process of starting developing in Flex a lot less complicated than if I where to start from scratch. In my old company Ezmo we built an online music service using the Cairngorm framework. We where very happy in the beginning and we really felt that Cairngorm helped us a lot as we didn’t have to learn too much about the inner workings of Flex and Action Script in order to start shipping working software.
As we continued growing our application I could not help to notice that there really was a few things about the framework that really started to degrade the quality of our code base and really made our application harder to maintain.
Writing a Cairngorm application involves a lot of boilerplate code. In order to get just a simple command going you need to create 2/3 new classes and write 20/30 lines of code which provides no value what so ever.
I really feel the Cairngorm framework should try and encapsulate more of the inner workings and hence saving developers a lot of time and effort. When designing a framework I feel you should have the approach the guys developing Spring Framework for Java has: to make development simpler. Cairngorm does not make development simpler and as your application grows Cairngorm really starts to slow you down.
Numerous studies has shown that the more lines of code you have in your application, the higher is the potential for bugs. Therefor it would be beneficial for an application framework such as Cairngorm to let developers write less code. In my experience Cairngorm does quite the oposite. I have compared an application created using Cairngorm to the same application written from scratch with a custom architecture and Cairngorm adds numerous classes and several hundred lines of code (I’ll provide samples of this later on).
When I work with Cairngorm I get the same feeling as I did back when I had to work with EJB 2.0. It feels like a plastic bag that’s constantly over your head while you try do develop your application. The framework is intrusive and continues to force you to write tons of useless code and transforms all applications intro dinosaurs that become hard to maintain and really hard for new people to learn. Regardless of all the patterns used in Cairngorm, it is not easy for new developers to start developing when they have to related to such a huge number of classes.
In my experience most applications don’t need to implement the Model Control View pattern in order to provide a decent application architecture. Especially I feel this is the case for Flex, you really don’t want to mimic a Java web application when you have such a great framework as Flex!
Listen Adobe Consulting, either you try and upgrade your framework to something that fulfills the demands of developers in 2008 or you release it as Open Source. Right now all the new things in Caringorm are related to their ridiculously expensive Live Cycle Data Service, nothing in regards to making development faster and easier. If you don’t have the time or resources to do this, release it and maybe the community can help out (I am fully aware that I should put my money where my mouth is and develop my own framework, but this is not something I have time to do right now).
Having put down the Cairngorm framework I guess you want to know what to do? OK, I’ll try and elaborate some of my thought on how you best construct and application architecture in Flex.
There are two valuable things in Cairngorm which I would continue to use (but I would probably just develop those classes my self for each project):
All the command, event, front controller mumbo jumbo is just there for the pattern horny architects who does no actual coding and have a need to have as many patterns as possible in every application architecture the work on.
Now here is why I feel these things make sense for almost any project. The Model Locator pattern, as Adobe calls it, is a great way to control data in your application. Combining the Model Locator with the built in feature of data binding in Flex that is a really powerful combo. If you combine this with a Business Delegate class you have pretty much all you need (you may not actually need that class either, it is not very hard to write one on your own).
If you decide to throw out most of Cairngorm and write your own architecture I would advice you to use two types of Models: Presentations Model and Server Models.
Having a one-to-one relation between the server side services and Server Models provides you with a seperation between server side data and the presentation data. Server Models should be responsible for retrieving their own data (that’s right, no events/commands needed). Presentation Models can use one or more Server Models, and once again using data binding to control updates. I think this provides a really simple, but yet very scalable, application architecture.
I am terribly sorry about the mistake of not remembering that Cairngorm is Open Source. Since I wrote this I have been notified about some other articles dealing with the same issue and I think the best one yet is an article called Using Cairngorm & Thoughts On Handling Those Pesky Singletons
.
Filed Under: Flex with 2 Comments
While coding Ezmo we had a need for implementing some kind of policy architecture which would help us have a bit more structure on who gets to see what components and also a bit more structure on the general flow of the application. What conditions are required for a certain policy to be implemented.
The basic scenario is that you have a User object which has one or more Roles which in some cases determines if a policy applies or not. Say for instance that you have a user who has an Administrator role, then he should see the debug console in the application. How would we do this in a neat way in order to not duplicate too much code and not have tons of boiler plate code?
I wanted the policy logic to be in simple classes which needed to be very flexbile. In my sample you loose some of the security of type safety as the apply method in the Policy interface takes in an object as a parameter, but I think the benefits of having very flexible arguments makes up for the lack of compile time feedback.
Policy interface
Simple interface which all policy classes must implement. The apply method returns true is the policy applies to the given input criteria.
public interface Policy {
function apply(criteria:Object) :Boolean;
}
PolicyManager
In order to have a simple unified way of using the policies I implemented a manager class which has one static method, applies, which executes the input polciy class with the given criteria. This class checks that the input policy is indeed is a class implementing the correct interface.
The reason why you can not pass in a Policy object into the applies method is that I wanted to call this method without having to instantiate the policy classes when calling the manager.
public class PolicyManager {public static function applies(policy:Class, criteria:Object):Boolean {var description:XML = describeType(policy);var typeName:String = description.@name.toXMLString();var inferfaceName:String= description.factory.implementsInterface.@type.toXMLString();if (-1 != inferfaceName.indexOf("Policy")) {var passedInClass:Class = getDefinitionByName(typeName) as Class;var policyInstance:Policy = new passedInClass();return policyInstance.apply(criteria);}throw new Error("Passed in class does not implement the Policy interface");} }
Here is how it would look if you where to use this way of implementing policies. You could also use this in a binding expression in MXML.
if (PolicyManager.applies(PriviledgedUser, user)) {//.... }
Here is how the PrivilidgedUser policy might look like:
public class PriviledgedUser implements Policy {public function apply(obj:Object):Boolean {if (obj is User) {return User(obj).role == "Administrator";}throw new Error("Invalid arugment, must be a User class");} }
This is one way of doing this and you might think that this is really too much code for solving something that could be done with just a simple if-statement. Which would be true of course if you only applied your policies in one place and never had to maintain the code. I think for larger applications doing something similar will be beneficial.
This article is also published as a recipe in the Adobe Flex Cookbook.
Filed Under: work with 1 Comment
An adventure which started in March 2007 has reached a sad ending with the announcement of the closure of Ezmo. I am very disappointed that we did not succeed in creating the next generation music experience and that we have let our fans down. Working at Ezmo has been amazing and mostly thanks to all the great feedback from our users.
I am convinced that a service similar to Ezmo will be the preferred way for people to enjoy music, but it eats me up inside that we weren’t the ones who where capable of creating that next generation music player. In a situation like this you can of course look back and find things that you could/should have done, but nothing will change the sad outcome. What it all boils down to is that we failed and someone else will be the ones providing the world with a music player where they can play their music anywhere and share it with their friends.
There are numerous music services out there that provide somewhat similar experiences to Ezmo, but none of them really enables you to share all your music without limitations like Ezmo. I’m just going to mention the names of some of our friends in the online music industry which all can be an alternative to Ezmo, but they can of course never replace Ezmo
There are tons of other services providing either locker services, internet radio, music discovery and many other types of music services. I wish them all the best of luck and I hope that a service like Ezmo will be available soon as I am addicted to that way of enjoying my music!
Cheers.
Filed Under: Flex, work with 15 Comments
In December 2007 Adobe released part of their Live Cycle (LC) suite as Open Source on Adobe Labs and named it Blaze DS. Having used LCDS for some time I was interested in seeing how the Open Source version was compared to the expensive LCDS suite. The result of this investigation is this write up on how to get started with BlazeDS.
In addition to this written stuff I have created a pretty simple demo application which can help you getting started with Blaze DS. It is just a simple app for collecting notes and links, nothing very fancy or interesting but this is just a simple application for showing how easy it is to get started with BlazeDS. The sample application contains a Flex 3 Web- and Air Application and a Java Web Application.
It’s really simple to get this sample running all you need is to extract the files and execute two simple commands. Make sure you have installed the following on your computer:
Once you have those two things in place you can follow these simple steps to view the application:
Now that you have seen the sample application you are probably interested in seeing how BlazeDS is setup. Continue reading and I will go through some of the basic steps. In order to build Flex applications easily you should use Flex Builder 3 as it give you numerous benefits and helps you develop much more rapidly than any other Flex authoring tool.
Create a Java web application in Eclipse (you might want to use MyEclipse or something similar to make web development even easier in Eclipse). Grab the latest distribution from Adobe Labs and unzip the content to a folder somewhere on your machine. Unzip the file blazeds.war into the root directory of your web application. You should have a folder structure like this:
WEB-INF\flex
WEB-INF\lib
meta-inf
Delete all the JAR-files in the WEB-INF/lib directory, we’re going to let Maven handle the dependencies for us instead of having to do this ourselves. Adobe seems to be stuck in the previous century when it comes to Java development and have not published BlazeDS artifacts to any Maven repository. Luckily the guys and girls developing the Open Source Igenko CMS has put up BlazeDS artifacts in a repository which we can use. BlazeDS dependencies are configured as described in the write up from Igenko.
Upate: There is still no sign of the Blaze DS JAR’s getting put into a public Maven repository and they are now a part of the demo application (thanks Per-Otto!), see a more detailed description of why at the end of this post.
In order to enable BlazeDS to utilize the power of Spring you can do this by creating a SpringFactory class. Christophe Coenrates describes the required steps in the article “Using Flex and Spring” on Adobe Developer Center. In the enclosed sample project a SpringFactory class is configured in the configuration file WEB-INF/flex/services-config.xml
<factories>
<factory id="spring"
class="com.moneytalks.blaze.poc.SpringFactory"/>
</factories>
Adobe usually says that you should add the -services compiler argument telling the MXML compiler where the Flex configuration is located. This is IMHO not a very smart way of doing this at it forces you to have the exact same file path in all environments you deploy you application.
Instead of passing in the path for the Flex configuration a better option is to pass information required by RPC- and Messaging Services either with Flash Vars which makes it easy to adjust endpoint servernames, file paths, etc in different environments. This approach was first brought to my attention by Mike Nimer in his blog post Bye bye -services. I recommend following this approach as it makes it easy to deploy your application anywhere without having to recompile your application
That is pretty much all the important thins you need to know before you can start enjoying rapid development using BlazeDS. You will hopefully experience the joy of being able to focus on developing a great application instead of spending time writing boiler plate code moving data between client and server.
In order to get a better overview of the messaging features you can check out some of the great samples provided by Christophe Coenraets.
This article is also available in Norwegian.
Note!
Since I wrote this article it seems as if the artifacts on the Maven repository I used for the demo applciation have become unuseable. Attached to the article is an updated archive which have the BlazeDS JAR-files enclosed (in the directory called /flex-libs) and with a script (install-flex-libs.sh/.cmd) which installs them in your local repository.
Thanks to Per-Otto for updating the demo project and sending me the update!
Note 2!
There is a bug in the POM of the web application, substitute the webApp configuration with the following lines (I will update the sample projcet, but this is a temporary solution):
<webAppSourceDirectory>${basedir}/target/${project.artifactId}-${project.version}</webAppSourceDirectory>
<webXml>${basedir}/target/${project.artifactId}-${project.version}/WEB-INF/web.xml</webXml>
<classesDirectory>${basedir}/target/classes</classesDirectory>