Recently in Tips & Tricks Category

We're already deep in the holiday season, but it's never too late to add a bit of Xmas spirit to your Web Application!

I thought about adding Xmas lights, flying reindeers, working elves... but it seems to me that for an Enterprise Web Application something a bit subtler was in order. So I ended up just putting in a bit of snow on the Sales application:


Check the video to see snow in action, 
or visit the OutSystems Network to see it live in a real web page!

If you're using the Agile Platform and want to add some snow to your app, here's what you need to do:
  1. Get the "Xmas" component from the OutSystems Community
  2. Reference the component from your web app
  3. Drag the "LetItsnow" block to a particular page, or to the footer if you want snow on all pages
  4. Click 1CP, sit back, enjoy your eggnog, and let it snow!

If you're not using the Agile Platform, there's a bit more work involved...
  1. Get the Javascript file from this site
  2. Place the Javascript on all your front end servers
  3. Edit your pages and look for the <head> section
  4. Add the line <script src="snowstorm.js"></script>
  5. Customize the snow with a bit more Javascript
    <script>
    snowStorm.snowColor = '#cccccc';
    snowStorm.snowStick = false;
    snowStorm.animationInterval = 75;
    </script>
  6. Make sure you didn't break anything!
  7. Follow the "move to production" checklist (if you have one)
  8. Send the changes to your ops team and wait for them to move it to production... hopefully that will happen before Xmas! :)
Have a snowy Merry Xmas!
Building a Mobile Web Application is the fastest way to get a mobile app in the hands of your users. You get to build an app at a fraction of the cost of building native, it works on multiple devices from day one, and you don't need to go through the appstore publishing process (if you want to find out why Mobile Web Applications are the way to go, check this free eBook).

But sometimes Mobile Web Applications just don't cut it... you either need to access a specific features of the mobile device - like the camera or address book - or you really want to get your app in the appstore. If that's the case, Hybrid Applications are a great solution.

In this video, we show you how to build such a Hybrid Application using the OutSystems Agile Platform to build the Mobile Web Application, and PhoneGap to create a native shell on top of your Web Application.


You can find the code snippets used in this video here, and the PhoneGap component for OutSystems is available from the OutSystems Network.
paas-cloud.jpg
I will bet that in some form or fashion you have Software as a Service (SaaS) in your organization. Now, I am not talking about packages that have been purchased and installed on your servers - I am talking about true SaaS. Where the software is running in the 'cloud' on your SaaS provider's servers. There is a lot of hype around SaaS and the hope that in the near future all your applications will simply be purchased in the cloud and start working immediately. Sounds great - right?

Reality check!

For most of us in Enterprise IT, the reality is that what makes our business different is the way we go about delivering our products and services to the market. This means that an off-the-shelf, standardized SaaS application is not going to solve our needs. Sure, SaaS is great for many of the commodity processes like payroll processing, accounting, etc. But what about the processes that make your business unique - is SaaS going to work here?

Many organizations I have talked to are trying to force-fit SaaS to work for these unique processes. They are struggling with wanting to customize their SaaS, which is difficult. I see things like only using pieces of the SaaS app and trying to build new application functionality for the processes that are unique. Why are they doing this?
 
Well, for one, the promise of getting the application up and running really fast is a big attraction to the business. SaaS makes this possible due to the zero time and cost associated with setting up the infrastructure to run the application. But all of these SaaS benefits are lost once you start customizing it. When you try to adapt the SaaS offering to your unique needs, what started as a really fast time to market initiative, will quickly turn into a nightmare of tweaking and hacking an inadequate API and data model.
 
This might seem counter intuitive, but I think the answer lines in Platform as a Service (PaaS). Let me explain, we are starting to see new, extremely productive and easy to use PaaS offerings that give you rapid application development (RAD) with 'instant' setup to get your project started immediately. I like to call this "RAD PaaS". Even more interesting... what happens when you couple free applications with the RAD PaaS environment? Now you can quickly deliver a custom fit application faster than you could configure the SaaS package. Thus, the new wave of RAD PaaS offerings will provide a custom SaaS experience, spelling the end of SaaS for anything but a truly standardized business processes.

OutSystems recently published a new eBook highlighting three customers who delivered unique applications in the cloud. Two of these examples are actually about replacing existing SaaS applications and taking advantage of this new generation of RAD PaaS offerings to accelerate deliverability and cut costs. Check it out here.
 
So, how about your business? Is SaaS working for you? Have you tried RAD PaaS yet?


SIIA PaaS Requirements

| 2 Comments | No TrackBacks
siia-clipboard.png
The Cloud . . .  It's like teenage sex. Everyone is talking about it - but no one is really doing it. Also like teenage sex sooner or later you will. Thus while the hype is driving us all a bit crazy we have to pay some attention to how this will play out as sooner or later we will get involved. Like most things in the technology world, the concepts are not all that new.

What has changed is the terminology and more importantly the availability of the technology has gotten better. This makes things more accessible, usable, etc. For example, it was not but a few years ago that you still used a phone line and wire to connect to your email when traveling on business. How we forget the good ole days and thank someone for wireless access. In the cloud we are making access to virtualized servers, data stores and the needed services to manage them available under a utility model - you only pay for what you use.
  
So the cloud. OK, I think we all get the basics of having a virtual data center and the notion of a utility model for getting access to a remote infrastructure. Being able to offload some of the operational costs associated with managing your infrastructure is promising. What I see as the real challenge is how all of this will impact the more difficult side of IT, application development and management. This is where we create business value and where the cloud has some maturing to do before its full promise will be recognized.
 
So what about application development in the cloud - how are you going to get it done? Well there is SaaS which is effectively the cloud's 'package' application market. This is good for those commodity processes where you can buy a package. But for the differentiating processes where you have to build an application we have to look at things like PaaS or platform as a service. To this end I wanted to share a snippet from a recent SIIA article that outlined their thinking on the minimum requirements you'll need to provide a "Best-in-Class" Platform-as-a-Service (PaaS) offering:

  • Multi-tenant architecture - common technical resources and code instance for multiple client companies.
  • Customizable/Programmable User Interface - support the creation of high-flexible user interfaces without the need to write complex code.
  • Unlimited Database Customizations - provide ability to easily modify/extend the data model (i.e. construct objects, define relationships, specify validation rules/permissions) via a "point-and-click" declarative" environment.
  • Robust Workflow capabilities - engender process automation by providing "point-and-click" tools to easily define workflow processes and specify business rules.
  • Granular permissions model - multi-level control over security/sharing within/across applications and platform components.
  • Flexible services-enabled integration model - enable seamless integration of "cloud" application data and functionality via a flexible web services enabled integration model.
  • Analytics layer - enhanced ability to leverage aggregated data across companies and applications for analytics.
  • Integrated content library - common elements that extend the core application feature set, improve info-sharing and speed up go to market time.

This list sounds reasonable. I would push back on the need for multi-tenancy.  Why?  If I am an enterprise IT shop wanting to build applications for my business - I don't share my application software thus this need is not important. I would also add the requirement to have my PaaS give me the option to deploy any new application on premise as well as in the cloud - you never know when something is going to force you to move your data and processes to a more secure setting. Check out the eBook the OutSystems team put together on PaaS here and let me know what you are considering for application development in the cloud.      
gauge icon.png
A while back we conducted a productivity study with our customers, called OutByNumbers, to see how much more productive they were using the Agile Platform.

The numbers for this study showed that all of our customers were experiencing great productivity gains.  However,  as you might have guessed, there were some projects that performed better than others.

This didn't come as a surprise, but we decided to dig deeper and talk a bit with the people involved to see if we could identify what made one project go faster than another.  We asked them what were the major factors that increased their overall project productivity, and here are the top answers we got:

  1. Small teams, highly experienced in the technology
  2. Teams that frequently interact with the business and with extensive business knowledge
  3. A good, straightforward application architecture, as opposed to complex or excessively layered architectures
  4. Frequent moves to production, using a very iterative approach
  5. Applications with less demanding user interfaces, like back-offices, usually lead to higher levels of productivity
The first four factors are very much in synch with what Agile methodologies advocate, and its good to see Agile delivering on its promise.

But what really caught my attention was that last bullet. Crafting a top-notch, super usable interface is something that seems to take a lot of effort. Why is it so, and how can we improve this? Surely something to write about in a future blog post!

Do you agree with these 5 factors? Are there other major productivity boosters you'd like to share?
VISourceCode.PNG
It is now widely accepted that source code is not an asset, but rather a liability. This is a very strong idea that has a lot of impact across the IT industry and in the way developers view and perform their day-to-day work.

One of the earliest articles on this subject was published on "Object Mentor". The article is really good, but while reading it I spotted something I really can't agree with:

"The problem doesn't go away if you artificially reduce the code. (...) Moving it into metadata and models and other forms doesn't make it any smaller, and often makes it worse. Hand-crafted code is almost always more readable, smaller, more optimal, more focused, more literary in its style than generated code or funky data tables. 

Models will help!
I'm a strong believer in Model Driven Development (MDD). I think models are a great way to abstract low-level code, and can make software much easier to understand and change.  I'm not talking about using models as an intermediate stage to generate a portion of your code. True MDD means the entire development process is done on top of the model. Much like you use C# or Java instead of assembler language, in MDD you use models instead of C# or Java.

