Which is the next hot technology for full stack developers?

I am trying to compile a list of technology stacks that full stack developers are using and could in the future become part of a recognised approach like LAMP. Please tweet me your suggestions...

  • React / Go / Mongo : MGR 
  • React / Node / Mongo: RNM
  • Angular / Ruby / Mongo : MRA
  • Ruby / Rails / Postgres : RRP
How about layout technologies? The main runners seem to be:

  • Foundation
  • Bootstrap
Then there is view / control systems like:
  • Backbone
  • Angular
  • Ember


Ansible Destination Not Writable

This is a quick blog post FYI in case you are searching for error messages like:

msg: Destination /etc/mysql/my.cnf not writable

This may be caused by the need to set the sudo flag in any roles/your_role/vars/main.yml files as it seems that they default to sudo : no if you define a main.yml for your vars. While creating the main.yml file for all of the vars your role defines seems to be best practice it isn't intuitive that you need to redefine that this role should use sudo.


sudo : yes

Thanks to Patrick Kuti for his tip in this ansible discussion for the solution.

Note too that vars in a role overrides inventory variables. If you want to document the defined variables use roles/role/defaults/main.yml instead.



The Three Stages of Software Design Evolution

I have had a number of conversations lately with different people on the subject of assessing job candidate competency. This is a really hard thing to do in an interview. One of the main reasons is that the stress of the interview can seriously detract from the candidate performance.

A colleague asked me how I would assess the levels of competency for a developer and after some thought I came up with a few distinctive levels:

JFDI: Hack, Ship, Hope

Now we are talking here about the 'design' element of the process. You can hack code in a well designed component or a poorly designed one. The choices you make on your first attempt will determine whether when you need to change the code whether you can iteratively change it or it has to be replaced.

Startup developer teams often end up building components that are thrown away. This is usually because they didn't fully understand the requirements. This is kind of a special case. Startups are supposed to solve problems for which the answer is not known aren't they? (Well supposedly).

At this level code review may not pick up on the design decisions being made (or lack of design) during individual diffs. 

Ask a Friend

In reality most software developers have discovered Google search by the time they graduate. The even more socially adept may have also discovered the joy of getting help on Quora and StackOverflow. The tricky thing is that once you are in an professional role you often can't reveal too much about what you are working on.

There are a few different activities to look for:
  • Searching the internal repos for a working solution (yes code can be re-used).
  • Internal forum activity.
  • Engaging a more experienced engineer. We all need coffee breaks.
  • Finding the coding standard for your team and seeing what the normal design pattern usage is.

Defining Norms

Once a developer has started to get feedback on designs there is a natural tendency to share the decision. This may be as part of a show and tell or a wider presentation. These sorts of activity will drastically improve the efficiency of not only the developer solving the problem but the reset of the team by sparking ideas and understanding.

The nirvana of defining 'the way we work' is upon us. One of the most debilitating challenges facing any developer sitting at their keyboard:
The past, like the future, is indefinite and exists only as a spectrum of possibilities. - Stephen Hawking
There can at times simply be too many possible ways to solve a problem. Design patterns can help but they some times contradict each other. In order to be able to 'get things done' some times the best thing can be to have a standard way which means you can get started then discover along the way the problems you still don't know about. This idea works well with the concept of tracer code.

Defining Exceptions

Clearly the goal of defining a norm like how should a problem be solved should include the counter cases. If the goal of defining ways of working the challenge here is to understand where a library, tool or process doesn't apply.

How many times have you seen hadoop map reduce used to solve problems exactly matching the documented counter cases? 

Some framework take this "when you have a hammer everything looks like a nail" philosophy to the limit. 

In a startup context you can also find that you come full circle and use the wrong tool simply because you have to get something done. The reversibility design pattern is your friend. Apply liberally. 


Sales University

In a previous post I mentioned the sales training from Rod Sloane which I attended at Google campus. My goal was to brush up on my sales skills to support a few projects I am working on at the moment.

