My first Ether and my first DApp

Okay, okay. I “should” have used Ether or Bitcoin a long time ago… but I didn’t need to. My clients were happy to pay me in fiat, I was happy to get paid in fiat, I’m not a crypto investor or a trader, I never used any dark onion-based eCommerce websites when I was growing up and I’d never come across a DApp that I wanted to use, so I didn’t have any cryptocurrency of any kind.

Until now.

The November Ethereum London Meetup

I want to go to the event and see what these guys have to say… but I’ve been on the waitlist for about 2 weeks, and I really want to go, so when I saw that there is a way to join a “priority waitlist” run on a blockchain-based system called BlockParty I decided to go for it.

BlockParty – No Block, No Party – my first DApp!

BlockParty is a blockchain based application – in this case a DApp – created by Makoto Inoue to try to create a way to ensure that people who sign up to attend an event actually go. Anyone who’s organised an event before knows what it’s like, you never get 100% turn out – whenever I have run events in the past I’ve always counted on people dropping out at the last minute, so I can see there’s a real benefit here.

The BlockParty app works like this, you pay a small fee as a deposit, if you don’t turn up you lose your deposit, but if you do turn up, you get back your deposit, and you also get an equal percentage share of all the non-attendees deposits. Essentially its a way for event organisers to improve attendance, and for attendees to get a little reward for doing what they said they would.

So I decided to sign up and give it a go.

The user guide made it all look easy – I needed a way to pay my deposit and I needed some ETH, to pay with.

First, install a Chrome extension

BlockParty doesn’t have a eCommerce button, so I needed an app that could serve as my online wallet to use the DApp. The user guide suggested some options, there were two options to download some code and install some apps, but not being confident with my programming skills (on account of my really not actually having any) I was pleased to see there was also an option to simply download a Chrome extension called Metamask:

Metamask allows people to use pay to use Ethereum based applications through your Chrome browser. I guess if the new value economy takes off and we all end up using tokens to use our favourite apps as a fact of daily life, then something like Metamask is going to be pretty useful.

Second, get some Ether

But how much Ether? I checked, and the deposit required was 0.05 ETH, which works out at about $18 worth. Not insignificant, but not too much, especially if I’d be getting back in 24 hours time.

So I need some Ether… but where to get it. I needed to buy Ether using the GBP I already have. I checked an email conversation I’d recently had with a new blockchain developer (who’s also a cryptotrader) where I remembered he’d named the ones he thought were reputable and easy to use. First I tried Coinbase, but Coinbase doesn’t work in the UK – its website told me so:

Now I don’t what SEPA is, and the debit card in my wallet is an old fashioned plastic thing with faded numbers and a half-rubbed-off copy of my signature on the back. No 3D gizmos there. Knowing that crypto and national borders don’t often mix, I decided to go elsewhere.

So then I tried Kraken, but that was no good, I could login, but I couldn’t for the life of me work out how to move fiat money in and out of the account. Then I tried Bitfinex, which is really a crypto trading platform but it does have a wallet function, but again I couldn’t work out how to use the wallet feature. Then I gave up and called Cryptotrader and asked for his advice on why this was so difficult.

We had a nice catch up and he offered to lend me the Ether! Without a better option, I said “Yes please!”. But I still needed a wallet. Crytpotrader was very patient with a now very frustrated Martin, and after giving up on trying to provide user support to Bitfinex, he suggested Exodus. Exodus must be the most simple wallet there is, you download a separate application and without even logging-in, you have a wallet and an address that people can send you money to! It seems a little too easy to be true, but it does work.

One download and an address exchange later, and he had lent me 0.055 ETH – enough to make my deposit and cover any transactions! And I made a new friend in the process! What a nice guy 🙂

Insufficient Balance For Transaction

Sure enough, the transfer fees were way higher than we expected and my 0.054 ETH just wasn’t going to cut it. The transfer fee was going to be 0.02 ETH, which is equivalent to $6.55! I couldn’t believe it! I messaged Cryptotrader, and he agreed that was quite high, normally he would have anticipated a transaction fee closer to 0.005 ETH, but he also pointed out that with cryptocurrency exchanges the cost of transfering money from accounts (transaction fees) are fixed, so in this case it might be $6.55 to transfer $16.37, but it would also cost $6.55 to transfer a million USD, so its not too bad. Still…

Coinbase works

I didn’t want to take up any more of Cryptotrader’s time, so I decided I’d have to work this one out myself.

I needed to use my bank account to buy Ether. Metamask only takes money from Coinbase and ShapeShift, and ShapeShift won’t take fiat, and Coinbase doesn’t work in the UK.

