Agile on the Beach 2013 – Day 1

This is the first time I’ve attended Agile on the Beach and I feel it was a very successful event.  There were three tracks, Software Craftsmanship, Teams and Business.  I almost exclusively attended the Software Craftsmanship track and a couple from the Teams track.

The event kicked off with a keynote from Dan North.  He explained his view on mastery – a progression from apprentice and journeyman with the defining characteristics of each.  Dan ties his talk together with a story of his own journey to the mastery of a particularly difficult origami fold called the Jackstone – a fold he attempted as a child, but failed to master until decades later.

Jim Barrett had the first slot in the Software Craftsmanship track and he was unfortunately beset by some technical difficulties.  After the initial hiccups he dived into giving an overview of Clojure.  I haven’t done anything in the language before, nor have I tried anything in Lisp which it is based upon and so was interested in learning of its power.  Unfortunately I feel he spent too much time on the syntax.  I personally don’t get much out of watching people code simple snippets on-screen.  I realise this isn’t very constructive feedback.  Maybe it would have worked better as a workshop with a Koans approach or with some direct comparisons between Clojure and Java code to show the advantages and differences.

(negative) feedback

Marcin Floryan was up next with a presentation focussed on feedback and how important it is to collect, review and act upon relevant feedback you can gather about your system.  An enjoyable presentation with a dash of humour.

Lunch was a variety of sandwiches, nothing particularly special, but nothing bad either – vegetarian options were well represented and there was plenty available to ensure you got your fill.  I know I’m commenting on food, which may seem inconsequential compared to the presentation content, but I feel it’s an important part of keeping up the stamina and morale of all attendees and speakers.

After filling our bellies James Lewis had the difficult after lunch slot but he managed to keep us interested with an overview of how systems built as microservices can create highly reactive and flexible ecosystems.  This is essentially how the architecture is designed at 7digital – small, focussed internal HTTP based services supplying functionality for their bounded contexts.  We’ve found it to be highly successful and it was good to see it being presented.

I took the stage next, hiding my nervousness by cajoling the audience into a Mexican Wave, a silly thing to do, but it made the distance between us feel smaller.  I believe my presentation went well and I fielded many questions, some of which I am now finding to be repeated each time I give the presentation and as such I must find ways to incorporate the answers into my slides.  I’ve got answers to some previous questions asked listed on a blog post here.

I’m afraid that I didn’t attend the final session as I was too amped after my talk (apologies to Phil Nash) – I’m still getting accustomed to speaking and I find that it can knock me sideways once the adrenaline wears off.  I hung around in the communal area, grabbed some coffee and wrote up some notes for the day.

The day was finished up with a few Lightening Talks of which the highlight was a method for visualising problems and obstacles, which I believe the person called The Mercado Technique, but I must have heard wrong because I can’t find any sources of this on Google.  If anyone managed to get the proper name, or the name of the person who presented it, please let me know. Update: @AnthonySteele informs me that it is The Mikado Method and @EwanMilne let me know that @facilligent had presented it.

https://twitter.com/Agileonthebeach/status/375701598535954432

The day wrapped up with a Beach Party which included a free pint of the local ale and a hog roast (veg burger option too).  The British weather let us down a little and it was slightly cold and windy, but nevertheless the sunset was beautiful and the conversations were interesting.  A good first day.

Slides and videos from the event are being added here.

Presenting at Agile on the Beach

After some reassurance from my friend Alan Kelly, I submitted my experience report on Continuous Delivery to this year’s Agile on the Beach.  To my surprise and delight I’ve been accepted!  This will be my first full scale conference as a speaker and I’m very excited and nervous – I hope I can finish the day having inspired at least one person.

Agile on the Beach is a two day business and technology conference taking place in Falmouth on the 5th and 6th of September.  It’s on the Cornish coast and from what I’ve been told the weather is great and there will be a fantastic beach party on Falmouth’s famous Gyllyngvase Beach.

The conference includes three strands of agile adoption – Software Craftsmanship, Business Strategy and Teams and I’ll be presenting in the Software Craftsmanship stream.  The full list of speakers and a schedule are up on the site.