This may not completely fix the problem: following the article's reasoning, at some point the model will become the liability. But it will greatly reduce the risk of this liability for a very large part of your software. Why?  Models mean abstraction, which equals less objects to know and manage thus reducing complexity. Models let you focus on the business problem and not worry about all the plumbing to deliver a scalable, robust application.  Models reduce risk when change is needed and speed up the delivery process.

Hand-crafted code is beautiful... for 5 minutes!
The best guy on the team (you!) builds this really amazing beautiful code. It's totally optimized, and it's so wonderfully written that angels weep as they read through the lines of code... And then things change.

The code is handed out to the maintenance team, the requirements change, and assumptions used to build it turn out to be wrong... it really doesn't matter what the reason is, someone will have to touch your perfect code. And it's all downhill from there.

Blame complexity
It's not that other developers who will touch your code are idiots. It's just that the context surrounding your code is huge, documentation is typically inadequate, and although they think they get it, more often than not they miss something. The system is just too complex.

Once again, MDD provides a huge help in making the system look simpler. It makes it much easier to see the full picture, and it really improves knowledge sharing between developers. Of course there will always be problems so complex that even the model is hard to understand, but fixing the vast majority of situations is a big plus! 

Some words of advice
As you probably noticed, I'm a big fan of MDD. But you do need to be careful when picking your tool of choice. A whole article could be written on that subject, but let me just leave you with three tips: Make sure your tool supports the full development lifecycle, prioritize fast change higher than fast build, and make sure the application generated by the model is based on standard technologies, is fast and scalable.

My final advice: quit piling up the debt and start investing in MDD now.  

Happy modeling!
cloud.png
Putting applications in the cloud offers the promise of reduced costs, flexibility, accessibility, not to mention the possibility to dramatically improve the way your IT works. But to reap all these benefits, you need to make the correct decisions when defining your cloud strategy - especially when it comes to your choice of development platform.

And if you deal with custom enterprise applications, more likely than not you'll have to choose a cloudy-ready platform to develop, build, test, and deploy them.

Here are 7 things you should take into account before picking your brand new cloud-ready platform:

  1. Avoid lock-in - Code and Data: Your code and data are part of your competitive advantage. You must own them. Make sure that, if the need arises, you can smoothly and safely transfer your code and data away from your cloud provider with minimal business interruption.
  2. Easy to move between on-premise and cloud: What's departmental and on-premise today, may need to be global tomorrow. What's currently published on the cloud may become regulated and required to move on-premise the day after. Having the flexibility to easily move back and forth between the cloud and on-premise is a big plus.
  3. Easy to scale horizontally: One of the big advantages of the cloud is that it allows you to grow your data-center as you need. The platform you use needs to be able to take advantage of this flexibility.
  4. Lifecycle support - ready for fast change: It's not just about running applications in the cloud; your choice of platform needs to support the full lifecycle. You need to be able to develop, test, and change your application really fast.
  5. Easy, fast & safe to deploy: This is part of the lifecycle, but it's important enough to have it's own bullet! In order for you to be as fast as your business demands, you need to be able to deploy your app quickly and often. And you need to know that, should something go wrong, you can quickly revert back to a previous instance.
  6. Easy to integrate: Integration will always be a big part of custom application development. You need to make sure the platform you pick integrates easily with your apps running on premise, with your cloud apps, or with off-the-shelf packages. 
  7. Secure: One of the biggest concerns around the cloud-computing is security. Pick a development platform that seamlessly handles this issue for you. This is important not only at time of deployment but also from the application execution perspective. If your platform handles this for you, you will save you a lot of time and headaches in the future.
What would you add to this list? What are your main concerns, and what do you look for when thinking about your cloud strategy?
greatwebapp.png
Some web applications are just a pleasure to use. They work extremely well, they are gorgeous, they are fast, and they almost seem to guess what you want. Gmail, Amazon, and Highrise are all good examples of such applications.

A lot of ink has been spilled on why these apps are so great: Focus on the user, tons of usability testing, heavy usages of statistics, contextual design, etc. are but a few of the reasons pointed out as drivers for success.

But even though the end user interface is an extremely important part of what makes a web application great, I believe true greatness can only be achieved if the app is also first-class on the inside.

Greatness from the inside out
Ok, so I guess the next question is: What makes a web application first-class on the inside? Here are some characteristics I believe are key to build a truly great application:

  • Easy to change: Great apps are evergreen. Even if in subtle ways, they're always improving and adapting to the latest requirements. To build a great app, you need to make sure your application can change as fast as your users' needs.
  • Easy to understand: From the inside! A great app will last for years. In order to keep it easy to change all that time, you need to consider that other developers will be working on the app. And they will need to fully understand it, if they are to keep it great!
  • Robust: The app needs to work. All the time. Non-stop. Everybody squirms when Gmail is down...
  • Scalable: Great apps attract a great number of users. To support all this activity, your application will need to scale. Good responsiveness is mandatory for a great app.
  • Instrumented: Sometimes your great app might end up responding slowly, or worse, not responding at all... if that happens, you need to be the first to know, which means that great apps are instrumented and monitored. That's the only way you can react and solve the problem, even before your users realize there was an issue!  
  • Secure: We trust great apps to keep our data secure. You need to keep that trust. Trust is a marvelous thing!
These are a few really important points to consider when building a great web app, but I'm sure there's plenty more secrets for a web application's inner excellence! What do you think? What makes your app shine from the inside?
The best way to have a great Christmas, is to help others have a better Christmas! And you don't need to spend extra money to help others... sometimes everything  you need is already available to you, it's just waiting for a bit of imagination!

Here are 2 ideas to help others on Christmas:

1. Reallocate Budget

There's always some budget allocated for Christmas activities. For example, to print some holiday cards, to send some gifts to special partners, customers and so on. What if, instead of spending the money on a bottle of wine for your customer, you bought a gift for a kid that wasn't having a Christmas without your help? I'm sure that your customer would understand. Just handwrite him or her note explaining that Santa made a detour while getting this year's gift!  If you add up a bunch of bottles of wine you will find that you can make a lot of kids happy!

xmas-gifts.png
2. Recycle Old Hardware

Remember that old laptop you no longer use and that's taking up space in the storage room? It might be exactly what a kid needs to learn about computers and the internet. Having a computer can give a child the edge he or she needs to have a much better future, and all you have to do is clean it up, install a free operating system and deliver it! Way better than recycling! And while you're at it, why not install 10 laptops?

xmas-laptops.png
So there you have it, two simple ideas to help others for Christmas that don't cost you extra (well, we did offer lunch to the guys that installed the laptops, but it was well worth it!) 

What about you? What are your ideas for helping others, without making your CFO grind his teeth?

clock10.jpg
What's every manager's dream, after finding buried pirate gold, starting a unicorn ranch and marrying a beautiful globetrotting supermodel?  Why, improving  web application development productivity, of course!

Unlike the gold, mythical creatures and supermodel, this goal can be achieved. You can do it in small steps and realize slight improvements in team productivity. But if you're aiming at order of magnitude improvements, some deeper changes need to be made (it's still not as hard as starting a unicorn ranch).

When starting this process, it's important to consider the fact that both building new web applications and maintaining existing apps must be optimized. After all, the lion's share of a web application's cost comes after the first move to production! 

With this in mind, I have pulled together seven tips to help boost web application development:

1. Automate deployment
Moving a web app to production needs to be as simple and as fast as possible. To be truly Agile and keep up with the business, deploying to production must occur frequently, or delays will stack up across the development cycle. If it takes two days to place new versions in production, your productivity will suffer.
 
2. Reduce complexity
The more complex an application grows, the harder it is to change and adapt. The solution? Split the system into smaller parts when it starts getting too big. To do this, however, requires a technology that helps make sense of complex systems, as well as helping the development team split the system into more manageable components.

3. Aim for production, from day one
It's tempting to hack out a quick solution for an immediate business problem, and later clean the application up to make it production-ready. This may seem like Agile, but in reality, it's vital to not neglect things like monitoring, scalability, logging, user management and so on. The ideal solution is to build on top of a platform that let's you take these requirements for granted.

4. Impact analysis
To change quickly, the team needs to be certain that the changes will not break what's already working. This problem can be greatly minimized through three stages: First, use impact analysis tools during the development process: if a change to the database breaks the business logic, it needs to be immediately obvious. Second, use regression testing. Finally, make sure that the impact of changes can be measured, especially when placed in the production server with production data. 

5. Invest on Knowledge Transfer
Employee turn-around, different teams for development and maintenance, or the need to reallocate teams to different projects are all good reasons to invest in knowledge transfer. But don't put the burden of knowledge transfer on the developers. The documentation will never meet requirements and walking through code is slow and difficult. Use Domain Specific Languages or visual languages and relegate this work to the tools.

6. Flexible Control
The advantages of having a 10 second deploy process are lost in the face of a two day bureaucratic process to approve a move to production.  To have true flexibility, two things are needed: full accountability - to know who to ask for help if trouble occurs, and; most importantly, the ability to rollback a not-so-successful move to production.

7. Collaboration with stakeholders
The sooner feedback pours in from stakeholders, the sooner web app development will start moving in the right direction. There's no point in developing quickly if it's going the wrong way. With this in mind, it's highly important that stakeholders can easily provide feedback on what they would like to see improved.

Looks like a lot of work...
Correct - these aren't quick and easy steps (but it's still easier than that unicorn ranch)! But in following these tips, development teams can dramatically improve productivity.

