Scotch on the Rocks 2011 Day One #sotr2011

Submitted by Falken on

Keynote (Adobe)
Terry Ryan
Terry started off by saying that 5 years ago, we built websites with 2 simple tiers. Now have a web application, and tablet, and mobile, and each in many versions.
He showed a  speeded up video of building a mobile client for ColdFusion server, 38 minutes compressed into 3. As well as just being plain quick, most time was spent on UI and the data model. This is good, technology should be in the background of the experience. Across devices, the UI time would grow and anything else shrink. We have to be on other platforms now, look how easy Adobe make it was the take away :-)
He then talked about the new home for ColdFusion at Adobe, and how it has reduced red tape. He intro'ed the new ColdFusion server and Builder engineers from India. I chatted to them both later on in the bar, and they're great people, happy to listen but also suggest why your brilliant idea wont work for them. Looking forward to hearing more from them.

Next up was some of the European-based stuff Claude Englebert has done recently, including localised ColdFusion community blogs and the  ColdFusionBox Android news aggregating application. There's also an EMEA ColdFusion application catalogue.

Then Ryan shows some new ColdFusion Builder version 2 stuff that CFEclipse or Eclipse has had for a while now, but is bundled in now. There are also a few nice additions like a customisable code beautifier (hi, FDT !) and some handy keyboard shortcuts. These are thinks like 'Quickfix' using ctrl-1, to create an undefined CFC or function when instantiated looks useful, actually.

Adam Lehmen then took over, as his last Scotch on the Rocks as ColdFusion product manager.
ColdFusion Builder 2 is released on beta today !
Finally Adobe have got a proper ColdFusion bug tracker, and is also live today. It will be the common issue tracker platform for all Adobe products, and it's written in ColdFusion with the Mach 2 framework ! No more Jira, no more horrible Flex mess.

Adam then gave a bit of ColdFusion historical perspective. Did you know Microsoft tried to buy ColdFusion from Allaire but Allaire said no, and now the latest .Net Razor looks like ColdFusion did 15 years ago :-)
Starting with ColdFusion 9, Adobe are thinking 3 versions out to future, so ColdFusion 10 will build on the stuff introduced in version 9, and offer some cool new stuff itself.

So, on to the meat of ColdFusion 10 aka Link. This is all being made public for the first time at Scotch on the Rocks, which is awesome for Andy and the guys !
The idea is to make sure ColdFusion is seen as a modern platform, mature not legacy. And also provide an easy path to HTML5 and mobile applications. In this setting, do long-established features like Flash Forms really make sense. Does anyone use them (no hands !).
AJAX is a different model to just sending HTML out and waiting for the client to ask for a whole new page.
Out Verity - there's now full CFSEARCH support for Solr. This means there's no document limit, it scales much better (to N clustered search servers), and supports many free extensions.
Out JRUN - once the applause died down Adam said this is a move to Apache Tomcat. All Adobe server products will now run on Tomcat. Adobe will have their own supported Tomcat version, and contribute bug fixes, you won't have to get any more dirty than with JRUN, so not at all for 90% of people. Only people with complicated clusters should see any issue. Oh, and this will make ColdFusion even faster.
In Apache Axis 2 rather than 1. This makes ColdFusion a much better citizen producing and consuming web services, especially for .Net (as it's got WS-Security etc).  But this changes the WSDL signatures, so all you existing clients have to change their code. But Adobe will weave their magic to make compatible.
In REST support, for publishing or using RESTful web APIs. Interesting to see how easy that's made ( createObject('rest',...) ?) !
In Exchange 2010 support
In better scheduled tasks. You can now specify ranges (like 8am-10pm), conditions (like less then 80% CPU usage), triggers, chains, priorities, groups, and make them application specific rather than server specific.
New CFJOB tag, works with an execution queue. An easier alternative to cfthread, and able to work with those queues from from code. Database, RAM and other options for the backing store. I asked later about being able to publish/subscribe to standard JMS message queues, Amazon SQS or remote ColdFusion servers, but they weren't telling me anything yet :-)
Better Java object support. Adam joked this is killing one Mark Mandel project (JavaLoader) at a time, so ColdSpring had better looked out :-) CreateObject('java','',pathsArray) or set with the option to monitor this and auto-reload changed .jar files during development.
Closures in cfscript. This is 'meh' for me. I think code written like this is a mess. Shrug.
Plus updates to ColdFusion 9 stuff like ORM and Flex Remoting (even better lazy loading).

