Software Craftsmanship

It has always been a passion of mine that the skills of software engineering are passed down in the same manner that the skills from any industry are passed from person to person, retaining the skills that experience has taught us what works and what does not. Software engineering is no exception and done well an experienced software engineer can teach those under his wing the skills to be better engineers, the practices that an engineer may read about in books or on Stack Overflow but with real world application.

When I first joined HAVAS LYNX I could see very clearly that from across its business its culture was dedicated to this practice, the CEO started as an office junior and many of its employees have started in junior positions and worked up through the company.  Even now with dedicated training, support and mentorship in the form of LYNX Academy the investment in every member of staff to grow and learn is a very part of what it means work at Lynx.

Within HAVAS HEALTH SOFTWARE we have long made an investment in software engineers, from industry placement students up to technical architects I am proud of the growth of my team and the commitment to keep the learning going to the next generation.  At every level we follow two simple rules:

  • We always have something to learn.
  • We are willing to teach others.

Following these rules means that one-on-one or in groups we are both teaching and learning the skills of software engineering and never assume we know everything. I have been in this industry 20 years and every day I learn something new, be it from a technical architect to a placement, I encourage folks to share, discuss and explore.

The ultimate quantified self device

This years CES showed that the breath and scope of wearable quantified self devices is now getting quite big. The titans of the market in Jawbone and Fitbit have plenty of others in their market but no one has yet fully captured that market. This post are my own thoughts on what I think would make an ultimate quantified self device.

Make it easy

Devices that require you to move the device between your person when tracking waking movement or sleeping and/or changing between waking and sleeping modes can become a time consuming exercise. Over time doing this becomes a chore and gaps appear in the persons data, in some cases folks will stop using the device all together.

If the device is wrist based, a watch or similar device then you will need to never take it off. If the device can be trained to your sleep pattern, for example learning what time you normally go bed (at first you would need to tell it) and what your movement pattern is during that time the device would know when you asleep and awake.

Focus on activity and not sport

The sport market is a big market for the quantified self market but represents only a small sector of the available market. A quantified self device should focus on activity and let you teach it what that activity is, doing the housework, walking the dog, doing the shopping etc. A lot of activity involves different movements beyond just steps, movements in different limbs for example and by showing how active a person is during the day can encourage them to remain/be-more active.

Water proof

Not all current quantified self devices are waterproof, let along splash proof and if a device has to be removed for some activities then it will become a chore. By making it water proof you will never need to take it off, be that in the shower or the swimming pool.

Look good enough to be worn by anyone

Most quantified self bands are modelled after sports bands, they look great on the sporty types but on everyone else they stand out a mile. The bands should look good enough to worn by anyone, all day long, be that in the office, at home and everything in between.

Use collected data for a purpose

Letting a person see how I am doing against other people can de-motivate them if they have fallen behind for what ever reason. Quantified self devices should focus just on you and you alone. However the data that device collects could be useful in helping the device adjust to you, the range of movements that others have created for particular activities can help the device gauge a persons activity.

2013 and looking towards 2014

This is my first and last post of 2013, my blogging really has took a back seat this last year although I wrote two articles for the Havas Lynx blog, one on Alan Turing and one more recently on the drive of my team. I hope to write more posts in 2014, although I will keep this blog more reserved to my own thoughts on technology and anything that interests me.

I won’t blog about MbUnit. That chapter in my life has closed,  I am keeping the posts around for those that find them useful but I won’t add anything new.

2013 for me has been a hard, challenging year. My team have worked very hard and I am very, very proud of what they have achieved in the last 12 months. The dedication and commitment of my team has been a humbling experience for me, they are all hardcore technology enthusiasts and we have really explored and implemented some great tech, from Durandal to Node, from WebAPI to Xamarin iOS. We have also explored databases a lot, from Riak to MongoDB and we have evolved into database polyglots (next year we will push this further and blur the lines between NoSQL and RDBS).

Our work takes us into heathcare systems and direct into the hospitals that our systems serve and I have really explored and learned a lot about healthcare informatics this year.  We are a member of the HL7 organisation and this year was great to learn more from the HL7 organisation and share some of my own experiences at Health 2.0 Manchester. I have forgotten how much I enjoy speaking and sharing with audiences I really hope to do more in 2014.