As a case study for this, consider the Agile Platform. It was designed and implemented with all these factors in mind, and a recent study, based on function points, proved that teams using the Agile Platform are 10.9x more productive than using standard technologies.

What other tips would you add to this list? How would you make your team more productive by an order of magnitude?

SCRUM vs. Kanban

| 10 Comments | No TrackBacks
postits.jpg
At the OutSystems R&D department, we've been using Scrum for quite some time now. But lately, I've been hearing quite a lot about Kanban. I've even heard of a team that's considering moving from Scrum to Kanban to be more efficient! With such claims I was obviously curious to find out more about this methodology, and how it relates to Scrum.

While doing my investigations, I found two key differences between Scrum and Kanban: The rules and the workflow.

The rules

Both Scrum and Kanban provide rules on how you should perform your work. An immediate difference between these two methodologies is the number of rules they impose.
Scrum is quite prescriptive, and has a vast set of rules. Here are just a few:

  • 1. The Product backlog is created and managed by the Product owner
  • 2. Teams must be cross functional
  • 3. The team's work cannot be interrupted during sprints
  • 4. The team's work is time boxed
  • 5. There's a daily scrum meeting, where the team answers to 3 questions
  • 6. Progress is measured using a burndown chart
  • 7. Teams do a demo to stakeholders at the end of each sprint
  • ...
  • 23. (You can find a list of 23 mandatory plus 12 optional rules in Agile Advice)

Kanban is much more open than Scrum, and it has only a couple of rules:

  • 1. Visualize your workflow
  • 2. Limit your Work in Progress

Now, being such an open methodology, it tends to be adapted depending on the environment. For instance, Toyota defined 6 rules for its process. In fact, you can add all rules of Scrum to Kanban, and still have a sound methodology - with 25 rules!

The workflow

A direct consequence of this difference in rules is the way the work items are handled across time.

In Scrum, you select the work you'll be doing for the next sprint beforehand. You then lock the sprint, do all the work, and after a couple of weeks - the usual sprint duration - your queue is empty.
scrum-board.png
Typical flow of a Scrum process

In Kanban, all that's limited is the size of the queues, called the Work In Progress limit. This means that you can change the items in the queues at any time, and that there's no "sprint end". The work just keeps flowing.
kanban-board.png
Kanban flow, with a WIP limit of 3 for the Todo, and 2 for the Ongoing

Which to pick?

The answer to this question is, as always, it depends.

If you're doing feature development, which relies heavily on stakeholders' feedback and developers need focus to do a good job, go with Scrum. The sprint lock and the end of sprint demos to stakeholders are invaluable in this scenario.

On the other hand, if your work is more reactive, and you cannot lock your backlog for a couple of weeks, go for Kanban. It's a great methodology for Maintenance teams that need to adapt to customer input on a daily basis.

Better yet, learn lessons from both models, and adapt them to fit the unique needs of your organization. This is the best way to become extra efficient!

What methodologies do you use? What are your experiences with Kanban or Scrum?

Note: For more details about the differences between Scrum and Kanban, check this great article by Henrik Kniberg.
RatCatcherLogo.png
Like all good things, Justin James' Developer Diary series has finally come to an end - a happy one at that!  Justin successfully used the Agile Platform to bring his Rat Catcher application from idea to fully-fledged application.  During the last few months he learned the platform, overcame the challenges of scarce resources, infrastructure, etc to deliver his application.

In his final entry, Justin explains how he used the Agile Platform to retrofit some aspects of his application, specifically moving his layout from tables to CSS.  He also gives us his thoughts around the new Agile Platform 5.1 as well as the lessons he learned using our platform.

I encourage you to check it out, along with the rest of the series below:

  • Developer Diary #1 - Justin goes over his initial impressions of the Agile Platform and what, at first glance, stands out to him.
  • Developer Diary #2 - In this post, Justin breaks down how to build a basic application in the Agile Platform, profiling his initial "Hello World" app he built specifically to test the environment out.
  • Developer Diary #3 - Service Studio takes center stage in this post, where Justin explains the nuances of the Agile Platform's unique IDE.
  • Developer Diary #4 - Next up, Justin examines the Agile Platform's Integration Studio, OutSystems' tool to tie the Agile Platform into external code.
  • Developer Diary #5 - With Rat Catcher at a functional level, Justin looks at how he used the Agile Platform to deploy the application.
  • Developer Diary #6 - As Rat Catcher's beta continues, feedback starts to roll in using the Agile Platform's Embedded Change Technology (ECT). In his sixth entry, Justin discusses how to set up this great feedback tool for your own applications.
  • Developer Diary #7 - Given the importance of scheduled tasks in Web applications today, including Justin's Rat Catcher, this post maps out the Agile Platform's Timers feature.
  • Developer Diary #8 - What's a Web application without AJAX? In this post, Justin checks out the AJAX functionality of the Agile Platform.
  • Developer Diary #9 - In his second to last post, Justin examines what Agile Platform features help you address the security of your applications.

Have you used the Agile Platform? How do you relate to Justin's experience? 

what if sticky.jpg
There's no pattern for innovation in an enterprise - while R&D might be responsible for driving new products, someone in logistics or facilities might think up the multi-million dollar selling feature as opposed to a product-design PhD.  The same goes for innovation with corporate IT - new applications aren't always driven by developers but often by the specific necessities of a certain business unit, whether it's sales, HR or management.

These applications often start out as lowly Excel spreadsheets, passed around via email or on a shared drive within a division.  Then, someone internally with passable coding skills or maybe a sympathetic member of the IT team turns this spreadsheet into a low-level Web application, allowing it to be shared easily across the division.

The next stage of evolution occurs when someone higher up in IT or on the management team sees the app in action and envisions something greater.  Maybe the application could revolutionize the way the company tracks prospects internally or perhaps the app is a game-changer for the whole industry - they don't quite know yet.  What they do know, however, is that the application, once specific to a single department, needs to be standardized for the business as a whole.  Now IT's headache begins.

So how do you take what was once an Excel spreadsheet and turn into a standardized IT process?  It's elementary...if you are using the Agile Platform.

Video 1: How to turn an Excel spreadsheet into a web app

It's not just about turning an Excel spreadsheet into an application - plenty of point-and-click tools can do that.  The real problem lies in maintaining this application as it evolves into a strategic business tool - and the Agile Platform can help.  Business IT isn't static - ever - so you need a development platform that can help you maintain, change and evolve not only your newfound mission-critical applications but also your old warhorse commoditized IT applications.


Video 2: How to quickly change the web app

Learn more about turning Excel spreadsheets into Web applications.  Then, if you think our approach is interesting go do it yourself by downloading the free Community Edition of the Agile Platform and following the first tutorial.  I think you will find it amazing what you can do with the Agile Platform.
sogeti.png
Last Monday I had the pleasure of participating in a Sogeti event dedicated to Agile Platforms and Tools. The event was organized by Samuel Ranzato and it was split into three talks: one about Visual Studio 2010, presented by Clemens Reijnen from Sogeti; one about the Rational tools, presented by Ton van Velzen from IBM; and one about the OutSystems Agile Platform, presented by myself.

Both the Visual Studio and Rational tools presentation focused mostly on project management, and the life-cycle of issues and change requests. Some tools were shown that help developers keep track of what they have to do, and what they need to test.

Instead of going for Project Management, I decided to take a different approach and focused on the tools that help developers do actual Agile development. Time was short, so I picked four key aspects of a project we believe are fundamental to ensuring project success when going Agile. These four points were based on the more than 600 Agile projects OutSystems has delivered, and for each, I demoed aspects of the Agile Platform to show how we can help:

  1. Time to market: For agile to work, you need to not only show working software, you also need to put it into production. The Agile Platform's visual environment ensures development that's fast and accurate; while 1-Click Publish enables work to be moved to production without a hassle.
  2. Flexibility to change: Also paramount to Agile is being able to respond to customer requests quickly. TrueChangeTM gives developers the trust they need to change the application without fear of breaking something else. To gather feedback from the end-users, ECT is the tool of choice; allowing end-users to pinpoint the exact part of the application they would like to change.
  3. Full-Control: Developers need tools that provide them speed of delivery, but being able to control the end result is also mandatory. During this section I presented Service Center, the Agile Platform management console, and gave a quick overview on how to monitor the platform for performance and troubleshooting. I also gave a quick overview of how to control security and the deployment process.
  4. Productivity: I started this section by explaining that it is important to have something to show the customer regularly, even if it means a bit more work for the developers. With this in mind, the new version of the Agile Platform includes the new IntelliWarpTM technology. This allows developers to build fully working first versions of an application in minutes! This first cut can then be presented to end-users and adjusted based on their feedback.
In the end I was very happy with the reaction of the 40 odd people that were in the room! I had the chance to talk with some of the attendees after the event, and I was really glad the Platform had once again made a great impression.

My only regret was that I didn't have more time to talk some other Agile challenges. If you were doing such a talk, what Agile challenges would you pick?
etc_button.pngWith Rat Catcher deployed in public Beta, it was now time for Justin James to start gathering user feedback on his application. To do this, Justin installed and configured OutSystems' Embedded Change Technology (ECT.) You can read about his experience in his latest diary entry in Tech Republic.

"ECT is a technology that allows the end users of my application to place a pinpoint on the working application, type a text message, and hit a button to submit their feedback. In the back-office, I then receive the screenshot of the application web page with the user's pinpoint plus the text message. (You can see a quick demo of the ECT in action.)"