Requirements and estimating
Peter Bell
Peter is always a great speaker with a good crowd, and this as no exception.
Most people are on teams with 5 to 10 team members, selling services they build with an even split of 2 to 5 and 10 to 20 apps.
Most have heard of user stories but not using. Interesting that.
Even if can find a business expert, they can't articulate desires.
Intent driven design has four stages: business intent, audiences, objectives and user stories / tasks (handy non-technical alternative name there !).
No value to product inventory like cars sat in factory half built. So ship the minimal viable features.
The famous "As an X I want to Y so that Z" moment :-) If you cant figure out the 'why' of an action, maybe shouldn't be an action at all.
Stories are negotiable, a starting point for conversation and design- tracer bullets, not missiles.
Long stories should be split down by sub task for data (save form data), validate entry, paths (what happens if...), and edge cases (400 req from same IP).
Cross-cutting stuff like logging can be isolated to it's own story (via AOP on the server) saves 'and log' in every story.
Reflex estimates are bad. But remember to ask if time, price or both are fixed, and does accuracy matter i.e. is this a betting the business type issue, where cost is less of a factor.

Ideal days of effort for a task is an estimate, not a commitment. But management need concrete numbers. So multiply the estimate by a load factor (factoring for interruptions).

Using 'story points' as stand-in for ideal days avoids "you've had two days to do this one day task, even though I interrupted you 4 times, why isn't it done". Only whole completed stories count, we know if something is done, much harder to say how close to done something is - 98% ? 99% ?. After a few sprints/time-boxes/whatever, you'll be able to say that in the last developer month your team did 46 story points, so you will aim to do that many next month.

Zero point stories aren't - they all add up so bundle some together into a 1 pointer.

Tempted to use 10, 20,... rather than 1, 2... points but this is confusing because can't be that accurate.

Over time can maybe move to just S, M, L t-shirt factors. Eventually you get good at writing stories, so just count them, because their all M.

Planning Poker can be used to average guesses. If wildly different guesses, find out why, because someone knows something they've not got across yet.
Magic/affinity estimating sounds even more fun- just throw tasks in sizing buckets buckets then look at them over coffee. Find the tasks that bounce from S to L and then planing poker them !

On managing risk, Peter says there are only really four types of features. Rocket science (cant estimate, it's new to the world), lab (need to handle 4k reqs/sec, so try it and if can't optimised code, and iterate. Could take forever.), new to you (but someone has written a class/blog post for me, easy to estimate, just take the extreme estimate and double it), twist (easy, done before, just add 20%).

On setting expectations, Peter says it's important to say at the outset that "We do not commit to solving your problem", we will "just deliver something that meets the spec.". If the customer doesn't know if that is enough, why not? What 'obvious' thing is missing from the spec.?

As some closing points, the difference between and estimate and a commitment is it's 50% certain to do vs. will do no matter what.
If you can aim to make 40% of the features optional, to allow for schedule slip, this gives a lot of wriggle room to still meet the spec. (or deliver *something* by dead line).
One awesome thing it's be great to have budget to do is for where the technology is highest risk, so you do it with two simultaneous equal teams, so twice the chance of doing it !