I can also let you know about an offer of 10% off your ticket at Agile on the Beach using discount code SGUEST13 when booking in via Eventbrite – tell them I sent you 😀

Early bird tickets are available until the 31st of July at £265. Accommodation is also available to book on site at an additional cost.

To book tickets to Agile on the Beach visit http://www.eventbrite.co.uk/event/5135380060 and follow them on Twitter @Agileonthebeach / #agileotb.

Presented at SyncIpswich

Following on from the success of SyncNorwich, Carl Farmer has set up SyncIpswich – a regular event for technologists, creatives, entrepreneurs and graduates to meet up and talk in with the aims of growing the community in Ipswich.  Paul Grenyer recommended me to Carl as a speaker and after letting Carl know that I’m not proficient at speaking (yet) I agreed to come up and give my presentation on Continuous Delivery at 7digital.

Despite fighting with the traffic in Ipswich town centre I made it just in time and spoke in front of a crowd of roughly 60 people.  As before, my slides were done in roughly 15 minutes and I fielded questions from the audience for about another 15 minutes more.

After a short break I was followed by Richard Astbury giving an introduction to the Azure platform where he deployed an empty MVC App from his laptop and then a simple Hello World node.js site from his Raspberry Pi at home, which was rather impressive and demonstrated how smooth it can be.

We then gathered at the nearby pub where we broke into a few discussions about the advantages and disadvantages of feature branches among other things and I admired the view of the boats in the marina before I left for the nearly 2 hour drive home.

I had a great evening and it was good to talk to people outside of London and once again be reminded that we don’t have the monopoly on smart, inquisitive, talented developers doing great things.  Thanks to Carl for arranging it and Paul for recommending me.

Team Transformation Presentation for London Continuous Delivery Group

On Tuesday 19th March I gave a short presentation on the steps 7digital took to transform our team in order to facilitate Continuous Delivery.  This was held at Skillsmatter for the London Continuous Delivery group.  I also managed to rope in a few of my colleagues for a discussion panel after my short set of slides

I’m really grateful to Hibri, Goncalo, Matt and Rob for coming along as I felt that having more than just my voice would add to the credibility of what I said and it would also be more interesting.

You can see the video on the Skillsmatter site and these are the slides.  James Betteley also posted a running commentary of the event where you can read some of the discussion which took place.

//speakerdeck.com/assets/embed.js

2012 Retrospective

As all Agile methodologies teach us, the action of looking back and reviewing your progress is an essential part of improvement. As such, I’m going to try and run a simple retrospective for my 2012.

Review

Lets start by reviewing the last year on a timeline. As it’s such a long period I’ll stick with monthly increments and pick out notable events.

January: 
 – Discovered WebGL and my messing about got picked up by LearningWebGL.com

February: 
 – Nothing of note 😦

March:
 – Attended first GDC Meet a Mentor event
 – Started planning the “Devs in the ‘ditch” events

April:
 – Organised a successful first “Devs in the ‘ditch” event
 – Organised the 7digital stand at the “Find your Ninja” event.
 – Attended GeekGirl Meetup in London

May:
 – Organised and helped man the 7digital stand at Silicon Milk Roundabout
 – Attended the Progressive.Net Tutorials

June:
 – Organised second “Devs in the ‘ditch” event

July: 
 – Became a STEM Ambassador

August:
 – Nothing of note 😦

September:
 – Organised third “Devs in the ‘ditch” event
 – Stepped up to take over the ACCU Mentored Developers from Paul Grenyer and thereby co-opted into the Committee.
 – Kicked off an ACCU Mentored Devs book group on JavaScript: The Good Parts
 – Attended DDD10

October:
 – Organised and presented at the fourth “Devs in the ‘ditch” event.
 – Presented the same talk at ACCU London
 – Became the API Team Lead Developer

November:
 – Took part in a Year 9 Careers Speed Networking event as part of being a STEM Ambassador
 – Presented to undergraduates at the Middlesex University IT Careers Forum
 – Passed Grade 1 of Cello

December:
 – Presented at APIDays 2012 in Paris