In addition to finding some seminars and networking groups I also built myself a reading list of some of the top rated sales books available on Kindle. For each one I downloaded the sample and bought it if I was convinced it was worth a read. I will update the list as I get through them.

Coffees for closers

A really useful read for those who haven't, like me, had any formal sales training. It gives you a lot of tools and examples to help you think about what you could have done differently in retrospect.

Predictable Revenue

I really like how this book outlines a number of funnel steps and helps you to focus on tracking conversion rates so that you can predict sales volumes. The idea is that if you know the conversion rate of all of the steps in your sales funnel then you can estimate team size required for your sales target. I ended up using the sales funnel stages that are defined in this book to create the opportunity states in my CRM. Great stuff

To Be Read (Not all directly sales)

- The DIY manual of copy writing that really packs a punch
- Delivered: the no nonsense guide to email marketing
- 79 network marketing tips for fast track success
- Sell them the pen
- The little fish guide to marketing
- Bootstrap marketing: 101 tips for marketing on a budget

Other Events


Web Summit 2015 with Upgrade Digital

In November this year I was lucky enough to be able to attend Web Summit to promote Upgrade Digital 

The web summit venue is truly vast. Our stand, which we only had for one of the three days was near the main stage so we had fantastic footfall but very little engagement sadly.

Web summit has become famous due to Uber raising so much funding during a chat in the pub but it has perhaps gotten too large.

The first night summit was very popular and there were a lot of great conversations but what became apparent was that there were a very large number of startup companies attending.

If you go to Dublin I strongly recommend going for a whisky tasting session at the temple bar. The bar staff are very knowledgeable and extremely friendly.

Oh, and there are some great places for live music too, whether you are looking for traditional folk or more rock covers.


SSL Test Certificate Bleed

Many of the people I have worked with will know of my distaste for self signed SSL certificates in test environments. Once you have built a tool to generate and distribute these 'cruft' flakes they invariably spread. The worst case scenario is if these certs end up in your production environment. The real question to ask is will developers take the path of least resistance and skip SSL validation.

I have always advocated using genuine certificates for all build environments. This approach is usually resisted with the vigor of a grad dev defending his favourite language. I don't know why. With a little planning it is easy to use a subdomain, with implementation costs typically in the double digits per year. Usually the argument has more to do with resistance to fixing something that 'works'.

The recent news of symantec accidentally releasing test certificate is a really good counter case. This is one test environment that really should use a self signed cert. The Web needs security and the certificate issuance companies could be the weakest link.


The SIMPLE Guide to Startup Sales from Rod Sloane @campuslondon

Today I was at @campuslondon and just happened to attend an event on sales for startups. The event was held by Rod Sloane. Rod is also offering webinars in November about how to create effective marketing email messaging.

Rod's technique suggests following some steps based on a SIMPLE acronym.
  • Speak: take opportunities to present and speak at events. It will help boost your confidence and leads.
  • Idea: Articulate your idea in terms of what your prospective customer wants, not necessarily what they need.
  • Marketing: Effective marketing should be driving leads which are aligned with your sales strategy.
  • Predictable Revenue: Buy it, read, apply, rinse and repeat.
  • Listen: Take a course on listening, it is the top skill for sales, when you are cold calling and someone says "if I had £10k to spend I wouldn't spend it on you" ask what they would spend it on.
  • Email: Use linked in and tools like SalesLoft t build a list which you use to send personalised emails. If you are sending a lot of emails check out yet another mail merge

* Send emails to SME CEO on Sunday between 5 and 7 pm.
* Start with a simple message, shorter is better like "are you looking for a new website".
* Always follow up on the dates you suggest. Insightly can help.
* It can take 27 approaches to buy a product. Think about sending 8 emails with different content targeting issues and challenges.
* One way to open a sales call is to say "This is a sales call" to see if they want to hang up.
* If in doubt use the one page marketing plan template.


Shopping Trip to Durham

