Scrum and Silverlight in Reinsurance

Today I would like to share a success story of a project I accompanied as Scrum Coach and Solution Architect from analysis to production.

Main success factors were:

  • Scrum (Agile Development)
  • Cross functional Team
  • Service-oriented Design (SOA)
  • Silverlight RIA

You can read more in the case study Modernization of business partner management.

RIA goes to Hollywood

Most RIA technologies today use an asynchronous model to communicate with the server, primarily to keep the UI responsive no matter what the server is doing. This principle is also known as the Hollywood principle. Don’t call us, we call you means that instead of continuously polling, the server calls back when the operation finished. In order to be notified when the server finished its job, callbacks are used.

For instance in Silverlight this leads to code like this

void ClickLoad()
{
    LoadCustomer(1,
    (result) =>
    {
        // Process result
    },
    (error) =>
    {
        // Process error
    });
}

void LoadCustomer(int id, Action<Customer> success, Action<Exception> error)
{
    LoadFromServer("select * from customers where id = " + id,
    (result) =>
    {
        success(result[0] as Customer);
    },
    (exp) =>
    {
         error(exp);
    });
}

void LoadFromServer(string query, Action<List<object>> success, Action<Exception> error)
{
    server.LoadCompleted += (s, e) =>
    {
        if (e.Error != null)
            error(e.Error);
        else
            success(e.Data);
    };

    server.LoadAsync(query);
}

Not very nice, is it? In jquery we find a similar pattern.

$.ajax({
  url: 'ajax/load.html',
  data: "query=1"
  success: function(result) {
    // Process result
  }
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    // Process error
  }
});

Usually an application consists of several layers. In that case the callbacks have to be routed back to the original caller, leading to code that is neither easy to read nor easy to maintain.

From what is already visible, it is very likely that Silverlight and WinRT are going to have great overlap. The combination of XAML, C# and WinRT plus the tooling will be very familiar to all Silverlight users.
That means, it is likely that the asynchronous programming model will be the predominant model for client/server communication for Windows Metro style apps. In order to simplify this, C#5.0 is going to include the await/async keywords, that will make callback chaining obsolete.

Example:


void ClickLoad()
{
    try
    {
        Customer result = await LoadCustomer(1);
        // Process result
    }
    catch(Exception e)
    {
        // Process error
    }
}

async Task<Customer> LoadCustomer(int id)
{
    List<object> result = await LoadFromServer("select * from customers where id = " + id);
    return result[0] as Customer;
}

async Task<List<object>> LoadFromServer(string query)
{
    return await server.LoadAsync(query);
}

This is much cleaner than the examples above. Actually it is a synchronous programming model supporting an asynchronous runtime model. As asynchronous calls are very common in RIA applications the async/await keywords are going to change the way we program async calls in the near future, leading to code that is easier to develop and maintain.

I can’t await async in C# 5.0 ūüėČ

Polyglot Workflows with Activiti and Silverlight

My latest article Polyglot Workflows with Activiti and Silverlight has been published in the current issue of JavaSPEKTRUM. After losts of  theory in form of articles and conference sessions, I thought it would be a good idea to present a real example.  The Activiti engine is an interesting product in the area of BPM. If you go beyond simple demo applications you might want to integrate it with existing UIs, such as corporate portals. Silverlight is an interesting candidate for this task. The article focuses mainly on the interoperability aspects of Activiti and Silverlight and shows how easy it is to bring both together.

New Silverlight BPMN Tool

The IYOPRO Process Modeler is SaS solution to model business processes over the internet. While several tools like this are avaliable, this one is especially interesting as it combines BPMN and Silverlight, a strong modeling standard and a powerful RIA technology. It looks and feels like a desktop application and is fun to play with.
In some areas it is limited (e.g. no export) but it is worth to try and see how it evolves in the future.
What I like is the capability to visually simulate processes and the timeline view. This can give you insights about the process flow at runtime.

Wide or Deep? – That is the Question

There has been some discussion over the last months about the future of Silverlight and it’s role especially compared to HTML 5. This question is regularly asked in my Silverlight workshops as well, so it is time to shed some light on it.
To me it seems that essentially the question is whether you would like to go wide or deep.

Joey deVilla coined the terms in his blog post Silverlight, HTML5, The Web, The Phone and All That

Wide means reaching potentially every user on the planet.
Currently the only technology capable of doing that is HTML 4.1 (+ CSS + JavaScript of course). Not HTML 5 because it is not yet there. Neither finally specified nor fully implemented in all major browsers. (check HTMLTest for your browser compliance). Not mobile Apps cause there is no dominant platform yet. (Will there ever be one?) Even if a mobile platform, such as Android, had a market share of 50% a mobile App would only reach 50% of the mobile devices.

Deep means creating compelling user experiences in terms of performance, interactivity and usability. This is usually expected for line of business applications (LOB). Those applications run in corporate environments and target at power users who work with the applications on a daily basis. Here Silverlight is a great option. It reaches far beyond .NET as it can be combined with almost every backend technology via standard protocols.

Here are some quotes from related blogs to underpin this view:

With the blossoming of Silverlight, I think we finally get the best of both worlds when it comes to LOB ‚Äď the ubiquity of the browser, the rich experience, the online and offline scenarios, and the great languages and tooling.
Jonathan Allen on InfoQ

Web devs never picked up Silverlight as their platform of choice. They always stayed close to what they felt most comfortable with ‚Äď JS, HTML, CSS, AJAX. Sure, they suffered from cross-browser issues due to the fact that every browser has its take on how ‚Äústandard‚ÄĚ features should be implemented, but they stayed true to pure web development and never embraced Flash or Silverlight.
Vassil Terziev on Telerik blog

Silverlight will become dead if and only the hundreds of thousands or millions of devs who are doing desktop apps today decide that writing JavaScript is cool and that they can achieve more with HTML5-capable browsers, tooling and platforms than with Silverlight or some other similar technology. I honestly don’t see that happening, though, and believe in the merits of SL when it comes to development of heavy-duty LOB apps for the Enterprise.
Vassil Terziev on Telerik blog

In short, if you want to go wide use HTML, if you want to go deep use Silverlight.

I know that this is a bit of a simplification as other factors affect technology decisions as well. Actually is not the technology that comes first. Technology decisions should follow business requirements. And sometimes it is even a combination of technologies that produces a great solution.
But maybe the wide or deep question might help to find the best technology for your requirements.

Silverlight Receives Technology of the Year Award

InfoWorld rates Silverlight the best rich internet application platform in 2011.

Quote:

“Right now, we favor Silverlight. In the two categories most important to decision makers — developer tools and design integration –¬†Silverlight trumps Flash/AIR/Flex. The toolset in Microsoft Visual Studio 2010 is demonstrably excellent, and Microsoft Expression Blend bridges the design-development gap much better than Adobe Flash Catalyst. For these reasons, companies like Netflix have chosen Silverlight as their RIA technology. We completely agree.”

Of course such a rating always depends on what is important in a certain context, but it shows that Silveright is definitely one of the leading technologies in the RIA space. Beside many other aspects the toolset is very important, as it helps to boost developer productivity.

I can only confirm that. We are currently using Silverlight in an Scrum project applying an incremental design and agile specification approach. Silverlight is ideal in this context as the toolset supports all phases from sketch, specification, design, development and test in a flexible manner. Business analysts, designers, developers and testers are able to work closely together using the same toolset.

Silverlight in NoMicrosoft Environments

According to the term NoSQL (not only SQL), NoMicrosoft or NoMS stands for heterogeneous environments in which Microsoft technology is not the dominant platform. For instance many companies use JEE and Unix-based backends and Windows desktops to run their line of business applications.

For those wondering whether Silveright makes sense in those environments, I recommend looking at eBay. A while ago they created the eBay Simple Lister App which can be installed from eBay Garden. This app combines great user experience with a web based deployment model. It is based on Silverlight and integrates with existing Java-based eBay services via JSON/POX and REST. It makes use of unique Silverlight features such as WebCam and notification windows just to name a few.

Another good example is Facedeck, a Silverlight frontend for Facebook. If you don’t wan’t to install it, you can watch a video on YouTube.

From what I see, developers and decision makers start realizing that by using Silverlight they can create compelling user interfaces and achieve great developer productivity especially for line of business applications. Due to its standards support and interoperability features Silverlight is not limited to .NET-backends but well suited for all kinds of backends including Java/JEE.

Some features especially useful in NoMicrosoft environments are:

  • Standards based interoperability via SOAP, REST, JSON, ATOM, POX, OData, XML Schema
  • MSBuild can be fully integrated with Maven and Hudson
  • Silverlight apps can be hosted on any webserver including Tomcat and Jetty
  • Free development tools (Visual Studio Express)
  • Free automated unit testing (Silverlight Toolkit and NUnit)
  • Automated UI testing using WebAii or HP Quicktest
  • No licence cost

If you are interested to see all those feature in action please drop me a note.

Create Silverlight Apps with Notepad

Did you know that you can write simple Silverlight applications using just a text editor without using an IDE or compiler?
Although it is recommended to use silverlight.js to start your silverlight application in a robust way, you don’t even need that. Just create a html file with a text editor of your choice and embed the XAML code.

The absolute minimum is this:



	       
	    

This is a plain html file. The Silverlight plugin is hosted using the object tag. The XAML content is not stored in a xap file, but in a local script of type text/xaml. Inside this script block any XAML can be placed.
The script can also use embedded storyboards to automatically triggers animations.
A more complex example which creates a rotating rectangle with text and a logo is shown here:





	       
	    

The script comprises of the visual elements Border, Grid, TextBlock and Image and four Storyboards which control the animation.
Inline XAML can be used to create nice looking splashscreens or single file demos.
Try it. Just copy the file above to a html file and open it. Provided that you have the Silverlight plugin installed you can see the animation.

Screenshots:

Live demo

If you want to let Silverlight interact with Javacript, just add another script block at the top of the page:


In order to call it, add the event handler to the Grid in XAML like this:

<Grid x:Name="Frame" Background="SteelBlue" Cursor="Hand" MouseLeftButtonDown="nav"> 
...

That’s it!