If you’re a Salesforce.com developer and are a fan of both Agile software development and neat visual, drag-and-drop task management tools like Trello and SeeNowDo and want that type of functionality on the force.com platform, then look no further. This open source project (built for my former employer FinancialForce.com) can be dropped into your org and customised to fit your process (with a bit of development here and there). It’s a good example of just how powerful the force.com platform is!
Here are a quick set of slides I put together at the time explaining the background of the project and how it was built:
This slideshow could not be started. Try refreshing the page or viewing it in another browser.
The Sprint Wall Project
– FinancialForce.com use Scrum (pretty much)
– Sprints, stories, releases, etc are stored in our SalesForce production org
– Driver: SalesForce UX is pretty awful (really)
– Managing story development on platform using the standard UI wasn’t working well
– Teams started using external apps like SeeNowDo, Trello, etc.
– Multiple data locations – not ideal
Newflash: Lists Suck!
But Boards, Boards Rock!
SeeNowDo – Doing It Right
Sprint Wall Scope
– Create ‘Agile Task’ SalesForce custom object
– Borrow UX from SeeNowDo:
+ Agile tasks appear as cards on a board
+ Agile task status changes when moved between status columns (Not started, In Progress, etc)
+ Live updates when other people change tasks
+ Generate team burndowns
– Keep it on the SalesForce platform so all the data is in one place
– Make it fast!
How It Was Built
– Single VisualForce page with a controller
– Simple ‘view model’ classes returned and passed into remoting methods
– jQuery, jQuery UI and CSS for appearance and behaviour of the page
– Trigger on ‘Agile Task’ to get burndown data
– Built start to finish in 2 weeks by 1 person
The Tricky Bit – Live Updates
– At the time, Comet updating not an option on force.com (now is via streaming API)
– Created ‘Version’ field on the Agile Task object
– Trigger ups version when an agile task changes
– Store stories, tasks and task version on page using jQuery data() method
– Call a remote method asking for changes every 3 seconds
– Apex method compares state with actual state and returns a ‘changeset’ to the UI
– UI then updates the DOM accordingly
– Much faster than classic VisualForce pages
– Very quick to build a rich UI
– If I’d built this on another platform I’d have spent a lot more time worrying about and designing for scalability at the server side
– On force.com I let SalesForce handle it – and they actually can
– If I can build a rich UI like that in a couple of weeks, anybody can!
Things To Think About
– Once you release a controller in a managed package you can’t change the @RemoteAction method signatures as they’re global
– Prefer passing simple types (view models) around rather than sObjects
And here’s a video of the sprint wall in action. Note that there’s no commentary as it was recorded for a presentation over which I’d be speaking (and I’d only have shown it if the internet was down – gotta plan for the worst). Feel free to sing along:
Now if you’re interested in trying it out, take a look over at the GitHub page