For the last few weekends I have been visiting Durham to do a bit of shopping. It has been a long time since I spent much time in the city other than just passing through. A few things have really changed and I am glad to say that the city seems to have really developed.

In case you don't know, Durham has some beautiful scenery, castles, cathedrals and a lot of fun little cobbled streets, an ancient market and the almost legendary stoicism of the locals trotting around in practically no clothes on a freezing cold winter night.

Lads and lasses of the north, I salute your ability to endure any weather in a T-shirt.


Refactoring Bookable Resource API

One of the key principles of the design of many of the different API platforms I have built recently was to separate the model exposed to users from what is stored. I have and continue to be a huge fan of using Protobuf to model the internal messages consumed in systems. Using POJO classes and Jackson Json serialisation provides a great choice for the seialisation too.

Irrespective of the tech used separating these two layers has been a mandatory feature of systems I have built for a while. The key thing is creating flexibility of representation while also having a stable storage model.

As part of a redesign of the external API for Upgrade I reviewed the features of the model. I had a shopping list of features I wanted to add. As many times before I started refactoring the representation while rerunning the tests to ensure I didn't break the representation published for the API. I started noticing a few patterns of code that needed cleaning up. These models are after all the oldest code in that project.

Over time the project had been refactored a number of times and this layer of the code had become more encapsulated. The up shot of this is that new abstractions introduced in other places had not been applied in these old objects. The changes all had the same basic pattern:

"Don't mix layers of abstraction"

When the project first started many of the messy features had been cleaned up. While awesome tools like IntelliJ will find some common refactoring this was a more subtle layering refactoring.

To try and avoid this again I came up with a new rule for these kinds of classes where if I find myself writing helpers, statics etc. I will add a TODO to review later. This sort of problem can often occur earlier in a project especially when the general structure and repeted functions haven't been identified yet.

Remember to watch out for the mixed layers of abstraction as a clue. Happy coding.


Heading Back to the UK After Four Months

After four months away with occasional trips back I am heading home to the UK tomorrow. In this stint I have been away for over 50 days. I didn't really plan to be away for so long and it has presented some problems like I had to upgrade my travel insurance as it stopped at 45 days.

Due to the fever I had over the last week or so I haven't had the opportunity to do many of the things I needed to before heading back like arranging somewhere to live. Small point I know :-)

The thing about breaking a leg that you don't realise at first is that you are going to have to rely on others for practically everything. The main challenge is shopping which presents a real problems when on crutches. In the UK there are food delivery companies but depending how / where they deposit the food it could take hours to put it all away.


When I said I was in need of a break I didn't mean a bone!

Unfortunately a couple of days into my second week in Mauritius I broke my right leg kite surfing. I had said in my previous post that I was "much in need of a break": was this the god of grammar getting back at me or something?!

The problem was that as you can kind of see the bones weren't really lined up so I needed surgery. I realise that for many people surgery is just another hobby, especially if you are seeking the costly help of 'plastic' surgeons.