Getting everything ready for ECT

ECT makes use of Enterprise Manager, a solution provided by OutSystems that centralizes all common administration tasks such as users, roles and the existing applications' back-offices. Installing it is easy. Just download it from the OutSystems Network and use the Solution Pack Tool to 1-Click publish the solution. "Next, you repeat this process, but with the ECT solution; download ECT here, open it, and click 1-Click Publish."

Configuring ECT

Justin provides a great step-by-step explanation in his article on how to configure ECT in Enterprise Manager, and moves on to using the ECT configuration wizard to customize its behavior. "The wizard is pretty self-explanatory from here. One thing to keep in mind is that you may not want to add ECT to every eSpace on a production server. Then again, you might want to after all!"

Collecting feedback

With ECT up and running, users started to send feedback about RatCatcher. As Justin puts it, this "feedback system is far better than receiving the typical email from a user where they have a hard time describing what the problem is. It can be used for bug reports as well as suggestions for improvements." 

"While this is the type of feedback that could be given through email or a trouble ticket, ECT's ability to show me exactly where on the screen the user had a problem is extremely useful. In addition, it functions as a simple issue management system."

One point Justin mentions is that he might have "to find a way to educate users about ECT". ECT is very discreet and "the bottom right is the least viewed part of the screen." This was actually a design decision we made at OutSystems. Although we want ECT to be ever-present, so users can submit feedback whenever they want, we don't want it to get in the way of the application.

I hope Justin keeps getting excellent feedback from his users on RatCatcher, and I'm sure the app will continue to get better and better! In the meantime, we'll be waiting for the next installment of the Developer Diary!

I just read Justin James' most recent diary entries #4 & #5, where he continues to develop his Rat Catcher web application; his next challenge - to integrate custom code, he'd already developed, into the Agile Platform. As Justin said, "I was not worried -- after all, I knew that Integration Studio would let me hook up my application to this code."