This year was the first year I attended a conference that was not a software conference, with visits to Health 2.0 Europe and Pharma Creates. I hugely enjoyed both conferences and look forward to doing more and learning more at both next year.

I am hoping to write more next year, not just blogging and twitter but journals and more print media. I am also thinking about writing a book again, not sure it will happen in 2014, 2015 or 2016 and I am unsure of a subject so all those things combined makes it unlikely but I am keen to write another.

So looking into what I think will happen in 2014 here are my thoughts.

Machine Learning is fast becoming the biggest frontier in the IT industry, with Google, Facebook and Microsoft all hiring major talents in the field  (and consuming companies in the field at the same rate).  Everyone is also looking to deploy that talent to address different needs but it will be the first to a mass consumer reach that will have the greatest success. The biggest to watch will be IBM, very quietly they been selling off a lot of their other business and building up Watson to have a much greater reach in the cloud. I think 2014 will be about the application of machine learning in the cloud and IBM have the march.

Continuing this theme I also think that 2014 will see more main stream use of machine learning, I think R has it’s place but it the rapid climb of languages such as Python and Clojure that will see mainstream adoption of machine learning. The rise of Python in the space makes sense given it the academic use of the language in teaching and I think 2014 will see Python rise in popularity again as we start to see more articles and books (indeed a lot of machine learning books already use it) on machine learning grow for the masses.

I worry for the CLR and Microsoft’s plans. IMHO C# is already too general purpose and recent news indicates Microsoft will continue to develop GP languages. I just don’t see any community languages for the CLR and the JVM continues to pace ahead, the academic use of the JVM for compiler courses is really helping and some of the most popular languages in recent years (Scala, Clojure etc) have all been written on the JVM. I don’t hold out any hope that in 2014 Microsoft are going to change and language developments will more than likely be JVM based (with Go also developing).

NoSQL databases have see some interesting developments over 2013, I have been paying particular attention to FoundationDB (as an ACID distributed NoSQL DB) and RethinkDB (as a new kid of the block and one to watch). That’s not to say my love affair with Riak has changed (we never made it to the Basho customer list but were early adopters in healthcare). I am looking forward to Riak 2.0 and the SOLR integration (a very powerful match).  The use of Riak in the NHS Spine 2 project is great to see and I really hope to see it more and use it more in healthcare.  Basho are working to improve the distributed consistency in Riak and FoundationDB ACID approach are paving the way for improved support in NoSQL databases into next year. Another area I think will improve will be querying, I still miss the expressive, focused nature of SQL (it has it’s place but I dislike MapReduce for simple queries).  Our approach is fast becoming to combine NoSQL with the talents of a RDMS, I do think that in 2014 that the lines will blur for those vendors that are brave enough to try, FoundationDB will be one to watch in 2014.

In the healthcare technology space I do think that FHIR (Fire) is going to gain traction in 2014, it is being developed in a very different way to the previous HL7 standards and as a modern REST based API could get the adoption it needs simply by having a greater reach and use beyond a EPR system.  We are watching it closely and giving serious consideration in the systems we build.

A little more generally and an area I am interested in is the field of wearable devices and the ‘internet of things’ in the healthcare space. I think that Nike, Fitbit and Jawbone will face some interesting challenges in 2014 and I think Apple will have some say in this, with a dedicated processor and patients for the apple ear buds to measure blood pressure and more recently using the light to measure heart rate the IPhone could yet truly serve as a doctor in your pocket.  Nike, Fitbit an Jawbone will also have challenges from other new comers in the field,  Mio can for example measure heart rate (with no need for a chest band) and one to watch in 2014 will be AIRO with technology that is reported to measure calories by measuring your blood (via light emitted into the skin under the device). It is early days but if effective and within an affordable price these devices could render the others inaccurate, a challenge they will have to meet.  Another challenge for the quantified self movement is the aggregation and display of the data the devices collect (life logging), I have seen some really interesting approaches such as Tictrac but I still think that the interfaces need to simplify and improve.