For me the experience was that I was alone in a fairly stressful hospital situation (we aren't talking about the UK here) and some fairly questionable bed side manners.

"Don't worry, you aren't leaving anyone behind so it doesn't matter if something happens" - says the nurse....
"It matters to me!" I say back.
 Unfortunately the surgery took longer than expected and the effects of the (insert name of drug related to morphine) were quite severe. I am still not sure if I hallucinated waking up with no underwear. I asked the nurses later but no-one had any idea what I was talking about. I also picked up some good bruises it seems, again no idea why and no information to explain it.

Other things I still don't know include how much the operation cost as I was anaesthetised before the surgeon arrived; I assume my insurance company knows :-/ I am always concerned about the way these kinds of companies write blank cheques as I have had a number of bad experiences with insurance companies trying to recover loses in the past.

The extreme beauty of Mauritius and the kind nature of the locals go a long way to making you feel better but this is still a pain; just about two thirds of my stay I was about to spend on crutches but it was about to get a little worse!

 Post operation I had four days in hospital being prodded in what I assume were the normal ways. The private hospitals here are allegedly far better than the public ones and certainly mine had a sea view and beach front balcony!

As a western visitor it is easy to appreciate the huge difference in experience, with a minimum wage of around $0.50USD per hour it is easy to see why. I heard many stories from nurses in the hospital of their, often very different experience of accidents. The same theme kept coming up, families would take people out of hospital as soon as they were allowed to in many cases. Healthcare is expensive and seems to be charged by the hour.

After leaving the hospital I had a very high fever, I think caused by a stomach bug. After 9 days on a mix of Oroken, Voltarene and Rabezol I just couldn't take normal food. My fever went over 38,5'C and I nearly went back to hospital. I decided on the great advice of a friend to move to a spa resort where at the very least I could get room service and basic food that would hopefully not bother my stomach so much.

The staff at the Hilton Mauritius were really some of the best I have ever stayed with, I would like to say a special thanks to Shyma for keeping an eye on me! It was money very well spent indeed and I was soon feeling nearly normal again. Normal that is for someone with a broken leg and the associated issues.

With two days to go I am now really looking forward to being back in the UK. I can't think of anywhere else in the world I would rather call home.

The usual question I am asked is 'how long will it take to heal' and the best guess I have heard so far is 12 week if the bone sets correctly, during which time I can't put any weight on the foot. After that there is more surgery to remove the hardware, then another 4-6 weeks for the bone to heal from all of the 5 holes in my fibia and tibia which will need to heal in order to strengthen the bone before I can carry out basic tasks like walking again. I'm guessing that 20 weeks means a lot of physiotherapy but I have no idea how much is offered on the NHS.

My final check up went well and I had the staples removed, 25 of them in the end! Removing the staples seemed to cause a bit of bleeding but that was all, there wasn't much pain at all thankfully.


After a Week in Maruitius

After a week in Mauritius I have still only managed to see about half of the island and haven't made a dint in my to-do list. I wanted to share a few photos from the last few days.

This is the view from the bench I often seem to sit on in the evening and ponder life.

 The sunsets here are something else. Many people head to the beach and watch it; the local beach gets particularly busy on a Sunday.

The national forest is one of the Mauritius represents the last relatively untouched habitat.

How good are your eyes? Can you see the little guy?

I'm guessing that these are termite mounds?

When the wind drops the kite surfing spots take on a totally different feeling.

This is my new favourite food: boulle which is a soup with various balls of what I assume are fish and meat. Bottom line is that it tastes great!

There has been quite a lot going on over the last few days; watch this space.


Mauritius Day 6: Much In Need Of a Break

Over the last few days I have earned a few bruises and some aches to boot so decided that today I would take it easy. I spent most of the day snorkelling on my local beach where I saw far too many types of fish (and one that looked like a coral snake) to mention. The highlights were an anemone of about 20CM diameter, a needle fish at least 50CM long and what ever it was that resembled a snake!

As well as being on holiday I am also here to try and ponder a few things; one of which is some business strategy; I broke out a business model canvas on the beach. Not sure it worked, pictures in the sand are OK but it would need to be a lot bigger for my terrible writing to be legible. On the plus side, the local coconuts are very sweet, much better for you than a double espresso I will bet too...

As I wasn't doing much I took the time to plan things to do while I am here:
  • Canyoning down the tamarind falls (7 waterfalls, largest 40M!).
  • Day sailing trip on an old ship from Mallorca (lots of snorkelling).
  • Speed boat tour around the east coast (including some bays, caves and other such stuff).
  • Hiking up the highest mountain on the island, around 850 metres.
  • My first surfing lesson.
  • Exploring the markets of Port Lois.
  • Hiking the black river park trail.
  • Snorkelling at blue bay.
  • Get my IKO level 1 kite surfing certificate.
Today though I have discovered a very real limit to travelling alone: I have sunburn resembling angels wings on my back because there are a few places I couldn't reach with sun lotion. Full marks to Garnier for their Ambre Solaire 30+ which completely prevented me getting sun burned in the areas I can reach :-/ Perhaps the new generation of solo travellers need a suncream swap to go with the selfie stick...


Mauritius: Day 5 - Kite Lesson #3 and Snorkelling

Today the wind was much better than forecast, reaching over 20knots and giving me more than enough power to get myself into trouble on today's lesson. Yesterday I spent the day breathing water and went home feeling like I hadn't progressed. I thought and thought about what I was doing wrong, what my instructor had said and how today I wanted to actually 'surf' the damned board. 

As well as great wind today there was a lot of rain, as there are a lot of Jamaican influences here, I thought that people would have heard of the phrase 'liquid sunshine' but apparently not! You heard it here first...

Feeling great about getting up on the board I drove home early today to snorkel and was treated to the sun coming out and I just had to stop and take a picture of one of the mountains here, I am planning to walk up it at some point. It is the highest point in the island and forms part of the caldera called Piton De La Petite Riviere.

On the beach I decided to snorkel as it is supposed to be one of the best spots on the island I was really happy to see I still had the light. These photos are actually from after my swim at around 6PM. There really is something about this place...

On a somewhat related note; while driving around here I couldn't help compare the island to Fuertaventura which has suffered serious issues with it's climate. The basic problem is deforestation. A challenge for Mauritius too. Here the depletion of the mangrove swamps to make way for holiday resorts has lead to a reduction in coral and an increase in soil erosion into the sea.


Estimating API / Web Traffic Load

One of the challenges facing anyone trying to capacity plan  is how to estimate immediate concurrent  load on the system. This is more important in a way than the average number of requests per second over a day, it is the maximum concurrent work being carried out at the same time. This information lets you plan peak memory and CPU in a way that means your service can remain responsive according to your needs.

I wanted to share some insight into the very bursty nature of the traffic I see on the upgrade.digital API by way of an example which may surprise you:

Let's assume you have been told your site will receive 200K hits per day (let's just assume a single request here for argument sake). Sounds OK right? Even the slowest web server would be able to handle ~140 requests per minute right? Nope...