I thought I'd share some key learnings and highlights from these two journal entries.
(BTW, If you missed the previous entries of Justin's diary check this previous post on the About Agility blog.)

JJ4 pic.jpgIntegrating Web Services
Turns out Justin's code uses some advanced patterns, and although Integration Studio did its part and "was successful at a technical level," Justin opted to use another form of integration: Web Services. As soon as Justin made his code available as a web service "it was a cinch to point Service Studio to the deployed Web service." Well, Justin did find a little bug, but this was a great opportunity for him to connect with the OutSystems community for help and guidance, and we're really happy that he thought "it was a great experience"!

Deploying Rat Catcher
With all the pieces in place, it was now time to deploy the first public version of Rat Catcher. Justin has a pretty elaborate infrastructure, and the experience he documents in the diary entry will surely help people with similar setups. Nice to hear that installation was a breeze, since "the team did an amazing job with version 5 and getting the install to be smooth and easy."

Doing things the hard way - but learning...
After configuring the Agile Platform, all that was left was deploy the application. Justin actually did this the hard way; he deployed one component at a time... but I was really happy to see that he learned all about the OutSystems solutions, so he is now able to quickly move all components to production at once, while keeping version records so he can rollback to old versions if needed.

I'm looking forward to the next five installments to hear about his continued experience with the platform, and hope you're following along too. What do you think of Justin's experience so far?

developer-diary2.jpgThere's no better way to try technology out than to build a real-life application with it. Taking an idea for a product and developing it is a great way to understand the value and shortcomings of any new tool.

This is exactly what Justin James decided to do with the Agile Platform and he's journaling his experience of developing his new web app, Rat Catcher, in a series of diary entries that are being published in Tech Republic. You can check out his first set of entries: Diary #1, Diary #2.

The following is an excerpt from Justin's latest experience using the Agile Platform in Diary #3 where he starts by saying:

"The Agile Platform is composed of four major pieces: Service Studio, Integration Studio, Service Center, and the Agile Network. I spend nearly all of my time in Service Studio, which is where the application and data modeling occur, as well as application debugging. You can also publish your application to a server from Service Studio. While Service Studio is an IDE, it uses a paradigm that is very different from any IDE that I have ever used.  The three major functions in Service Studio are data modeling, process modeling, and screen design."
He goes on to describe his first reactions, some of the difficulties he encountered, and how he managed to change his developer's paradigm to really make the most of the Agile Platform. Although a bit technical for some of our business minded readers, I think our developer base will find these articles very interesting.

I'll be curious to see what Justin thinks of version 5.1's new functionality (watch this space for more info on this upcoming release!) For example, the new wizards that will help build the screens from the data model even faster. Justin also hits on an advanced detail when he talks about the "late load" AJAX component, which admittedly was a bit of an odd pattern, and something our developers have fixed in 5.1.

So, this goes out to all of you professional developers; please share your experiences and tell other readers what you like and don't about working with the Agile Platform.  What do you think of Justin's take on the platform? Does it match your initial experiences?
 
Mike
(Follow me on twitter here)

TechRep D1.jpgWe're very excited that Justin James (the author of "OutSystems' Agile Platform: IDE of my dreams") over at Tech Republic is chronicling his use of the Agile Platform to build his personal software project, Rat Catcher, which will help media outlets track down plagiarizers and unauthorized uses of their content. 

He recently posted his first diary entry of working with the Agile Platform, and it provides some great insight for new users.

Lots of people have been tweeting on this article already - what do you think?  Are you new to the Agile Platform?  How does Justin's experience compare to yours? Do you have feedback on features or capabilities of the platform?  Let us know!
LW.jpgAs a follow-up to our previous post; here is the third and final interview question from our conversation with Lawrence Wilkes, Director and Principal Consultant with Everware-CBDi, on how IT departments are addressing their legacy systems: 

Q.3 What are the top three mistakes people make when addressing their legacy?

LW: I might have hoped that post Y2K, organizations would have more actively sought to avoid building yet more legacy systems. However, time and again we see organizations doing the following:

  1. Creating another legacy. They fail to understand why they have legacy systems in the first place, and just rush into creating another one. They don't understand the requirement for on-going change, nor does the business encourage them to think about it. This could be due to:  a lack of process - i.e. they don't understand how to facilitate change at each stage of the life-cycle; or, stakeholders unwillingness or inability to express requirements for change.

  2. Not designing for agility. Agility isn't just a process - as in agile development - agility is also an analysis and design requirement. Ensuring a new solution is better able to respond to change than the legacy systems it is replacing requires appropriate techniques throughout the life cycle. It isn't just a matter of creating a more agile implementation built with finer-grained components and services, but also understanding the business's requirements for agility and identifying those components and services in a way that aligns with that. Conversely, you don't need to over-compensate and waste time providing too much agility where it is not needed - although, that is always going to be difficult to predict...

  3. Not cleanly separating the legacy from the new solution. The two become entwined storing up an even bigger legacy problem for the future. For example, a proper service architecture is not developed that is truly independent of the legacy systems, and so the new solution remains tightly coupled to the legacy. Even though they may use loosely coupled technology such as web services, their content and behavior is just a direct reflection of the legacy system.

What do you think? Do you have any do's and don'ts on addressing legacy that you'd like to share with the community?

Lawrence Wilkes is a Director and Principal Consultant at Everware-CBDI. Lawrence is a frequent speaker, author and consultant on best practice in SOA, Application Modernization and Enterprise Architecture. Via CBDI Forum, the Everware-CBDI research capability and portal, Lawrence has led the development of the CBDI-SAE methodology and supporting Knowledgebase, which is used by both end-user organizations and system integrators around the world. Lawrence has an extensive background both within end-user and vendor organizations having worked both in the business and IT side, which brings particular insight into business/IT convergence.
As a follow-up to our previous post; here is the second interview question from our conversation with Lawrence Wilkes, Director and Principal Consultantlawrence wilkes.jpg with Everware-CBDi, on how IT departments are addressing their legacy systems: 

Q.2  Is there a role for model-based tools like the Agile Platform in legacy modernization?

LW: Although a large part of the functionality may be based on those that already exist in legacy systems, there is still a need to design and assemble the new solution that is typically focused on supporting a new business process, channel or product.  This requires a layer of new development that 'wraps' the legacy systems, and the capabilities created out of the legacy still need to be integrated into that new solution. For example, capabilities in the legacy systems might become service providers to the new solutions.

At the same time, new capabilities are likely to be required since legacy modernization usually entails more than the need to re-skin, or re-process the legacy system. There will be new business requirements that the legacy system didn't address.  Hence, model-based tools can be very useful in terms of:

a.      Designing and implementing the new process and UI layers
b.      Creating the services that wrap the legacy capabilities
c.      Creating both new business functionality, and new components & services to support them
d.      And finally, assembling it all together into the new solution.

Have you used a model-based tool to help with your legacy? What have been the benefits?

In the next and final question, Lawrence offers the top three mistakes people make with their legacy modernization efforts.  


Lawrence Wilkes is a Director and Principal Consultant at Everware-CBDI. Lawrence is a frequent speaker, author and consultant on best practice in SOA, Application Modernization and Enterprise Architecture. Via CBDI Forum, the Everware-CBDI research capability and portal, Lawrence has led the development of the CBDI-SAE methodology and supporting Knowledgebase, which is used by both end-user organizations and system integrators around the world. Lawrence has an extensive background both within end-user and vendor organizations having worked both in the business and IT side, which brings particular insight into business/IT convergence.
We recently met with Lawrence Wilkes, Director and Principal Consultantlawrence wilkes.jpg with Everware-CBDi, to talk about how IT departments are addressing their legacy systems. 

We will post Lawrence's response to the following three questions over our next few blog posts:

  • What are the top three things you've seen people do to successfully address the competing demands of new build vs. legacy modernization with limited resources?
  • Is there a role for model-based tools like the Agile Platform in legacy modernization?
  • What are the top three mistakes people make when addressing their legacy?

#1   What are the top 3 things you've seen IT do to successfully address the competing demands of new build vs. legacy modernization when faced with limited or shrinking resources?

LW: My experience is enterprises that are really successful tend to buck the trend. They are more radical and don't just "follow the crowd". Rather, there are usually one or two key people who have an architectural vision that breaks new ground - at least from their organization's perspective. Typically they will:
 
  1. Combine application modernization and business improvement programs. They get business stakeholders involved in understanding the options for modernizing, both in terms of business needs and the applications that allow a more radical approach to be taken to requirements.  They avoid the knee-jerk reaction of buying a package or simply outsourcing the entire problem because they are seen as expedient options that, however, often results in something that is no better able to respond to change than the legacy it is replacing. Instead, they are keen to search out economies of scale and cost; capitalizing on existing investments in applications where possible, rather than just throwing them away, and break-down organizational and application silos to create solutions that are genuinely more flexible.

     
  2. Keep business design and architecture in-house; create strong architecture and Centers of Excellence (CoE) roles that are able to exert strong architectural governance over outsourcing and delivery. They do not allow the outsource parties to gain control, nor do they lose knowledge of their business, applications and environments.

  3. They use agile approaches but are not slavishly following the conventional "agile" manifesto - agile needs to be used within an architected, governed framework, not ad hoc. They establish a formal reference model and framework, which allows rapid delivery and governance of products, delivered by an agile process.

What steps has your organization taken to successfully address legacy systems while delivering new systems?

In our next post we will address Q.2 and the role of model-based development tools play with legacy modernization.


Lawrence Wilkes is a Director and Principal Consultant at Everware-CBDI. Lawrence is a frequent speaker, author and consultant on best practice in SOA, Application Modernization and Enterprise Architecture. Via CBDI Forum, the Everware-CBDI research capability and portal, Lawrence has led the development of the CBDI-SAE methodology and supporting Knowledgebase, which is used by both end-user organizations and system integrators around the world. Lawrence has an extensive background both within end-user and vendor organizations having worked both in the business and IT side, which brings particular insight into business/IT convergence.

Last week the second annual gathering of the Portuguese Scrum User Group took place in Lisbon. It was a great opportunity to meet with people that are actually doing agile projects in several different contexts. The meeting had a great set of speakers, including the co-author of Scrum Jeff Sutherland, Mitch Lacey, Ademar Aguiar and myself.

I had the opportunity to speak at this event!

The event started at 9a.m. with Jeff's talk about Hyper productivity in Scrum teams. The room was crowded with around 150 people. This audience was particularly interesting because of the mix of experience vs new people. There were a lot of people that wanted to understand what is this thing called Scrum and the rest were a good mix of experienced Scrum users that wanted to learn and share experiences with each other.

My presentation was all about sharing experiences! OutSystems has been delivering agile projects since it started with a very unique 'dual' context.  On one side of the spectrum we develop a software product - the Agile Platform - by a dedicated set of Scrum teams that work in OutSystems R&D department.  On the other side of the spectrum, we have a team of Professional Services that delivers enterprise web applications using the Agile Platform following an agile approach.  This team has delivered over 600 successful Agile projects! Pretty amazing and where I decided to focus my presentation...

scrum-gathering.png
The challenge was to identify from all this experience a couple of topics that would be of value for any team that delivers Scrum projects for the Enterprise. In my research for this presentation I came up with 4 major issues that the industry complains about when adopting Scrum (you can see the presentation slides here):

  • How do we do fixed price projects? After all customers want to know how much will it cost before signing a contract, right?
  • Where's the Product Owner? Namely when you are delivering to an enterprise with little experience in Agile with multiple stakeholders.
  • Dealing with immature teams. What is the most common challenge teams face in order to become self-organized?
  • Handling distributed teams. The question is, can we deliver with distributed teams? 

For each of these issues, I shared how we've overcome them with specific examples from our own projects and sometimes with references and examples from known authors in the Scrum community. Please feel free to check out my slides and share your thoughts on the challenges you and your organizations faces using your Agile approach.

4 aces planning poker.JPGThere's a lot of blogging about agile estimating and planning but most, if not all, that I've come across only pertain to after the project has been started.  Further, what is being estimated and planned is for the iterations.  So how does one define budget for the agile project itself, specifically a web business application project?  I mean, the cost of the hardware, 3rd party software, facilities, etc. everything except the actual software development cost can be fairly straight forward to budget. 

But what about the software development cost?  Using conventional methods or techniques is certainly an option but they do not account for the fact that agile projects tend to cost less when compared to similar projects.  So, perhaps this is not the way to go. Besides, business owners want to know what they're getting for their money and how much it is going to cost them. 

At OutSystems, we solved this by taking the following 3 steps:

  1. First, we work with the business to gather and transform high-level requirements into user stories.  Stories highlight features that detail what the user wants to do (e.g., create, list, search) to specific objects (e.g.customer, store, loan). 
  2.  
  3. These features are patterns of implementation; it is the patterns that are estimated in hours based on years of experience delivering agile projects successfully and this experience is encapsulated in our OutSystems Agile Network Sizing (ANS) tool (BTW - you can see a demo video here).  The tool allows us to set various influencing variables such as number of developers, iteration size, number of user profiles, etc. that enable us to adjust the estimates based on complexity levels.  There are always unknowns during funding and these variables help provide a means to shore up those that may require more attention during the project.
  4. Given the resources, we are able to calculate what we call the ideal project timeline, complete with sprints and a target go-live date.

  5. You can probably use story points to achieve the same thing assuming you have a common baseline and have equated points to some level of effort which, in turn, equates to dollars. 

What if you get funded without this process?

Let's say your project gets funded but you did not use patterns or story points to determine your budget.  You start the project and gather your user stories, prioritize them and the size them.  You conduct your sprints and over the course of say 3 iterations, calculate your average velocity and capacity.  Having your averages, you can calculate the average cost of each iteration and thus the project itself; also, potentially determining when you will run out of budget.  Unfortunately, when using story points and a burndown chart, you still cannot predict with enough certainty when the project will be done. To most stakeholders, stating an approximation or a moving target date is just not acceptable even if you stress the benefits of going agile - early delivery, handling evolving requirements, software that meets specifications, early risk mitigation, etc. 

So what do you tell them?  How do you accurately estimate the time and cost it will take and then convince the stakeholders that the project will be done on time and within budget?   Do you give odds when answering when the project will be done?  What do you do if you run out of budget?  Are you gambling with your budget?

Here's the process we've developed:

a) We bootstrap the stories, budget, timeline, sprint definitions from the sizing tool into our project management tool - the OutSystems Agile Network Project (ANP).  The bootstrap process calculates the budget for each iteration based on the overall budget.

 
b) Each iteration is allocated a budget for development, technical debt, change requests, testing, and sprint review.

 
c) Once the information is in ANP, we review the stories with the business, prioritize them and even negotiate what goes in an iteration, just like any other agile project.

 
d) We also break down the user stories into work-items and estimate them (in hours) in conjunction with the developer(s) assigned to complete them.  It is the work-items that we commit to deliver for the sprint.  This helps us ensure that we do not exceed the iteration's budget. 


In summary, estimating based on patterns enables us to define the project budget.  Resource estimates and other influencing variables coupled with the budget enables us to provide a project timeline and target go-live date.  This information allows us to manage the project at the sprint level ensuring that we are on target while not exceeding our budget.

What method(s) do you use for estimating project budget and timeline?  What method(s) do you use to ensure you deliver within budget and on time?

The challenge we see in many Enterprise IT shops is that it is hard to get everyone across the business who touches application development 'on board' with an agile approach.  In this blog post I want to share how the CIO of one of our customers has set guidelines which help drive agile project delivery across the business.
cio-mandate2.jpg 
The customer is a large Portuguese food distribution and consumer goods manufacturing company, with an international presence.  With nearly 25,000 employees they are used to having huge IT projects, involving multiple departments with complex requirements, large budgets and long timelines. 

Before agile, many of these projects were delivered late, over budget and in some cases actually failed.  In 2005 they became an OutSystems customer; embracing the Agile Platform and an agile methodology. As they matured in their agile practices, the CIO saw the value and today they operate under the CIO's mandate that only projects scoped with a timeline of less than three months and a budget under 300K will be approved.

What happened before the CIO mandate was put in place?  Here's what they told us:

1. They would spend two to three months in meetings, aligning all opinions in order to create a huge requirements document;

2. When they finally started developing the systems the business team had disappeared and in most cases forgotten about the project;

3. By the time the project was ready to be tested the key users had changed, the business had changed and the project delivery team immediately entered into a lengthy negotiation phase to reconcile what was delivered versus what the business really needed.

This customer states that with the agile methodology and their new CIO mandate they improved the success rate of their projects in several ways:

1. The business team is more motivated and involved as they are able to see how the projects are progressing on a regular basis;

2. The business gets to be more responsible for the decisions that shape the project direction because they see and constantly test the application;