I am looking forward to 2014 and the continued growth of Havas Health Software, as David Hunt, Havas Lynx CEO wrote it has been very much a start-up model this year.  I have enjoyed it and the new challenges that 2014 will bring, my team is expanding and if you are looking for a new challenge then please look us up.

Happy new year.

MbUnit 101: Attributes

Following on from my last post in the MbUnit 101 series I’ll cover MbUnit’s attributes. MbUnit has the basic Test attribute.

The additional meta allows for filtering and ordering in a test runner (for example Echo or Icarus).  We can also control how MbUnit treats what it tests.

MbUnit also has exception control in the attribute model. Taking the following class.

We can do the following.

Note that MbUnit also offers exception support in the Assert model as noted in the Assert.Throws.  Finally MbUnit has support for threaded runs over tests.

These examples and more can be found on github.

MbUnit 101: Assert.That

First in a series on MbUnit features and I’ll start with Asserts.

MbUnit supports the style of Asserts that you find in NUnit and others as well other styles. For example Assert.That supports NHamcrest syntax, for example.

You can also chain HHamcrest expressions.

MbUnit also supports Linq expressions in AssertEx.That, for example.

Gallio plugin for the VS2011 Test Window

The Gallio team has been hard at work on creating a plugin for the VS2011 test window and I am pleased to announce we have an initial release up on Github. The plugin has been developed to work with the most recent public release of VS2011, as and when Microsoft release new versions of the IDE we will update the plugin.

Please note that as of writing we have a known bug with multiple assemblies.  The plugin will ignore NUnit and XUnit tests by default (even if they enabled in the Gallio control panel).

NCrunch and MbUnit

The latest release of NCrunch now features support for MbUnit, XUnit and MSTest (adding to the existing support for NUnit and MSpec). Further more the MbUnit and XUnit support is powered by Gallio.

The support for this started with a conversation between me and Remco Mulder (the author of NCrunch) at SC2011 back in May and continued over email as Remco integrated NCrunch and Gallio.   This was a challenging integration and Remco worked hard to overcome many of the challenges, as a result he is also contributing code back to the Gallio code base.

It is great to see NCrunch join the family of third party tools that now support MbUnit.

ThoughtWorks Mini Technical Conference 2011

Today I attended a one day technical conference that ThoughtWorks hosted at their Manchester, UK office. With an attendance of around 70 and two streams the sessions were nice and focused with plenty of questions and discussions (most sessions ended up running over).

The two sessions that stood out the most to me was the Agile Architect session with Erik Doernenburg and Scala at GU with Graham Tackley  I did however learn a lot from all the sessions and it was a lot of fun to talk programming languages (mostly CLisp weirdly) with other attendees.

There is talk of them hosting another and it would be great to see loads of folks from the Manchester area feature. It would also be loads of fun to see Neal Ford and Dan North, maybe even Martin Fowler.

Software Craftsmanship 2011

Just one of those things that I change blog location and then take a 5 month break from blogging (I do use twitter a lot though). After the break I do want get my blogging back on track and while I was down at Bletchly Park last week for the Software Craftsmanship 2011 conference I really want to get my thoughts down.

This was my first visit to the home of the code breakers and I really hope that you all get to visit, it is an inspiring place with a rich vein of history in our industry.  An ideal place for a conference on software with a focus on how we as software engineers can be better at what we do.

The sessions were in the large part hands on with pairing up to work on software problems,  this as a learning tool is invaluable and what struck me the most was the depth of attendees. I paired up on several occasions with Java programmers, with me working in C# and between us we forgot the daft language arguments and focused on solving the problems following good software engineering principles (SOLID, DRY re-factoring etc). One tool I was introduced to at the conference was NCrunch and used it across all my sessions, I cannot recommend it enough for TDD and will be a tool to watch.

The last session of the day was titled ‘Medical codes of conduct in Software’ and it stuck in my mind the most in that it talked about how the medical profession has codes of conduct and how that could be applied to software teams. It created a lot of discussion with the attendees and I like the idea of software teams drafting up their own internal codes of conduct both internal to the team and across the business.