I tried Coinbase again. I like Coinbase. It turns out that Coinbase runs quite happily in the UK, it’s website even says so. I realise that my bank account already is a “3D secure enabled” account – that’s just a funny way of saying it needs 2 step verification via text message to your phone.

A security heavy-weight account set-up, a login and couple of clicks later and I had bought a small pot of Ether – “beer tokens” that can’t be used to buy beer with. Coinbase is user-friendly, it’s got a nice dashboard for buying and sell cryptocurrencies with, a nice easy to use wallet and I was happy. I loaded up my Metamask with more Ether and was ready to go.

 

Finally, sign up to the event on BlockParty

Signing up to the “priority waiting list” on BlockParty was pretty straight forwards from this point onwards. The website is pretty simple, Metamask worked a treat, and I have a twitter account which they ask for so I can be found if there are any problems.

I paid my deposit and after a short delay my name was added to the list.

Tomorrow night I’ll find out if system actually works in practice – and write a follow up post!

Advertisements

The Best Blockchain Analogy Ever!

I’ve always loved a good analogy as a way of explaining a technical concept to a non-familiar audience, here’s my blockchain analogy… possibly the best blockchain analogy you’ll ever hear:

You know how in a playground football game each player knows what the score is at any one time and you can’t change the score without convincing everyone playing that there’s a very good reason for doing so? Well in a very similar way, each node in a blockchain-based peer to peer network has an identical copy of the network’s ledger of events, and that ledger is immutable.

So both playground football and blockchain achieve a situation where you have multiple participants who have an agreed upon historical record of events and that record cannot be tampered with.

 

Byzantine Fault Tolerance

Byzantine Fault Tolerance is something you want to acheieve if you want to address the concerns raised in a type of game theory called the “Byzantine Generals Problem”. Which sounds really complicated but its actually just a way of getting a group of independent actors (who don’t naturally trust each other) to reach agreement on events that occur within the group (and in what order), despite their trustless relationship and in a way that is resilient to attempts to undermine that agreement. Attempts to undermine agreement might be things like actors in the group trying to alter the historical record for their own benefit or actors leaving the group. It is particularly useful for example, if the actors are people whose only point of connection is the internet and want to trade with each other without having to involve a centralised authority.

Blockchain is currently the most popular and widely implemented example of Byzantine Fault Tolerance in practice.

 

A More Technical Description

 So using more technical terms blockchain can be described as a method for achieving immutable, decentralized and synchronised consensus in a peer-to-peer network via a distributed ledger.

 

Comparing a Non-Technical with a Technical Description

Blockchain is a software solution for reaching agreement within a leaderless group of peers that events have occurred, as they occur and that of these each events is recorded in an indisputable historical list which each peer has a copy of.

vs

Blockchain is a software solution (protocol) for reaching agreement (consensus) within a leaderless (decentralized) group of peers (peer to peer), that events have occurred, as they occur (synchronised) and that of these each events is recorded in an indisputable (immutable) historical list (ledger) which each peer has a copy of (distributed).

 

Back To Playground Football

In a playground football game there is no referee (that would be a centralised authority) and yet the game is played successfully because it’s a group of kids playing a game where everyone knows the rules, and they play by those rules because otherwise they’re not “playing football”. When a kid fouls in some way a decision is quickly made amongst the kids as to whether to act upon the foul, or simply let the game continue by passive consent (consensus is constantly achieved). The “ledger part” is the current score that all the kids are keeping in their heads, and every kid doesn’t actually need to see each goal being scored as long as they all agree what the current score is.

The ledger is immutable because a single kid cannot change the score without convincing a majority that his view of events is the right one.., the analogy does get a little stretched at this point but in my experience kids are real sticklers for the rules, and it’s pretty hard for one kid erroneously convince everyone that they scored when they actually didn’t. The kids also get the advantage that players can leave and the score remains the same, and as many new kids can join the game as the current players allow as long as they too accept the current score.

And it’s in that way, that all those games of footie in the playground were actually examples of a peer to peer network achieving immutable, synchronized and decentralized consensus via a distributed ledger!!

 

And that’s a good way of understanding how blockchain does what it does at a high level.

 

What about a chain of blocks? What about Merkle Trees?

“How” blockchain does what it does, involves chaining together blocks of data to form that ledger, but explaining how blockchain works is the not purpose of this analogy.

 

What about “smart contracts”?