Other Stuff:
 – Adopted a lovely Cat
 – Attended at least 18 events, and spoke at 3.
 – Attended 4 Weddings (one of which was a surprise)
 – Lost just over 10lbs in weight and no longer officially overweight
 – Visited Portugal, twice, and Paris.
 – Finished reading 5 books, and started at least twice as many.
 – Wrote 12 blog posts
 – Created 13 Github Repos

Good / Bad / Change

Now is the part where I reflect on the year, using items that I brought up in my review as an aid and write down what I felt went well, went badly and what I’d like to change going forward.

Good

– Finally started speaking at community events, I’d been wanting to do so for so long, but was afraid
– Attended many events and conferences
– Improved my overall health 🙂
– Began organising events and learned a lot from this
– Began putting myself forward as role model to younger people as part of the STEM Ambassador work

Bad

– Didn’t read or finish as many books as I’d have liked
– Didn’t really travel or visit many places
– Only wrote a few blog posts
– Didn’t finish any programming projects I started
– I wanted to have done more with WebGL
– I seem to have coasted through the first quarter of the year

Change

– Must commit to projects and finish them before starting new ones
– Must commit to finishing reading books that I start before starting new ones
– Try to read more books
– Blog more, it improves writing and communication skills
– Stop procrastinating!

Goals & Actions

Normally the team would vote on which topics they’d like to promote to goals and actions but as it’s just me I’ll pick three that I feel are the most important.

Goal: Make 2013 The Year of Reading
Action: Read and finish at least one book a month.  Preferably a technical book but any kind counts. I’ve put the GoodReads Challenge in my sidebar as a reminder.

Goal: Present and speak more.
Action: Volunteer for more events. I did three last year, I’ll aim to improve on that.  I’ve already put myself forward for an event with the London Continuous Delivery group in March

Goal: Visit a new country
Action: I’ll make a point this year to take holiday somewhere that I haven’t been before.  It doesn’t have to be far, just somewhere new to me.

Retrospective Close

I feel that this was indeed a useful exercise.  It took a couple hours to do and write up mostly because a year is a long time period and I wanted to go back through my calender and emails to ensure I picked up as many events as I could.

Looking back I can say that that I’ve both done a lot of things, but also not enough things.  I picked up new items such as speaking and becoming more involved in the ACCU, but I also let things slip such as blogging and reading.  It’s so easy to let things slip by you when they happen one day at a time.

I’m hoping that 2013 will continue along the trend that I started as there is so much that I want to see.  At the end of the year I will run another retrospective and compare it with the actions above, which should be interesting!

APIdays 2012

On Monday 3rd and Tuesday 4th December Paris held host to the first international API focused event in Europe – APIdays.io.  Myself, and my colleague Hibri, eagerly took part and we gave a short presentation on how 7digital grew their public API, the lessons we learned and the effect it had on the way we work.  You can view the slides at the end of this post.

We received great feedback from our slides – it felt as if many people are just getting started in the world of APIs whilst 7digital have had their public API for many years and that they were very interested in hearing our real-world story.

The format of the event was a little odd, with talks in slots of less than 30 minutes, which on the plus side meant that we got to see a lot of different viewpoints and experiences but that there wasn’t enough time for anyone to get deep into a topic.  I’d like to suggest that a technical track has available 1 hour slots for anyone who wants to host a full-on technical presentation and debate – it felt like we barely scratched the surface in less than 30 minutes.

It was a great couple of days, and the first time I’d ever been to Paris.  I’m hoping that this event becomes a regular conference and that next time we can get far more technical with the content and swap the really gritty stories of lessons learned.

//speakerdeck.com/assets/embed.js

Questions from my Continuous Delivery Talk

My short talk on how we do Continuous Delivery at 7digital generated many questions from both the audiences at Devs in the ‘ditch and London ACCU.  Also, a couple more were asked on Twitter after the events.  Here are are the ones I can remember and my answers.  If anyone has any more questions please add them to the comments.

Can you choose which release version to deploy?

As we deliver web-based services, not products, we are always aiming to release the latest version which is almost always the of HEAD of the Master/main integration branch merged into a Release branch.

We rely heavily on TeamCity to trigger our deployments as well as our continuous integration.  It includes a feature called ‘pinning a build‘, which prevents it or it’s artifacts from being deleted in a clean-up policy.  It also allows us to reference these artifacts in another build, such as a deployment build.