3. The business and IT avoid the costly, wasteful exercise of building complex requirements documents because they now fully realize that they can never document every detail in a specification;

4. From very early on in the project, IT can see if the project is really what the company needs and identify any mis-matches quickly to reduce the amount of time, dollars and resources that might be wasted.

5. Even for big projects, Agile methodology is used - and forces the team to split the project into phases. This exercise divides the scope into smaller, manageable projects with incremental releases and decreased risk.

So, both for this CIO and many others, we are finding that an agile approach to application development really helps increase project success rate and reduce risks.  Even in a company like this one that has complex application needs, lots of departments and bureaucracy - agile really works! 

What are the technical leaders in your company doing to help drive agile project delivery?  Or, what would you like to see them doing? 

Share their rules, guidelines and mandates along with your ideas!  


ball point game.jpgWe have recently started playing the "Ball Point Game" in some of our informal Agile learning sessions. This is a game played by some scrum trainers. The basic objective of the game is to get as many balls through the team as possible within two minutes. Each ball must be touched at least once by every team member and must end with the same person with whom it began. After two minutes the team is allowed an additional minute to discuss the process and how it could be improved. It is recommended that the game be played a total of five times or sprints. You can learn more about the game in this Scrum Trainers blog post

When I was first introduced to the game I wasn't quite sure what Agile concepts I would learn about.  Was this about the importance of retrospectives; scrum meetings and communication or scrum of scrums?  What I learned were some interesting aspects of all these topics plus, what I think was the real message from the exercise - with experience comes speed and quality, and experience can be injected into the team when done at the right time!

So for those who don't know this game it is very simple and quite fun. A good team building exercise even if you are not practicing Agile. 

Watch this video now and my findings below will make more sense.
 


Mike's findings from the Ball Point Game
As you can see, the game was fun.  If you did not notice the video was from two different sessions; one session was in Lisbon, Portugal and the other in the 'sunny' England.  (I know, hard to believe it was sunny in the UK!)  Let's reflect on the four topics I mentioned above:

1. Retrospectives are really key for the delivery team to be able to adjust and improve.  They also give you a point in time to measure your effectiveness as a team.  Important if you are interested in improving!

2. Scrum meetings and communication are part of the secret sauce for agile.  It was very evident in the video.  You saw the teams discuss their performance, brainstorm ways to improve and then implement the improvements.  Of course this concept extends beyond the 'ball passers' to the whole Agile team including the business users, testers, etc.  If you don't have regular interaction across the whole team the Agile process breaks down very quickly.
 
3. For large teams the concept of "Scrum of Scrums" is critical.  Our first group was very large, there were four separate delivery teams and their Scrum Masters met to discuss the 'project' and then collaborated with the smaller teams.  While I agree this is important, it begs the question - management in Agile projects?  Of course if you read this blog regularly you already know that for Enterprise agile to be successful you need some good project management!
 
4. Experience is critical for success.  If you go back and look at the video you might notice that before the last sprint the teams get a nudge from an experienced player.  In this game's case the nudge is about 'maximizing' resources - and this meant passing two balls at once.  This would never have been considered in the earlier sprints but with a little experience to direct the teams they easily adopted the concept and really improved their performance.  A bit of a warning: a good agile coach will let their team build on their skills and not introduce a 'nudge' too early.  I suspect that if we had given the team the "two hands" advice after the first sprint it might have proven less beneficial as the teams had not progressed enough in their working approach to successfully implement this advanced concept.  Food for thought.

So, both groups improved their efficiency many times over from the first sprint.  In addition, if you would have asked them if they thought they could double their throughput after each sprint they would have been skeptical at best.
 
And the final lesson: Keep an open mind, learn from experience, and be willing to fail - just do it fast and adjust! 

Let me know if you have played the game and what your take-aways were.

You can follow me on Twitter here.
trophy.jpgOutSystems is all about Agile - and the same applies to our internal R&D team which has been using Agile since 2002. Because we've been using Agile for so long all the principles are pretty much entrenched in our culture - but as the company and the department grew, we started to feel the need to share our Agile knowledge with newcomers to the team.

We considered several ways of doing this. We pondered doing a traditional PowerPoint presentation; we thought about assembling a mandatory reading list; we entertained the idea of adding support on our tools for some of the Agile tenets; and so on...but in the end we decided to organize a contest around Agile to help new team members learn about the methodology the fun way!

Let's play: Who wants to be an Agilionaire?

The idea is simple. Each week a question about Agile was sent to the entire team. The question was accompanied by 4 possibilities, and the contestants had to pick the right one. Everyone could reply to the question within 24 hours, and the winner would be the person with the most correct answers. You can check the questions & answers here.

This approach worked really well, and had a lot of advantages over any of the other methods - here are a few:

  • People were encouraged to look for an answer. This not only ensures people are paying attention to what you're teaching, it also promotes self learning.
  • The questions were picked based on the real issues we witnessed internally. This means that people were learning what they needed most, not every detail on Agile.
  • We sent a small justification of the answer with references to sites, blogs, and books on Agile - and provided more bibliographical references than we could ever hope to transmit on a single presentation.
  • We got an idea of people's knowledge on Agile. Now we are aware of how much people know about Agile (and the results were very good, I might add). We also have an idea of the areas where specific people need more help, and will use this knowledge to help them get up to speed.
  • Everybody participated. If we had done a Power-Point presentation, I'm sure we wouldn't have had everybody raising their hands.
  • It was really cheap! There was no time invested in preparing the presentation or in changing the internal tools. The only work required was preparing the questions and answers.
  • It was fun! Everybody liked this idea, and we got great feedback from the team! It was surely more fun than going through a 2 hour presentation on Agile...
2 months and 8 questions later, we have a WINNER! Miguel Melo had the brilliant result of 7 out of 8 questions right, proving to everyone that he's a true Agilionaire! To celebrate the victory, Miguel was awarded a priceless handmade trophy (built and designed at OutSystems;) an adventure pack to prove he's also Agile out of office; and he gets to show up in the Agility Blog! Congratulations Miguel!

winner.jpg

Nine Useful Agile Resources

| 10 Comments | No TrackBacks
New customers and partners often ask our consultants for recommendations of good sources of introductory information on Agile practices and Agile methodology - so we thought it might be useful to list of some of our favorites. Feel free to add your faves!

In no particular order:
  1. Jutta Eckstein's book - Agile Development in the Large
  2. Mitch Lacey & Associates - for their Blog + PDF Decks
  3. Juergen Appelo's blog "Noop.nl"
  4. James Shore's Blog "The Art of Agile"
  5. Google Tech Talks: Elisabeth Hendrickson on Agile Testing
  6. Craig Larman's book "Agile & Iterative Development
  7. Dan North's Blog "Introducing BDD"
  8. James Bach's resources (blog, book, pdf & articles) on Exploratory Testing 
  9. Last but not least, our very own Rodrigo Coutinho's video on "The Secret of Agile Speed"


You should follow us on Twitter here.

A Five Step Agile Roadmap

| 7 Comments | No TrackBacks
A recent LinkedIn question asked for advice on how to get a company started down a path to Agile and SCRUM. I thought it might be useful to share some advice and see if the OutSystems community had any ideas to add.

agile roadmap.jpgAt OutSystems, our roadmap is strictly a guideline because companies have different methods, cultures, and management approaches. When introducing Agile, here are the steps we generally go through. Concepts and activities that are emphasized will vary based on understanding of the customer culture, organizational structure (formal and informal), as well as their prior knowledge of Agile methodologies.

1. Education - first, level-set those involved in the roll out. We found that there are many different levels of understanding of what Agile is even if people say they "get it". Part of this process is to make them actually go through the process before the project begins. At OutSystems, we have "Agile-in-a-Day" training sessions that provide participants with a hands-on introduction to help develop real understanding of key concepts and activities. If you have a project already selected, involve the business sponsor, business manager, and key business users.

2. Project Definition / Selection
- Once everyone is clear on the vision and direction, a project can get started. The project may have been identified earlier but how the project is chosen or what criteria was used needs to be understood. Since this is the first Agile project, we need to make sure that risks at this level are addressed to help ensure success for both project and process. The criteria for selecting the project needs to include the solution's level of complexity, visibility, resources, and integrations.

3. Execute Project - Now we start the project by educating the target users if they were not involved in the initial Agile-in-a-day. Go through the project kickoff; explain the methodology, roles, responsibilities, timeline, deliverables, etc.; fairly standard project stuff and along the way - expunge the word "scope" from all project documents, thoughts, and discussions. Work on the backlog, feature negotiations, the sprints, scrum meetings, demos, etc. Once a sprint is done, do a retrospective and refine the processes for the next sprint and the next project. Once the solution is in production, conduct a tuning sprint. This is a special sprint we do at OutSystems to ensure 100% adoption by implementing features that will boost adoption and conducting both solution performance & platform tuning in the production environment.

4. Perform Project Retrospective
- apply lessons learned to subsequent projects and refine other processes. Note that this process improvement will involve Support organizations and dynamics between project teams. One of the things we often encounter is that Support organizations cannot move as fast as the project sprints and tend to delay Agile projects. Similarly, non-Agile projects have a difficult time addressing the integrations with Agile projects. As you execute your first project, you will find that you may need to bend or even break some rules to keep your project on track as defined by your timebox. Therefore at the end of the project, you will need to work with Support and other internal organizations to establish new protocols or processes specific to Agile projects.