Although smart contracts and blockchain often go hand in hand, a system doesn’t need to have smart contracts to be a blockchain. Smart contracts are a way of defining the set of rules as the basis that each blockchain will operate on and introducing outside data (often pulled in by an “Oracle”) into the blockchain. Smart contracts are one way of getting your blockchain to incorporate and act upon certain GPS data feeds, live financial trading data feeds, the latest weather feeds etc etc.

 

What about Bitcoin?

Blockchain is not Bitcoin and Bitcoin is not Blockchain. Bitcoin is one implementation of Blockchain plus a few extra rules and incentives thrown in to make it a cryptocurrency.

What The Chinese Government Knows About Bitcoin That Jamie Dimon Doesn’t

Or how the Cryptocurrency market came of age in September 2017.

POPPING THE BUBBLE
On Monday 4th September the Chinese Government announced that it would officially ban all Bitcoin trading and that from then on any more companies attempting to raise money through an ICO would be breaking the law and that all the money that had been raised must be paid back. Rather than fall foul of the law, domestic Chinese investors were quick to get out of the market (publically at least) and the price of Bitcoin began its most dramatic fall yet.

From Monday 4 September to Friday 15 September, Bitcoin lost $1,600 in value, falling 35% from $4,550 to $2,950. If you take into account its all-time high of $4,900 on Friday 1st, the drop in value was even greater at $2,000 a Bitcoin, a 40% drop in value.

Because Bitcoin still dominates the cyrptocurrency market, the total cyrptocurrency Market Cap also experienced a massive drop, losing 34% of its value from 4 September to 15 September.

Dramatic events indeed.

 

DIMON DINOSAUR ROARS

As you can see from the graph, the price of Bitcoin had sky-rocketed up 300% since January, so it’s easy to understand where the panic has come from. The prognosticators of doom and the “Tulip Bulb” brigade were quick to follow up on the plunge, seeing it as a vindication that Bitcoin was nothing more than a dangerous market bubble. High profile industry figures with decades of experience watching all kinds of market activity then joined in the attack, with JP Morgan’s CEO Jamie Dimon declaring that Bitcoin was “stupid” and that it would “blow up” (Wednesday 13 September).

But since it’s trough on Friday 15 September, the market has quickly recovered, regaining 50% of that loss to $4,000 today (Tuesday 19 September). No matter whether you see Bitcoin as fools’ gold or a new market here to stay, what happens to the market next is going to be interesting.

THE LONGER VIEW

Let’s look at where Bitcoin, and the total cryptocurrency market, has come from. Since 2013 the price of Bitcoin has risen from $135 to $4,000 a share today.

But it hasn’t been one smooth logarithmic rise, in fact apart from a dramatic peak at the end of 2013, the previous 3 years have been active, but fairly steady, only moving $970 to $960 from January 2014 to December 2016. During which there were roller coaster price spikes and sustained periods of price stability (Bitcoin stubbornly remained at the $240 mark for Q2 and 3 of 2015) but nothing that compares to what has happened since January.

Since January this year the price of Bitcoin has risen by 300%, from $936.66 per coin to $4001.36 today.

And the total cyrptocurrency Market Cap has gone from $17.86bn to $138.01 today, a 700% increase.

Which begins to explain where all the attention has come from. The Bitcoin market, and cryptocurrency in general, has gone from curiosity to major force on the world stage. Prompting a summer of tales where middle Americans bought swimming pools and exotic holidays on the back of their part-time Bitcoin hustles, and the US and Chinese Governments weighed in with vociferous intentions to try to regulate this market.

WHAT JAMIE DIMON DOESN’T KNOW BUT THE CHINESE GOVERNMENT DOES

 

WHAT HAS ACTUALLY HAPPENED?

Well, just like a share in the stock exchange, a Bitcoin represents two things, it’s a representative of a tangible asset (in this case a unique cryptographic Hash which can only be generated by “mining” a pre-set number of server calculations) and it’s one unit of a financial class that’s value will go up and down according to demand.

And in the same way that companies would traditionally raise investment capital on the stock exchange through an Initial Public Offering, today companies can also raise investment capital by creating their own cryptocurrency, mining a pre-set number of coins (or tokens) and attempting to sell them in one go during an Initial Coin Offering. So the cryptocurrency market operates according to a very similar set of parameters as a traditional asset class in the financial markets.

Some of these companies, like Bitcoin and Litecoin, are designed purely to be a digital currency to be traded across the internet without regard for national borders. But an increasing number today are using the ICO, not as a way to turbo-charge the starting value of their currency, but instead as a mechanism to raise investment capital for Blockchain related software solutions, the best example of which is Ethereum. And it is this sector of the market which represents the “Blockchain revolution”, these companies are the ones that are spearheading the paradigm shift that Blockchain technology will initiate which so many technology pundits have been talking about.