Once the Release branch has been updated with the changes in the HEAD of the Master branch, and all of the tests have passed and we are happy, the build is ‘pinned’ in TeamCity and we kick off the Deploy to Live  build which picks up the pinned artifacts and deploys them to the production servers.

We can choose what build should be pinned and therefore what artifacts are released to Live.  We don’t necessarily version our releases because we never refer back to the versions and only a single version is ever live at one time.

How do you do a rollback?

We ‘un-pin’ the build and artifacts of the ‘bad’ release, ‘re-pin’ the build and artifacts of the previously known ‘good’ release and run the Deploy to Live step once again.  This effectively does a ‘roll forward’ with known good artifacts.

What role do QA have in the process and do they trust the automation?

QA are generally involved throughout the process.  Together with the Developers we will both fulfill the traditional role of a BA and analyse a piece of work, creating Acceptance Criteria which normally form the basis of the Automated Acceptance Tests.  Also, this means that QA are fully versed in the feature or change when it comes to UAT and explanatory testing and together we can make a judgement call as to whether a change actually needs QA manual testing or is sufficiently covered by the automated tests.  Being involved all the way through gives them confidence in the process.

A point to make is that we don’t have a QA Team as such, each development team includes a QA person and a Product Manager.  We all sit together and attend the daily stand-up so everyone is aware of what is taking place, the mood of a change and can jump in at any point.

How do you handle large features/pieces of work?

We hold an analysis session within the team, including the developers, QA and Product Manager to break down the work into as small a user story as possible, aiming for under a day.  Each story needs to be a single contained piece of the functionality which can be released on it’s own.  This is not always possible and in these times we employ Feature Toggles which will hide a feature until it is ready.

What we don’t do is have feature branches.  This is something that must be avoided to ensure that we are always integrating all changes and any problems are highlighted as early as possible in the development cycle.

What about database schema changes?

We use a tool we developed internally, but have since Open Sourced: DBMigraine.  There are a couple of blog posts on the 7digital Dev Blog here and here which explain it in more detail, but in essence it builds databases from a set of creation scripts applies migration scripts, and performs consistency checks between databases.

Using this tool we build a database from the scripts and migrations at the beginning of each Integration test suite and run the tests against the new schema.  This should hopefully flag up any major problems before these migrations are also applied to the Systest and UAT databases which are integration points for all of our apps sharing the same database.

It’s worth noting that we try to avoid destructive migrations, but this process has allowed us to gradually delete unused tables in a tested manner.

————————————–
Edit – new Question from @AgileSteveSmith

What cycle time reductions have you seen?

In my reply, I linked Steve to the following two posts on the 7digital Developers’ Blog related to productivity at 7digital: “Productivity = Throughput and Cycle Time” & “Development Team Productivity at 7digital“.

The posts illustrate, with data tracked from our own work items, that there was an incredible reduction of Cycle Time in over the course of 2009 to 2011 – you can even see the massive spike at one point where things got worse before they got better, as I mentioned in my presentation!

A full report was put together, with even more charts and graphs, which can be downloaded from the second blog post.

Continuous Delivery at 7digital

It began with an off-hand comment on the ACCU General mailing list that at 7digital we release on average 50 times per week, across all of our products.  I thought nothing of it, virtually all of our products are web-based, which makes it relatively easy to deploy on a regular basis, but it seemed that others were interested in how we do it and so I was cajoled into giving my first presentation.

I began by explaining what we understand as Continuous Delivery – a set of repeatable, reliable steps which a change must go through before being released.  In our case most of these steps are automated.

I described where we came from and how we approached the change, in both a technical and business manner, and where we would like to see ourselves going.  I then included a flowchart of  A Day in the Life of a Change at 7digital, which Prezi allows me to ‘bounce’ around as we hit different stages in the pipeline.

I answered many questions clarifying how we handle rolling back a bad release (we actually ‘roll-forward’ with artifacts of the previous ‘good’ release), whether our QA team are comfortable with the process (yes, they help write the criteria),  and how large pieces of work are tackled (we try to break them down into deployable pieces no bigger than a day).

Here are the slides:

http://prezi.com/bin/preziloader.swf

DDD10 – The day of REST

I was on holiday when the sign-up for DDD10 went live and I missed the window by about 5 minutes.  Still, I added myself to the Waiting List in hopes that it would work and on Monday I got an email letting me know I had a place – Excellent!

Reading through the schedule, I decided to take advantage of those which relate to my current role as a Lead Developer in 7digital’s API Team, which meant the three REST talks.
The first session, Jacob Reimers’ “Taking REST beyond the pretty URL“, failed to meet me lofty expectations.  It was more of an introductory talk, which did not go much beyond level 2 of the Richardson Maturity Model.  From the questions of other attendees, this talk did get some people thinking, with questions wondering how interactions could be reproduced using only the HTTP 1.1 Verbs, but I was not one of them.  It is at times like these that I realise just how forward-thinking London is and that there are many places where this kind of approach is not a given.
The second REST focussed session I attended was Dan Haywood’s “Restful Objects – a hypermedia API for domain object models” and simply put, it boggled my mind, but not in a good way.  It was obvious that Dan had done his research, but when it came to his implementation, something had gone terribly wrong, and it was like entering the Twilight Zone.  Restful Objects is a specification which aims to standardise and genericise REST.  I’m not a fan of “generic”.  In my experience anything that aims to be generic ends up being complex, difficult to use and maintain, and incredibly inflexible, as such I mentally flinch whenever someone uses that word to describe a system.  
The biggest things which stand out in the spec is the inclusion of an “action” in the URI and a requirement for ~/{resource}/invoke endpoints – this misses the point of using the verbs on the resources themselves!  It is littered with URIs such as http://~/objects/ORD/123/actions/placeOrder/invoke. It also advocates exposing the properties on the URI too, which I believe pulls this property out of the context of the resource.  Also, it seems to advocate exposing your domain as the resources thereby creating systems which end up with tight coupling and knowing too much about each other.

Dan does caveat his design by stating he believes there is no need to hinder and complicate your system too much if it is to be entirely internal.  I disagree, to some extent, all of these systems will become “public” in that they will eventually be integrating with other systems and teams that you do not have direct control over and therefore need to minimise the coupling.  At 7digital we design all of our internal APIs with the same approaches and philosophies as if they were publicly exposed, and at some future date, that may even become the case.

Finally, there was Mark Rendle’s session “Simple.Web 101“.  Although, not a session focussing on REST itself, but on a REST framework.  I had seen Mark unveil Simple.Web back in June at the Progressive .Net Tutorials and I was curious to see how far it has come along. At 7digital we mostly use OpenRasta, but we have a few APIs written in NancyFX too and we’re always open to finding new tools which may be better for the job.  As this was only a 101 talk it didn’t go into enough depth for me to see what the improvements have been, but Mark is giving a free in-depth discussion this SkillsMatter this Monday.  Unfortunately I cannot make Mondays as I have my Cello lessons, but I will catch the podcast later.  

Outside of my mini REST-fest, I attended Neil Barnwell’s talk on “CQRS and Event Sourcing… how do I actually DO it?“.  I have unwittingly managed to avoid learning anything about this area and was hoping Neil could educate me fully in only an hour, which I feel he succeeded to do.  It was an overview with some code examples thrown in which have removed the mystery for me.

Out of curiousity, I attended Jimmy Skowronski’s talk “C# + PowerShell = happy couple” and learned a little about writing your own commandlets.  Finally, Garry Shutler took us through “10 practices that make me the developer I am today“, which he described as a retrospective of his career thus far and hoped to impart some useful lessons.

I had a great day and I wish to thank all of the organisers and everyone who helped and I’m already looking forward to next year.

Progressive .Net Tutorials

This week I attended the Progressive .Net Tutorials at Skillsmatter.  It’s a 3-day conference of hands-on tutorials focussing on the .Net Platform.

Day One

Don Syme talking about F# (Photo from @AnaisatSM)