5. Iterate Steps 1-4 - In our experience, we found it necessary to conduct multiple Agile-in-a-Day sessions to get everyone in the company level-set on the organization's approach to Agile. Agile is a mindset change; expect hurdles and naysayers. Besides, change is always difficult even if the participants are willing, able, and have executive sponsorship.

(Unofficial #6 - Be realistic and good luck)

What do you think of this roadmap? How have you introduced Agile into your companies?




I had the opportunity to present at this year's Integrating Agile Conference in Amsterdam, Netherlands.  The daylong event was kicked off and closed by two fairly famous Agilistas.

OutSystems.jpg


First, Henrik Kniberg kicked off the event with an excellent keynote address focused on the value of Agile when applied correctly.  Check out his blog post on "Failing With SCRUM." During his presentation Henrik made some great points regarding root cause analysis.  I found one of his examples quite interesting - using his root cause analysis technique he had helped a customer uncover that the real issue was a lack of trust between IT and the business.  While Henrik's main point was about how Agile is simply a 'tool' that when applied correctly will improve application development, I found his point about trust most interesting because in my experience Agile, when practiced properly, will help overcome a lack of trust between IT and the business.  More on trust in a moment. . .

The closing keynote was given by Rob Thomsett.  I was actually late to the closing keynote but very glad I got to hear most of it.  For those of you who, like me, do not know of Rob, he is an 'old guy' with some very interesting insights into Agile.  You can read some of Rob's thinking in his personal blog.  While I don't know Rob, I felt like he was an old friend after his presentation - I guess that means he is a great presenter!  He is obviously a Star Trek fan and since he mentioned Stevie Ray Vaughn he must love music. BTW, I am sure if he reads this blog post he will chuckle about the "old guy" comment!

Rob also made some great points during his presentation regarding management style; agile adoption issues and he also hit on the point of trust.  He took the issue of trust beyond the relationship between IT and the business by calling out most of the audience (IT folks) and making the point that trust started with the technical team trusting each otherDoes your technical team trust each other?  Something to think about!
 

Agile Holland and Agile Consortium logos.jpg

It was a great day in Holland for Agile - with over 100 people all sharing and learning.  For me, a key take away is how important trust is to being successful! 

I hope you will share your Agile experiences and how they have helped your business and development team overcome trust issues!
 
 


So, SAP is embracing Agile development for their new SaaS strategy (see Phil Wainewright's post on the recent SAP announcements); About time don't you think?  Most ISVs are way ahead of the hype around Agile and have been applying some form of Agile development since the beginning of this century. Now, for those of you working in corporate IT shops who think SAP's move is a great endorsement of Agile methodology and are going to run to your management shouting "the time is now!" ...let me caution you on a few key points where you might run into some bumps. 
Caution-agilists-beware.gif 
1. You probably don't have an ongoing product-based budget. This means that you can't simply keep on developing until the customer is satisfied.  In your corporate IT world you will still have to get funding for each project, which means some form of project scoping and estimating. If this is done the way it has been in the past it will not be very Agile! Also, if you really embrace Agile, those features that get pushed out of scope by the business (due to more important features) will have to be put into another project which will require more scoping, estimating, funding and perhaps even a bid process with your third party contractors - NOT very agile.  All this can defeat the benefit of Agile and leave your business with the Agile blues. (I discussed this issue in a previous About Agility Blog post)

2. You probably don't have a staff of full time Product Managers.  Of course you don't have product managers in a corporate IT shop.  This role is supported by the business users. Thus, you have to work really hard to change corporate culture and get these business users to play in an Agile way.  This will require more of their time, more trust and a shift of application ownership during development, that for many is a real culture shock.  Be prepared.  The good news is within a few sprints you should have them on board as long as you keep your sprints short (2 weeks max) and hit your sprint demo deliverables.  Once they get a good taste of Agile they will not go back!
 
3. Your self-organizing team isn't so well organized.
The challenge many of you in the corporate IT world face is a lack of on-staff resources.  Thus, a lot of applications work is co-developed or outsourced to third parties.  This makes the concept of self organizing teams a bit risky as it introduces lots of politics, negotiations, etc.  Once again, not very Agile.  You will have to find the right contractors and get your procurement organization to let them participate in an Agile manner so they don't risk losing their shirt or end up using non-Agile practices. 
 
So, while I am a big proponent of Agile, to be successful in the corporate IT world requires a lot of culture change!  And while SAP may go Agile in one big push, for the rest of you, I say "be Agile - take it one project at a time, think big but start small and learn with your business as you go."  

Calling all corporate IT shops - have you adopted Agile practices? Have you encountered these issues? How have you dealt with them?

During last week's Agile-in-a-Day workshop in the Netherlands, I participated in an interesting discussion with the group of 25+ current and future Agile practitioners - on the impact of Agile methodologies on well established corporate processes and culture.
moneybag4.JPG
In particular, on the question of moving Corporate IT to Agile and how that means changing the traditional way that IT projects get approved and funded.  The group felt that breaking the traditional cycle of detailed requirements documents, mandatory project deliverables and change requests would impact the entire project approval/funding and management processes - and yes, successful transition to an Agile model would require corporate IT to educate their business owners and stakeholders on the Agile approach.  However, the workshop participants all agreed that making this change would definitely be a challenge.
 
One of the strategies we discussed was shifting the focus of the procurement process from detailed requirements to defining the amount of functionality to be delivered.  We shared the OutSystems' approach of using user stories and patterns to set a high level scope of functionality to be delivered and made the case that function points could be used as the measure of functionality - since this would allow the delivery team the necessary freedom to adjust the requirements during the project while still meeting a target deliverable.

This seems to be a recurring theme that I'm hearing from IT teams who want to embrace Agile. If you have faced this challenge and succeeded (or failed) - what do you think of the above approach and how does your IT team get its Agile projects approved and funded?




Presentations1.jpgAs promised, the customer, partner and OutSystems presentations that were given at the NextStep '09 conference are now available online.

These include great case studies on Agile development, Agile technical tips and tricks, and discussions on the future of agile, adoption and business value.

 

Also, if you have not yet completed the Agile Adoption Survey - it only takes 2 minutes and we would greatly appreciate your input!

 

With over 500 successful Agile projects under our belt, one of the key learning points we want to share in this edition of About Agility is the concept of the 'Tuning Sprint'.

Over the last several years we have used this concept and found that it dramatically drives end-user adoption of the delivered application. However, there are some fundamental challenges that we will discuss in this article so that you too can be successful.

The 'Tuning Sprint' Defined

The concept of the Tuning Sprint is straight forward and is now part of our formal Agile Method. With each project we now incorporate a post-production sprint that is specifically for the purpose of 'Tuning'. During this sprint we are looking for two distinct types of feedback: usability of the application and performance.

To accomplish the tuning we take the production application and share it with an expanded set of users. In most cases the new application is rolled out on a limited basis to a set of users who will ultimately become trainers and take the application to the rest of the user base. With this set of expanded users we collect feedback in as close to real time as possible, prioritize it and make the necessary changes. In many cases we deliver multiple versions to production in a single day.

The result is that many of the small, nagging usability issues are removed from the application. By addressing these issues on a daily basis during the sprint, the expanded set of end-users become owners of the new application and major proponents of the application's adoption among the full user community.

Simple Concept - Challenging Practices

While the concept of the 'Tuning Sprint' is simple there are a few challenges that your team will have to overcome in order to be successful:

Challenge 1: Ability to collect and prioritize feedback in real-time

Challenge 2: Ability to make changes rapidly

Let's look at each of these issues in more detail and make sure we fully understand what must be overcome in order to be successful.

Challenge 1: Collecting & Prioritizing Feedback in Real Time

While this might sound simple, for many projects this will become a big challenge quickly. First, you need to consider the proximity of your expanded user base. In many cases the users of the application will be in remote locations. Therefore you will need to have some mechanism for collecting feedback in as close to real time as possible. In the worst case you need to collect feedback a couple of times a day from these users.

Once you have the mechanism established for collecting feedback, you then need to be able to review, prioritize and easily hand it over to the development team so they can make the necessary changes. Our experience shows that when done correctly, you will receive a large amount of feedback in the first few days of the tuning sprint. We have found that if you have good tools with which to review the feedback, you will find that many of the usability issues are identified by a majority of the users and this in turn makes prioritization easy. In this case, the more users who complain about a specific issue, the more important it is to fix.

In summary the challenge is to come up with a mechanism that allows you to easily capture the end-users feedback with as little ambiguity as possible, and make it easy to review, group and prioritize into change requests.

Challenge 2: Making Rapid Changes

Of course the mantra of Agile is all about embracing change. However, during a Tuning Sprint we push this to the extreme. To be successful you need to address several potential development and delivery hurdles.

First, you need to make sure that your development environment supports making rapid change in a high quality manner. In most cases these changes are not complex but when you are making the number of changes we see on a daily basis, your tools must provide excellent support for ensuring you don't create more work by breaking something that was working well.

Second, you need to make sure that you have the ability to deliver new production builds multiple times in a single day. For most, this is where quality issues really rear their ugly heads, as builds tend to be complex and error prone.

And third, you must have the operational support to deliver these new production versions in a rapid manner. This typically means that traditional processes must be modified to support the Tuning Sprint and Operations must have the confidence in the builds to move them to production. In addition, a fool proof roll-back capability must exist if something moves to production which causes problems.

We have found that for most of our customers, making the application change is the easy part. The challenge is executing the rapid builds while not compromising quality and getting Operations to allow you to make multiple production releases in one day.

OutSystems Agile Products to the Rescue!

As you might know or have surmised, at OutSystems, we have addressed the challenges associated with the Tuning Sprint.

To overcome the challenge of collecting and prioritizing feedback, we've created the Embedded Change Technology (ECT). This allows end-users to record their feedback directly on the running application in real time. By capturing the actual screen and associated feedback, ambiguity is eliminated.
ECT is complemented by the Agile Network Projects. Agile Network Projects allows you to automatically collect the ECT feedback, easily group similar change requests and prioritize them into new work items for the development team. Once handed to the developer, a single click will open the Agile Platform to the spot where the change is needed.

Overcoming the challenges of making rapid change is also supported by the Agile Platform. Key functionality like our True Changeā„¢ engine assures that you don't break something that was already working. Once the change is made, we automatically merge the change and create a new deployment package - and thereby overcome the challenges faced with traditional build mechanisms. Once the build is complete, we offer Operations the ability to easily manage production versions and deploy them with a single click. If there is a problem with the new version, Operations has access to the Agile Platform's One Click Roll-back functionality which makes it easy to revert to a prior version.

By incorporating a Tuning Sprint into your Agile projects we are confident that your end-user adoption will sky rocket and help drive Agile practices across your organization.

What happens when your application software change cycle time shrinks from months to hours or days? Over the past four years, we have overseen the deployment of hundreds of Web business applications all following agile methods. During the course of these projects, we have faced many challenges and found some surprising benefits.

This article describes some of the lessons we have learned and provides advice on how you might overcome some key challenges in your own agile projects.

Introduction

In 2001 when I assembled a team of seasoned Web professionals, we looked back at our frustrated past of trying to release complex Web applications in Extranet and Intranet environments. While we were always able to deliver these projects, the process was painful.

The review of our past performance showed that it was impossible to accurately analyze and document the real business requirements. Following a traditional waterfall method meant that projects were doomed to be late and over budget. We were plagued by changing requirements, unanticipated integration challenges, usability annoyances and ultimately the formidable task of training thousands of users in a short amount of time.

So we decided to look at the problem from a radically different point of view where we embrace and nourish change. Fundamental to this shift were two key project assumptions:

1) Assume that the application scope can never be accurately defined.

2) Let the application scope evolve during the project based on user feedback.