If you look at how both the number of ICOs, and the level of ICO investment, has sky-rocketed since January 2017, it’s clear to me that this year’s activity in the cryptocurrency market is very far from a “bubble” and instead there are many signs that this market has come of age.

Total Number of ICOs:

2014 7
2015 7
2016 43
2017 120

Total ICO Investment:

Another sign of health in the market is how alongside the increase in total investment, investor numbers and variety of cryptocurrencies; the market share has also begun to significantly diversify.

This year Bitcoin has gone from dominating the market with a continuous 80-90% market share, to a 50% market share, sitting alongside Ethereum (20%) and Bitcoin Cash and Ripple (5% each). This new diversity in market share is a sign that the market is in rude health.

The peak Bitcoin price of $5,000 may well turn out to have been a bubble in the short-term and despite its recent recovery, the price might not return to the $5,000 value for months but pragmatic financial stakeholders like the US and Chinese Governments, recognise that with a value of $138 billion, cryptocurrency is now a major element of the global economy.

And grey-haired technologists know why.

ENTER THE S-CURVE

For decades it’s been understood that each new technology evolves along the lines of an S-curve trajectory.

The first stage features very little growth as the founding concepts and tools are established, technology adoption then enters a rapid period of adoption in a transitionary “improvement period” and finally levels out when performance reaches its physical limit. Despite our iconoclastic age, this “S-Curve Of Technological Progress” has largely repeated itself, just look at the way televisions, mobile phones, and Artificial Intelligence have each begun their existence with fragile beginnings and limited adoption, gone through a period of mass adoption and the matured after nearing peak market volume.

The growth of cryptocurrency and its precocious child, the ICO, is going to follow the same S-curve. And if we look at all the market indicators, we can see that despite its $138 billion value today, cryptocurrency is neither in an infancy stage, nor has it reached its potential capacity. For as long as the risk/reward ratio continues as it is, investor demand will continue to rise and there are many more potential investors who have yet to enter the market. Government regulation ultimately indicates a sense of legitimacy. Cryptocurrency has only just entered the middle “improvement” phase:

Entering the murky world of dragons, fairies and economic forecasting, I have drawn my own S-Curve onto the cryptocurrency total market cap to see what it might look. My graph shows the cryptocurrency market reaching maturity at a total market cap of $300bn in January 2019.

But whenever the cryptocurrency market reaches maturity, it has not reached it yet. National Governments will not put the requisite time and effort required to “kill” off the sector, attempts to regulate a supra-national peer-to-peer network is currently too complicated a problem to effectively institute and in the post-2008 heavily regulated financial markets, investors are keen to find an investment vehicle with bigger rewards.

The rise of cryptocurrency has only just begun.

A Rough Guide to the Greek University System

Throughout my career I have had the pleasure of working with a quite a few Greek computer scientists and I have to say that I have found their skill level to be very good overall. I find a fairly higher than average ratio of female to male Greek developers, and I also find a lot of developers have gone on to study further and achieved PhDs. So it was in this vein that I decided it was time to look into what the explanation of this could be.

Greek Universities

Sunshine, Ionic columns and a high academic bar characterise the best Greek institutes for Computer Science.

Only the higher academic achievers study Computer Science

After completing the equivalent of A-levels (the Apolytyrion), Greek students who wish to attend university then take the “Panhellenic National Exam”, a national test that covers a broad variety of 6-7 subjects (making it much closer in variety subjects tested to a Baccalaureate than the more subject-specialist British A-level system). Each student is then nationally ranked and the students with the best scores get to choose what subject they want to study, at which Higher Education institute, naturally choosing the most demanding courses at the most prestigious places, and vice versa, the lowest performing students get the least choice of subjects to study, at the least prestigious HE institutes. In effect this makes highly demanding subjects like medicine and engineering (including Computer Science) at the very best universities the hardest to be admitted to.

Which means that in Greece not just anyone can choose to study computer science at University, and only the very brightest get to attend the very best institutes.

 

The Top Greek Universities for Computer Science are not “Universities”…

These are the top 3 Greek universities for computer science:

  1. National Technical University of Athens (aka EMP)
  2. Aristotle University of Thessaloniki
  3. Technical University of Crete