On the morning of the first day I attended “Practical Functional-First Programming” starting with Don Syme giving a presentation of the benefits of using FSharp.  To me the presenation felt far too “sales-y” for my liking containing statements along the lines of F# will make you write robust code faster and with less bugs – I’m sure I’ve heard that said before about almost every language out there…  We then got our hands-on some F# with Phil Trelford introducing the F# Koans.  I’ve completed these before, and feel that they are a fantastic practical introduction and I recommend looking for Koans in any language you plan to learn.

After lunch I went to Liam Westley’s “Async and C# 5“.  This was very much the same talk I had seen at DDD9 in January last year, but as it was a tutorial we got our hands on trying out the Async ourselves – once I’d finally downloaded the VS2011 Beta of course.

Day Two

Look! It’s me in the audience 😀  (Photo from @AnaisatSM)  

For the first talk of the second day, I took a chance and saw Mark Rendle‘s “Introduction to Simple.Web“.  As Mark himself said, he’d not talked about Simple.Web before, so he was pleased that so many people came to see him talk about something no-one had heard of, but I had heard of Mark and his tool Simple.Data.  It turned out to be the beginnings of a REST framework, but unlike OpenRasta, which we use heavily at 7digital for our APIs, it has HTML representations as a main focus and works very nicely with Razor.

It’s still very much a fledgeling project which doesn’t handle errors or logging very well, and I daren’t ask about which IoC containers it integrated with, but it was only created at the end of Feb!  I’ve already taken my own fork of the repo and will see if there’s anything I can contribute.  You can read more about it on Mark’s Blog.

In the afternoon I chose Gary Short’s “End-to-End Javascript“.  I’m afraid that I’m one of those developers who shies away from the front-end and anything related to it.  As such, I’m quite perturbed by Javascript and it’s craziness and felt this talk would hopefully give me a kick up the backside to get it all figured out.  Sadly, it did not.  Instead, I felt inundated and lost track rather quickly.  It was a tall order – MongoDB as the data store, NodeJS for the middle tier and JQuery on the front end – all to be introduced and linked together in 3 hours.  I didn’t have MongoDB installed and soon got left behind trying to get that downloaded.  NodeJS installed quickly, but I couldn’t do anything without a data store.  By this point  Gary was already talking about JQuery and I gave up trying to catch up.

Day Three

I could not decide between Dan Thomas’ talk on “HTML5” or Dylan Beattie‘s tutorial on “Security and Identity in the .Net World“.  I went with Dylan as I wished to know more about OAuth as we use this for our APIs at 7digital, also with Skillsmatter recording all the talks I could catch up on the HTML5 one.

Dylan’s tutorial was probably the most organised.  He came fully prepared with printed out tutorial worksheets, also available online, which meant that everyone could move at their own pace and not get lost trying to keep up with the presenter’s typing on the projector.  He gave a quick presentation and description as to why it is important to consider identity and that it is probably best not to write your own solution when the built in tools from ASP.Net are so easy to set up – in fact he did just that whilst holding his breath to show how quick it can be done.

A third alternative, is to get someone else to do the identity checks for you, such as Google or Facebook, and use OpenID or OAuth to manage this.  The talk focused on OAuth 2.0 which seems far easier to grasp and more featured than the OAuth 1.0 we are using at 7digital.

After lunch I decided to attend Ashic Mahtab’s tutorial on “Messaging – It’s not just about Large Scale Integration“.  I had missed Ian Cooper’s talk on “Messaging 101“, plus the description included things such as dependency injection and aspect orientation – it promised to be a fun talk.  Unfortunately, it was impossible to keep up with Ashic as he typed away on the projector and many others also got lost along the way.

Coding makes us smile! (photo from @AnaisatSM)

He dived straight into coding with generics and actions, which can take a few moments to decipher if you’re not sure what the intent is.  It seemed as though he wanted to show the steps you would go through to grow a codebase which would implement dependency injection and aspect orientation from the ground up – therefore not needing any other frameworks.  He really seemed to really know what he was talking about, but it was presented in a hardcore lecture style at a very fast pace.  I got so lost that I decided to bail after the break and hang out in the breakout area getting to know the enemy guys at Huddle.

Thank you

It was a great conference, with great presenters, great talks and great attendees.  I have a lot to think about and play with now.  I also want to thank Skillsmatter for being great hosts (the food was wonderful!) and for recording the sessions I missed and making them available online.