In the real world of e-commerce all of your traffic comes in the peak 8 hours of the day ramping up, typically as the day goes on, looking at it this way you are going to be seeing about 400 requests per minute. Starting to sound a bit more interesting right?

Beyond that we get to the true 'peak' concurrent minute where we are seeing around 2000 requests. This gives us some indication of how far we need to scale out and also gives a nice ratio:

Given a daily traffic estimate of T per day, the average per minute traffic over 24 hours would be X, assume typical load is 3X and assume peak minute load is 15X.

Now lets assume that your traffic arrives uniformly inside that second and is dispatched without hitting any kind of queueing limit, for simplicity let's say you are seeing a peak of 1800 requests per minute, that is 30 Queries Per Second (QPS). For our systems, most requests resolve in around 100 - 500 milliseconds, one arrives every 33 milliseconds and three more arrive before it completes, giving us around 4-15 concurrent requests depending on the traffic class.

The fun starts when you get good enough at your tracking to notice when you stop getting linear scaling in your current architecture. Typically you are looking for a breakdown in requests / throughput where your assumptions about request time start to break down. Monitoring AWS ELB response time against requests is a good way to understand this load factor.


Mauritius Day 4: Adding Surfing to Flying a Kite

Having pretty much gotten over the jet lag (and exhaustion) I woke a little earlier today so that I could go for a swim. I am going to call it a brisk swim because although the air temperature is pleasant, the water in the pool was rather chilly! Apparently cold showers are good for you so 10 lengths in a cold pool should be great right?...

On the up side, there was the view when heading one way:

After my clearly insane idea to follow in the footsteps of currently trendy young entrepreneurs (and a few other people I guess) to do the 'cold' thing it was time to head to the beach (though I may have headed past more than one of the fine beaches on coast which is "330 km long and nearly everywhere you can find the nice sandy beaches"

The forecast wind for today wasn't supposed to be good but it was better than yesterday, on top of that I had a bump in kite size from 7M to 9M. I can hardly describe the varied and colourful ways I found to fly through the air and submarine to the point of flooding my lungs. While yesterday I was feeling like a (if bruised and beaten) hero for my aggressive kite control; today I was feeling quite the opposite as I failed to find the balance between flying and surfing.

After a little over an hour of a combination of flying and drowning I was let off the hook when my co-pupil managed to said half way out to see and our instructor 'Alba' had to go and help him find his way back.

Legs and arms feeling like lead again I headed north to find somewhere to relax and enjoy the rain! Wow did I find a nice spot, The Bay hotel has a really nice veranda where they have a very nice bar and restaurant with very nice staff to boot!

Time for a much needed early night!


Mauritius Day 3: Kite Surfing Refresher

Today I had my first kite surfing lesson here in Mauritius, the goal was to review everything I know and get a bit of confidence and practice before the next step (technically covered three steps, basic kite control, body dragging and one handed 'superman' body drag up wind).

Before I went out I decided to try and learn a new song, one that I have always loved but hadn't thought to learn it: Is This Love: Bob Marley which the band played on Saturday night. It is relatively simple but not totally sure that that the Saxophone is the best instrument to play it on...

On my way I was 'lucky' enough to experience one of the many cultural differences here in Mauritius: a couple of, like guys, like, putting up a new power line. Yup, you do see cars parked right beside the cable hanging over the road. Cars are basically Farraday cages so what ever!

You might be able to see that the team attaching the new cable were just hoisting it up between two poles over the road. While I am sure it wasn't live, I was surprised that the locals were driving under the new cable while it was still being hoisted up!

On the up side, major electrical works here require a fraction of the time an engineering team would take in the UK. Did you hear how long Kings Road in London was out due to a single cable burning out?

Arriving at the beach there was a decent amount of wind, what makes for good sun bathing weather usually doesn't make for good wind sports so those clouds were more than welcome!

The instructor I had today was only working with me as it is off season, that is him jumping on a north 12M kite.

After my lesson I decided to take it easy and headed to the west coast of island where I noticed a different crowd of kite surfers. These guys all used the surf board style board and for a reason. The waves you can see in the distance were a few metres tall breaking on the reef. There were also a good number of windsurfers out enjoying what looked like big waves even for a surfer!

Tomorrow more kite surfing, hopefully this time getting up on the board, after that I think I may need a chiropractor to sort my back out!


Mauritius Day 2: Discovering Kite Surfing Nirvarna and Testing Snorkelling Kit

I learned from Fuerteventura that kite surfing lessons can be hard to book due to demand so I thought I should probably get myself along to sort out some lessons. I was a bit surprised by what I found...

The lagoon was just as big as the map suggests it is with waist high water across a wide region making it perfect to learn and explained the number of kites in the air...

After booking up a week worth of lessons I took a stroll along a nearby beach which is next door to the aptly named resort 'paradise'...

The opportunity was too good to miss so I tried out my snorkelling kit that I bought in Stockholm. One of the locals had said that it was a bad day to snorkel due to the currents and they weren't kidding! I was working hard just to keep my ground but the kit worked like a dream. Every other time I have been snorkelling I have ended up with a nose full of salt water, this time I was able to focus on the fish, though they were few it was a good work out!

As I was there I decided to take in the sunset sitting on the beach on the west shore of Le Morne peninsular:

Le Morne certainly is imposing and with the light of the setting sun seemed to turn a deep red brown colour, the trees in the foreground throw off the perspective, the hill is around 500 metres high and around 500 metres away! I doubt I will be hiking up there!

Seen from further up the bay the profile of Le Morne is quite startk but suggests there may be a way for a scrambler to approach the eastern side: more investigation is needed!