However none of them are strictly speaking “Universities”, the “National Technical University of Athens” is a polytechnic, as is the “Technical University of Crete”, and the “Aristotle University of Thessaloniki” has two parts to it, its Engineering Faculty which is a Polytechnic and the traditional “university” part teaches everything else. This is because in Greece Computer Science is often taught by an Engineering Faculty, and Engineering is almost exclusive taught by polytechnics, not by universities.

In general the Polytechnics give a more rounded, more practical level of Computer Science education and so, as with Poland and France, in Greece it’s regarded that Polytechnics Are Better Than Universities. As you can see from the three top universities above, somewhat unhelpfully its quite hard to actually tell from the institute’s name if its a polytechnic or a university.

Within these universities, different institutes have reputations for different things. So for instance the University at Crete has a long established reputation for being one of the top Universities in Greece but today it is considered that Computer Science is very well taught there. It has a lot of new equipment and seems to have attracted a younger set of professors who are more likely to have worked or taught abroad to teach the course. Athens EMP on the other hand is considered to have a more traditional approach to teaching its course, and an older set of professors.

Honourable mentions also include the University of Patras and the University of Ioannina for their computer science departments, and it’s also worth pointing out that there are many universities in the city of Athens, and as a whole they have a generally good academic reputation, although the National Technical University of Athens (aka EMP) is considered the best for Computer Science.

athena

Athens, named after the Greek Goddess of Wisdom (and War) has many good universities to attend.

Only Public Universities Are Recognised

In Greece although private Universities exist, they are not strictly permitted and the education you receive from them is not supposed to be recognised (for instance you would struggle to get a job as a civil servant with a degree from a private university). Only public universities are recognised, and these are considered the best. There are no tuition fees to attend university, although students must still pay for their cost of living, becoming a potential factor when considering Post-Graduate exams.

 

 

How do you know if it’s a good degree?

So apart from the name of subject that was studied and the name and type of institution it was studied at, there are 2 main ways to tell if someone has excelled at their degree.

One is the length of time they have studied. It takes a minimum of 4 years to complete a university degree and 5 years to complete a polytechnic degree, which is equivalent to a Masters, or MEng. As with private universities before, the Greek Government does not recognise 3 year degrees. However, students are allowed to retake exams if they don’t get the grade they were hoping for. Meaning that in general any degree achieved in under 6 years is considered to be very good. When students take longer than 6 years to complete a degree in Computer Science you can start asking questions as to just how many times each exam had to be retaken until the desired grade was achieved.

The other key factor is the final grade. Greek students graduate with a percentage mark out of 100, in a weighting that is pretty similar to the UK system. Any mark above 80% is exceptional, a grade above 70% is very good, and 60% is still good being treated in a similar way to a 2:1 is in the UK. The professors in Greece joke that no-body except God gets a 100% mark, and that 90% is for the professors only!

 

What’s covered in the Computer Science curriculum?

Greek students will tend to begin a course in computing or informatics or applied informatics, and will then specialise their studies in to areas like programming and software engineering in the second year. Because the first year covers quite a broad computing curriculum many Greek developers will have a basic foundation in areas like networking, infrastructure, electronic engineering, etc.

It’s very common for students to have completed some kind of academically related extra-curricular activity alongside their degree, such as contributing to post-graduate research or a complimentary programming project which will often be published in an academic journal.

Alongside main stream subjects, graduating in computer science will also involve studying mathematics to quite a deep level. There seem to be mixed feelings about this, some people say it doesn’t do any harm, whilst others believe the depth of mathematical competency that must be achieved in order to graduate is too much. Any for students who want to specialise in areas like networking, it is simply irrelevant.

Top 5 Things To Get Ready For Your Job Search: NUMBER ONE, Work Out What You Want To Do

Whether you’ve got a job right now and you’re looking to take your next career move, or whether you’re beginning your search from a standing start, here are my top 5 things that are going to help you get ready to begin your search.

Getting ready

This is aimed at software engineers looking for a permanent position (PAYE), most of the things I’m talking about will be applicable to day-rate contractors, but not 100%:

NUMBER ONE: Work Out What You Want To Do

As anyone who’s recently finished looking for a new job will tell you, it doesn’t take many conversations to work out that you actually need to have a really good understanding of what you want to do next before you start to talking to anyone.

The key point here is that for the hiring managers the interview process is all about risk. Working out which candidates are going to be worth interviewing from their CVs is an obvious example (which candidates looks like they’re least likely to be a waste of time interviewing). But for the hiring manager it isn’t just the time spent on the initial search for the right candidate, what’s also at stake is the huge amount of time that stands to be wasted if the candidate they hire never really wanted the job in the first place. If the successful candidate goes on to leave after the first couple of months, then that’s potentially hundreds of hours of time wasted, involving training, mentoring, showing them around the company, including them in future plans, wasting the hiring manager’s time, their colleague’s time, their team’s time, their boss’s time…, reputational damage, their judgement and competency questioned, a huge amount of budget potentially wasted, IP at risk, etc, etc, etc.