Agile methods align nicely with this approach. When complemented with tools that allowed us to time-compress the change and upgrade processes, we were on our way to dramatically improving our ability to deliver complex Web business applications.

Fast forward to 2008 and 500+ projects later. Today, we have successfully adopted an extreme change mantra where we constantly enhance and re-factor applications as we drive toward meeting the real business requirements.

Agile - A Mantra for Extreme Change

Our mantra of extreme change is well served by agile methods. Over the years we have found that embracing extreme change has helped us meet our project milestones and deliver applications that are aligned with business needs and easily rolled out to large user bases. We have also found that business users actually make pretty good testers and that incorporating them into the process early and often results in a better end product.

On the flip side we have faced several unforeseen challenges. Collecting feedback from end users early and often resulted in a need to find a better way to manage and prioritize the feedback. In particular, help desks and documentation present a big challenge with embracing extreme change and must be addressed up front or you will suffer when you roll-out your application.

Over time, we've developed a tried-and-true Agile approach to help overcome these challenges and continue to work on improving our agile skills and ability to deliver dynamic applications that support extreme change.

Let's look at some of the lessons we have learned.

Listen to Users at Large

Over time, we formalized our mantra of extreme change around an agile method and delivery platform based on Scrum. In the process, we learned how difficult it is to capture timely feedback from a large user base through the help desk and one-to-one conversations.

About two years ago, we started experimenting with embedding feedback functionality in the applications themselves. We added a non-intrusive hovering button to the bottom of every application page that can be clicked to expand into a feedback form. The user points to the relevant area of the page, types the feedback and submits it. The page contents, user name and session information are collected automatically, packaged into a Change Request and, sent to the agile delivery team. The results have been staggering. In one case where an application was launched to 25 users, we collected more than 200 suggestions, bugs and comments in two days. Out of this 200+, 10 were identified as critical by the agile team (IT and the business) and they were implemented in three days. This tuning process skyrocketed adoption of the application and allowed a smooth roll-out for the remaining 1,100 users.

Transform Business Users into Testers

One of the great side benefits of having your users so heavily involved is that they make excellent testers. That is why we make efforts to get more business users participating in the early betas delivered at the end of each sprint. Taking this approach we can spot usability inefficiencies, functional errors and optimize the experience for first time users early in the process. The end result is that final acceptance testing and QA sign-off is simplified because we eliminate the delivery bottle neck.

Prepare for Life after the "Go Live"

Rapidly responding to change is especially valuable in those days after launch where the business users get to use the application and experience the harsh reality of a new way of working. It is important that the project team stay around so they can quickly tune any remaining usability and performance issues. That is why we have restructured our typical project schedule to include a Tuning sprint after the application has been rolled out into production.

The impact on the team is substantial. First, you need to prepare the Product Owners and Business Stakeholders for the influx of post-launch work resulting from business user's first impressions and feedback. This feedback is valuable because it helps increase the usability of the application and decrease the need for a help desk or user manuals. But it requires an extra effort managing a growing backlog, prioritizing features and approving changes.

Secondly, the handover from development teams to maintenance teams needs to happen later on in the application life cycle. Therefore, it is always a good idea to keep the development team in place after the production release to take care of the Tuning sprint.

Manage the Help Desk Challenge

Our extreme change mantra usually extends throughout the life of the application. After the Tuning sprint, the application typically decreases its level of critical change and is then passed over to maintenance teams. Agile maintenance teams keep a steady, continuous release cycle, launching new features every two to four weeks. This short release cycle requires constant retraining of the help desk which is simply not cost effective.

One solution is to release less frequently. In fact, some of our customers have artificially slowed the release cycle for application updates to accommodate the learning curve of the help desk. However, this becomes problematic as the business quickly learns you can now make changes very rapidly as experienced during the Tuning phase of the project. Thus slowing down the release process in maintenance mode requires resetting expectations with the business.

We have found that a better solution--especially effective for Intranet applications--is to spread the help desk function among the business user community. In a specific situation, one of our customers launched a Requisitions Management application to 1,400 employees, most of whom were first time browser users. To distribute the help desk load, they used 45 departmental administrative assistants as first points of contact. The agile delivery and maintenance teams then focused on keeping this smaller number of power users in sync with the new releases.

You might wonder why we did not simply incorporate the help desk team into the delivery process in order to train them all at once. Our experience has taught us to look at the problem in a different way. Because of the large amount of applications supported by this staff, they had no specific domain expertise, and that prohibited them from efficiently participating in the delivery phase.

Dispense with Useless User Manuals

If you think maintaining a help desk is difficult, keeping a standard user manual in sync with a continuously changing application is tougher. Here the best solution has been to embed contextual "Help" into the application itself. This way, changes in the application and in the Help or instructional content are always incremental, keeping everything in sync. We have found that a content management framework embedded within the application simplifies this process of delivering user documentation in sync with each new code base.

In traditional development projects the user documentation task can, and often is, performed fairly independently of the development work. Since in agile projects the scope evolves at each sprint, documentation and development teams must work side by side and contribute to each new release. Expect a substantial impact in your delivery, maintenance and documentation teams as you shift into an agile way of working.

React Fast to Increase User Adoption

Assuming change as part of the software delivery process is crucial to Agile delivery. In addition, we have found that this approach also dramatically increases the adoption of our applications.

Let me give you an example. In a recent project, we had to implement a Web-based invoice approval system that would replace a complex set of manual processes. A particular sub-process involved the final invoice approval by cost center directors. In the manual process, the director's personal assistants (PAs) brought them an explanation of the invoice with an approval form ready for signature.

The new Web invoice approval system involved a "small" re-engineering of the process that assumed a pure self-service model without PA intervention. (Note: all of the cost center directors were part of the steering committee that helped define and approved this innocuous process change.) However, during roll-out we realized that half the directors had shared their passwords with their PAs, so they could do the pre-validation. Suddenly we had administrative assistants with $100,000 approval power.

As you might guess, the capacity to change fast was crucial here. A new PA profile was added to the application, the work flow was changed to include the pre-validation process, and most importantly the PAs provided input on requirements. During the original analysis, the PAs were not even considered as stakeholders.

This change was implemented over a couple of days driving end user adoption and making IT a hero!

During the project postmortem, we met with the consultants responsible for the initial requirements analysis to figure out why they did not foresee this problem. In addition, we wanted to understand why the cost center directors signed off on the process design. We discovered that the directors were embarrassed to state they relied so heavily on their assistants so they approved the process change hoping it would work.

When it comes to predefined business requirements, adopting an extreme change mantra can help you overcome poor requirements, "wishful thinking" and re-engineering challenges. We have dozens of these stories that reinforce the need for continuous change, even after the application has gone into production.

Conclusion

By far, the greatest benefit of pursuing our mantra of extreme change is delivering what the business needs, on time and on budget, both predictably and well. When a company is able to react quickly to unforeseen situations, and overcome them successfully in a rapid manner, there is a direct correlation with user satisfaction--adoption simply increases and IT regains its rightful place, aligned with the business.

Agile Platform

Build your next great Web App today: Take a tour of the Agile Platform