Matt Gifford
This was sitting room only to a packed audience, and at the outset Matt said 'it is convoluted and hard' but that didn't thin the crowd at all :-)
Nobody reads privacy policies. Our data is out of our control. But companies want it, to sell on or do analytics. Some legit, some not.
You are responsible for protecting users online life, which increasingly spills over into real life too.
Email address as user name, might be  real handy for users but should you really store that personal data ? You are your email address !
OAuth is a better way.
OAuth tokens are like tickets for barrier gates, you exchange money (self) for ticket (token), so you can represent users without giving away details.
Twitter, Google, Yahoo, Facebook Graph etc. all use OAuth.
But what about the OpenID project ? It's similar but shares a single identity with many sites, where as OAuth shares data without identity.
Matt amusing describes this as the OAuth dance:

 * Request token, a temporary value for a user
 * redirect user to the provider to approve
 * consumer can then ask provider to trade request token up for access token and secret.
 * save access token and secret and use as stand in for user's name and password.

You can reuse the final access token/secret as many times as you likes, but user can revoke your applications access at any time, so still in control.

The docs for OAuth are bad. Different providers are all slightly different just to make it more annoying. has a test server impl., handy to test clients against or use as basis of own server.

Flex 4.5 mobile
Terry Ryan
Adobe mean Flash Player 10.1 or better, Air 2.5 or better, when they talk about Flash on mobile. Air has a device specific api. Write in Air and compile to native iOS, Android, WebOS etc.
Mobile challenges are related to a small device, no complex UI like data grid, memory usage, and needing own design patterns.
Flex 4.5 has mobile optimised components (a larger skin, more efficient code). List removes its scroll bar for instance as well as adding swipe-to-scroll that makes no sense on desktop with a mouse.
ViewNavigator is the new base component. Can push/pop other view stacks, stores data for views but destroys/recreates the components to reduce RAM usage. You can push to the same view but with new data to paginate.
TabNavigator is similar, but only room for 3 tabs. Tabs are persistent though.
ActionBar is a global header strip but of course you can redefine for each view if req.
Top tip: don't have circular table references in the database, assuming ColdFusion doesn't just explore it's very inefficient, so check code generated by things like Apptacular..

Terry then built a simple mobile app using the application and data wizards in Flash Builder 4.
Really easy to test a ColdFusion CFC, drop method onto the list on the stage, and have it all wired up. I must play with this more !
The 'Run' dialogue asks to run in emulator or send to device.

When push/pop view, you can specify the effect to use so going back slides the other way.
Design view has a handy drop down for mobile device types.

Unlike PhoneGap, you can also can run 'on device' from the run configurations menu. Terry plugged his Android phone in and it just worked. WebOS for Blackberry is 'soon', iOS 'less soon' but on the way.

Pick up girls with css3
Chris Mills
Not much to say apart from the accidental porn-popup, which I just caught after spending a while talking to the Fusion Reactor guys in hall.
Display:table-cell is handy, and removes the need for abusing table tags, but I'd not seen it before.
There are also :valid and :invalid form pseudo selectors.

The pen is mightier than the keyboard
Rob Rawlins
An awesomely funny, energetic talk with nice tangential slides.
If you remember Andy's preso. from Manchester, this was the same style on the subject of not letting technology lead design. For example the Pruis vs VW Golf in efficiency.
As geeks, we overuse technology, remember the marque HTML tag. How to stop this happening ?
Do you know your users ? It's important to get to know them. You wouldn't use technology without understanding it.
Visual communication is engrained, we retain more than written or heard. We draw from a small age, so very powerful.
Your first idea will be wrong, so jot down everything and get feedback on all of it.
People are also more reserved the more effort that they think went into a mockup. So get feedback early.
Sketches are not a deliverable. The end goal of the drawing process is what you learn while drawing.
Getting over the blank page issue, of where to start: Don't add the logo, navigation at the start- those are experiences that come later. Storyboarding bare essentials is the key to success, like scenes like in movie.
Ban 'lorem ipsum' it doesn't help the user know if getting what they need. But copy writer might write less, then have to pad with noise to fit design. This is wrong way around !