Which means that during an interview when you’re asked “what kind of job are you looking for” or “what are the main things you want to get from your next job”, you’re going to want to have worked this out already. Because the man who walks into an orange fruit shop and starts talking about other fruit they’ve had in the past that they liked, and “that they really don’t mind what kind of fruit they buy because they’re just hungry”, or even that “actually their most favourite kind of fruit they ever had was an apple, but as they’re here now they’re happy to consider oranges”, isn’t going to go down as well as the man who confidently tells the shop keeper “I’m an orange-kind of guy. I like oranges and I’m here to buy oranges.”

So, going into the job market armed with nothing more than a bunch of vague ideas about what you kind of job you’d like to have is not going to help you.

Operational Hypothesis vs Re-iterating

Have a good think about it, talk it over with someone else, and then be comfortable with the idea that you’re probably going to refine your idea of what you’re looking for after you’ve started your search, but time spent working it out before you begin will be time well spent.

Some Food For Thought:

To help get the brain juices flowing, here are some ideas. You could say a Software Engineer can go in 1 of 3 general directions with their career:

  1. Team Management
  2. Sales and Product
  3. Architecture / Technical SME.

Here is a simple list of the main factors that Software Engineers’ tell me they’re looking for:

  • How much time you want to spend hands-on coding? Do you just want to code, or do you want to be paid for other things as well (design, architecture, requirements gathering, scrum mastering, stakeholder facing, client facing, deployment, support, testing, code reviews, people management, project management, etc)?
  • What size of company do you want to work for? A big corporate? A mid-tier company? A start-up? A small company?
  • Would you discount a company that had lots of problems, or would you see that as an appealing factor?
  • Does it matter if the team is all located in the same office or is spread around the world?
  • Are you looking for technical authority?
  • Is formal training and investment important to you?
  • Is any the “package” element of the job important to you (pension contributions, medical insurance, nice office, flexible working hours, working from home, lots of colleagues etc)
  • What kind of office locations you want to commute to / are you prepared to get to?
  • Is a new (“greenfield”) application important to you?
  • Is working with the latest and greatest tools and technologies important to you?
  • Do you have some kind of preference for the people you work with (senior to you so you can learn from them, same age as you so can easily get along, etc)?
  • What kind of industry/industries do you want to work in? Does it matter to you?
  • Is it important that the application you work on is something you find exciting or high profile?
  • Do you want to work for a well-known company?

Why are Algorithms such a popular test for a developer’s skills?

In my experience, although there are lots of different ways of assessing a developer’s technical ability (from verbal technical interviews, to logical and numerical tests to the dreaded “paper and pen” exercises) most technical interviews fall into broadly one of two schools of thought: either ask them to complete an exercise which requires solving a real-life business problem, or ask them to solve written-for-purpose puzzles by writing algorithms.

 

THE EXERCISE-BASED CAMP

The exercise-based camp always made sense to me, apart from the common trap that the hiring manager who writes the exercise basically writing a test that says “can you guess how I think” and then marking the result on how close they got to their own solution, it’s a clear indicator of what a programmer’s development skills might be on the job. Does it solve the challenge? Did they complete their solution? Does they solution make sense? Is it elegantly written in the development language of choice? Is it extendable / documented / follows TDD / etc etc? Naturally coding in the time sensitive, pressured environment of an interview doesn’t suit everyone, but it is unarguably a rock solid example of what the candidate can actually do.

 

THE ALGORITHM-BASED CAMP

And for years the algorithm test camp has puzzled me. Algorithms are often written in the main language that the job requires skills in (write your algorithm in Java if it’s a Java developer role), but sometimes answers can be written in pseudo-code and that’s just as acceptable – which seems counter-intuitive. Often when my candidates fail the algorithm writing part of the interview and are “no’ed”, they tell me that they were asked to write a kind of sorting algorithm that they hadn’t looked at since their university days (typical example is a Bubble Sort) and their mind goes blank. Which seems unfair.

bubble sort

A better gauge of your coding skills than anything you write in an IDE.

 

And I can’t help but wonder how easy it is to game algorithm-based technical tests. Many developers who are actively looking for a new position know they’ll come up against algorithmic challenges to complete during the interview process and I wonder to what extent you can simply train yourself to become “good” at solving the most commonly ask kinds of question. I know for a fact that I’ve seen some very good developers dismissed for developer jobs they were good fits for, completely out of hand after failing a algorithm test. And I’ve then seen the same developer go on to successfully complete algorithm based challenges and get job offers after having practised solving challenges at home. I personally recommend codility.com as a great preparation tool to the developers I work with.

 

It’s also very rare that writing algorithms from scratch will be a part of s developer position’s day job, so my candidates are being tested on a skills they don’t need to have to be able to do the job they’re going for.

 

So with so many pitfalls, I began to ask my candidates and hiring managers why algorithms are so highly valued as an interview tool.

 

ALGORITHMS ARE A RELIABLE TEST

The first thing I learnt is that it the ability to write an algorithm is considered one of the few reliable tests of how good a developer is (despite concerns about “gaming”). The field of study to be a competent Java developer (or C# developer or [insert chosen language here] developer etc) is so deep its hard to actually come up with a reliable, catch-all test that doesn’t take hours and hours, in the absence of a better model, algorithms are a tried, tested and trusted way of assessing how good someone’s core development skills are. When asked about “gaming” algorithm writing tests, I’m told that most tests these days can be gamed, and that its up to the hiring manager to keep the exercises fresh. Which doesn’t sound like an unreasonable requirement!

merge_sort.png

Ahhh, the old “merge-sort two step”

ALGORITHMS ARE TIMELESS

New algorithmic challenges can be written, but the principles by which they are solved still rely on the same set of fundamental skills, its just the style of implementation that changes (hence the willingness of some hiring managers to accept answers written in pseudo-code). On the basis that development languages change over time, and dexterity with the latest tool or framework will probably soon be made redundant, a test of someone’s ability to solve an algorithmic-based challenge is kind of timeless.

 

EACH ALGORITHM IS A MINI-PROGRAM

Each algorithm-based challenge is good all round mini-test requiring the candidate to demonstrate the core concepts of software development:

  • Problem solving
  • Structuring the solution
  • Refactoring it
  • Testing it
  • Proving it
  • Optimising it if necessary

They’re all key skills required to be able to “code”.

 

AN ALGORITHM CAN BE WRITTEN COMPARATIVELY QUICKLY

Its common for developers to be set 1 algorithmic puzzle per 15 minutes, with taking up to 30 minutes to complete not being considered an automatic rejection.

 

So there you have it, for as long as a more reliable, less time-intensive form of testing a candidate’s development skills is unforthcoming, the algorithm-based technical test will continue to form a common stage of a developer’s interview.

 

What is an aPaaS? Or “How not to make a (P)aaS out of you and me”!

Even though all year I’ve been talking to more and more technologists in London who have been designing or building aPaaS systems, including quite a few of my clients who have been building aPaaS’s too, there still seem to be a lot of people out there who haven’t quite mastered the difference between the three ways Cloud Services are provided (IaaS, PaaS and SaaS) never mind understanding what an aPaaS does.

What follows is the unAuthoritative Explanation:  

The Holy Trinity of the Cloud: IaaS, PaaS and SaaS

IaaS vs PaaS vs SaaS 1

It’s probably fair to say that most software today consists of the following nine layers:

  1. Application
  2. Data
  3. Runtime
  4. Middleware
  5. Operating System
  6. Virtualization
  7. Servers
  8. Storage
  9. Networking, all of which can be provided by Cloud Services.

Cloud = CapEx vs OpEx

Cloud is way of providing you with the power you need to run software, and because it’s pay-per-use, Cloud provisioning allows companies to reduce the traditional upfront Capital Expenditure of buying hardware, licenses, support contracts etc. usually required to provide a software service, in favour for an OpEx-based model, where you only pay when you actually use the service (in the same way that the modern household pays for electricity today).

With Cloud provisioning, companies now have a choice, at the one end of spectrum you have “desktop”, or “packaged software” where you must own and maintain each of those nine layers. This gives you total control of the development implementation of the Software but you also have to provide  the computing power for it to run on, making everything CapEx. At the other end of the spectrum you have SaaS, where everything is provided for you, so you have zero control of the way the Software is implemented and it’s all a question of OpEx.

Infrastructure As A Service (IaaS), Platform As A Service (PaaS) and Software As A Service (SaaS) are the main ways that Cloud Services can be accessed, depending upon what percentage of the above list you want to be provided by the Cloud, and what the you are prepared to provide by yourself:

IaaS vs PaaS vs SaaS

What is an IaaS?

In essence with an IaaS, your traditional tin-and-wire Infrastructure components of Servers, Storage and Networking (external) are provided as a maintained service by your Cloud provider, and you must provide the “programmed” part of your software service. The IaaS allows you to build (or install), run and maintain whatever software you want on whatever operating software system you want.

Whether you want to Build your own software or Buy someone else’s software (install), it doesn’t matter. You get lots and lots of control over how your IT Service is going to work, and you have responsibility for everything from its architectural design to how it goes from being a load of written code, to a live piece of software (how it is deployed to the Cloud Infrastructure). You don’t need to employ server admins, but you do need to employ people to manage that deployment (called DevOps Engineers).

What is a PaaS?

With a PaaS, your Cloud provider provides you with a platform that you can build or install and then deploy your software onto (which you maintain). So you worry about what applications you want to provide, how you want them to work, whether you want to buy or build them yourself, you have to define the application and data architecture, how they will be deployed to the Cloud infrastructure etc etc.

In this model you get lots of control over the parts of your IT Service that will be the most customised – the part of your service that makes it “your software”. So at this point an insurance comparison web application could still be run on the same PAAS that provides your local swimming pool’s website. It might be rare, but as long as they both have the same Runtime, Middleware and Operating System requirements, it would be perfectly possible.

What is a SaaS?

With a SaaS you are buying a fully built, fully deployed, fully maintained IT service that will provide a specific service and nothing else. A professional Gmail account or Salesforce is a great example of a SaaS. It’s your data that you enter into the system, and you can normally customise the interface to some extent but nothing else is your responsibility, and because you don’t own any of the underlying software, you have zero control over what services it provides and they are how it run.

So what is an aPaaS?

This is where it gets exciting.

With a PaaS, you have to define, build and implement the way the code you have written is deployed onto the Cloud Infrastructure but your Runtime environment, any required middleware and the Operating System are all provided and maintained for you.

But some people / some companies “just want to code” and don’t want to have to worry about anything beyond the design and development of their application, and some companies want to be able to choose not to have to worry about it. They like the idea of being able to deploy their software at the click of a button and pay for someone else to do the rest.

Which is where the aPaaS comes in; it stands for Application Platform As A Service and it’s a cloud service that provides everything a PaaS does, but it also provides the deployment environment too:

  1. PaaS: development and deployment is your responsibility
  2. aPaaS: only development is your responsibility

Note that an aPaaS is really only relevant if at least some of the IT Service you want to use or provide involves building the software yourself.

Just how exciting is an aPaaS?

As it turns out, very. An aPaaS is perfect for a start-up that has an idea that they want to develop and deploy and get feedback from their target audience really quickly, or perhaps they don’t already have the deployment expertise and can’t afford the cost of employing a separate DevOps Engineer to manage the deployment, or it might even be the case that although they can afford that extra pair of hands, if given the choice they’d rather use the money to employ another developer who can design and develop more revenue generating software IP.

But its not just small companies that are interested in the aPaaS concept, or companies that would choose not take the responsibility for deployment. It’s big companies too.

Quite a few of my clients that currently provide their service in a SaaS model, are building aPaaS platforms to supplement their existing suite of services.

Bob’s Online Provincial Marketplace Software

Say your company currently provides an online Provincial Marketplace software service to its clients through a SaaS model. Its clients can choose to pay to use their Online Grocery Stall service, their Online Butchers service, their Fishmonger service etc, and your platform is flexible enough that your customers can either pay to use all of services you provide, or they can simply pay for each service separately. Now imagine one of your clients wants a service you don’t provide, say a Stationary stall; at the moment they would either have to build and support one themselves, or buy another companies’ software service, which might be one of your rivals. This might be a pain for your client for any number of reasons, and no-one likes the idea of their clients being driven into the hands of a rival company that has a more comprehensive set of services than they do.

If you can turn the deployment environment that you’ve already built for your own internal development teams to use into a service that external customers can access, then you might be able provide an aPaaS option as part of your suite of software services. In our example this would give your clients the option to build their own Stationary Stall service onto your own Marketplace platform, so keeping more of their business, saving them the time and effort it would have required to find a provider and keeping them happy. You might then even find your Provincial Marketplace software ended up being used by customers who had no interest in your traditional set of food-based Stall services, and instead were using no more than the aPaaS service you provide to deploy a whole set of product options you never imagined your software would be used for!

So the aPaaS model allows traditional SaaS providers the ability to offer their clients the option to either Buy software, Build their own software or “Buy and Build”. It has the potential to massively enhance the potential revenue your software service can generate!