Sunday 24 April 2016

Start Me Up



Many large and successful companies will often look at smaller enterprises with an envious eye.
The flexibility and freedom afforded to them can often lead to the pronouncement that we need to "think like a start-up", but what exactly is the state of mind were trying to instil?
And conversely if you're a start-up what are you trying not to lose as you grow and hopefully become successful?
Risky Business
Start-ups have a healthy attitude to risk, this is not to say they are irresponsible or reckless but that they realise some details will need to be figured out along the way.
When working in technology as a small company time is not always on your side, their just isn't time to come up with a full-proof plan, instead you have to have faith that the core of your idea is sound and you and your team are smart enough to figure the rest out.
In a similar vein you need to be able to recognise when a decision isn't working out and find a new way. 
Whats most important is to anticipate this potential for failure and be prepared to re-think things and have a plan B in the wings.
Open to Innovation
Many start-ups have limited resources or are at least are trying to maximise the return on what they do have.
This often means they are willing to be active participants in the technology community where many cutting edge technologies are available for free in the form of open source projects.
This openness to innovation, coupled with an accepting attitude towards risk, can lead to very impressive things being achieved on limited budgets.
The majority of start-ups realise that they aren't selling secret sauce, they aren't in the business of producing code they're in the business of providing solutions.
Buying a Ticket to the Game
The most successful start-ups realise its better to be in the market place potentially making mistakes then being on the outside looking in with amazing plans for success but no execution.
To do this these start-ups embrace the concept of a Minimum Viable Product (MVP) and the speed of advancement that comes from rapid iteration.
If your start-up is to be successful then the core of your idea needs to be what users want, without bells and whistles, if that doesn't deliver value adding more and more on top wont rescue the situation.
The only way to validate your idea is to have it in the market place being used.
Your healthy attitude to risk means your accepting of the fact their will be some element of failure in your idea but by iterating and introducing more innovation you will progress.
Thinking like a start-up should mean accepting that not everything can be solved in advance
A healthy agile mind set means embracing the fact that this means not everything we ship will hit the mark with users but that its more important that we're heading in the right direction and evolving at pace.    

Sunday 17 April 2016

Becoming a Senior Citizen



When you've spent a certain amount of time working in development whether formally or informally you will eventually be faced with the transition of becoming a senior member of the team.
But what exactly does that mean? What are the qualities that define a lead or senior developer?
Battle Scars 
The most obvious answer to this is experience, but this isn't just about time on the clock, its important that you've experienced failure.
The most beneficial aspect of experience is the painful memory of when you made a mistake in production or introduced a bad defect.
The desire to not repeat this experience will provide an in-built mechanism to detect when the same or similar mistakes are being made by yourself or others. 
The truly enlightened, and therefore lazy developer, will devise a mechanism to automate this oversight.  
Nobody want to screw up but a developer who regales you with a long story of success has either never stretched themselves or is oblivious to the errors or blunders they've introduced and therefore doomed to not improve.
Teaching All The Things
As a senior developer you aren't a one many army. Good developers will often have a natural desire to want to take on more and more work because they can see what should be done and how.
But an important part of a senior role is education, the goal should be for all members of the team to get the support and advice they need to also grow into becoming an experienced, productive and rounded developer.
This balance is not always easy, things still need to get done. But by recognising an opportunity for learning you'll help others progress, an important aspect to this is the elimination of a blame culture.
If mistakes are an important learning tool then when they inevitably happen they should be viewed in this light, this is made harder if a fear exists around taking ownership of a problem.
A senior developer should also be aware that this education is a two way street, good ideas can come from anyone in the team regardless of their time served. 
That'll Probably Do 
To be pragmatic is to be reasonable about the reality your facing and not dealing totally in the theoretical.
Software can very rarely be considered finished, instead it reaches certain stakes in the ground that represent the next release.
The perfectionism that good developers often hold can lead to a stagnation that causes a slow down in us reaching these points.
While quality should never be compromised to satisfy a deadline, an important skill for a senior developer is to recognise when something has reached its first iteration, it may not be perfect but it does what we need and has been constructed in such a way as to allow future iterations. 
Ultimately we do this to provide something to our users and we have to be pragmatic enough to realise when we've reached a stage where we can do this even if perfection is still a way in the distance.
I don't think senior developers are made just because of a change in their job title, they naturally evolve as they experience more and more of the development life cycle.
They are a product of their mistakes, the knowledge they gained in how things should and shouldn't be done and of the education handed down to them from the other team members they've worked with.

Sunday 10 April 2016

Agile Delivery



Agile software development is based on twelve core principles, while all twelve play a role in improving how an organisation produces software two in particular are key to understanding how we should view the world and our place in it.
Customer satisfaction by early and continuous delivery of valuable software
Working software is the principal measure of progress
Taken together, these two statements mean our goal as developers should be the continual delivery of working software.
By following certain principles we can engrain this thinking into us and the organisations we work in.
No Second Guessing
If we are to deliver software continually to users the processes we use must be automated and trusted.
Does it work?
Have we tested it?
Will it work in production?
Questions like those above must be eliminated from our thinking, our build chains must be built to automatically verify the correctness of software as its produced, to automatically create builds for every environment and for the differences between these environments to be minimal and controlled.
While your second guessing whether your ready for production your agile rivals are shipping to their customers.
While no one wants to put something into production that isn't ready or adequate this judgement must be a repeatable, reliable and ultimately fast process.
Looking for a Fight
Its only natural when we start this journey towards automation of all the things that we start by concentrating on the low hanging fruit and avoid the difficult things.
Actually if we want to reach the nirvana of a slick streamlined delivery process we should be doing precisely the opposite, we should concentrate on the most difficult things causing us the most pain.
Necessity is the mother of invention, if we inflict pain on ourselves by continually doing the things which we find hardest we will find a way to automate them.
Developers are very resourceful people but ultimately lazy, they will concentrate their ingenuity on making their lives easier and what makes their life easier will get software out of the door to users quicker.
Quality Above all Things
As you increase the speed at which your shipping software you will become ever more dependent on quality being built in.
Ensuring quality must not require conscious thought it should be an inevitable consequence of the processes you have in place.
Every commit, merge and build must be tested, if all lights are green we are good to proceed, if anything is red then nothing moves until its fixed.
Pragmatism is an important skill for a developer to have but this needs to be related to what features get shipped not to the quality of the code that makes it out into the wild.
Compromising on quality is an acceptance of shipping bugs, the cost of these bugs in production will always be higher than if time were taken to address them before hand, the short term gain in shipping early will ultimately be undone by the addtional time taken to sort out the mess.
Agile delivery is a fine balancing act between speed and maintaining the integrity of the product.
The only answer is automation that concentrates heavily on addressing the sticking points in the process with a serious bias towards testing at every stage to ensure quality is guaranteed.
Going to production should not be an onerous or scary prospect it needs to be a constant option open to us whenever we feel we've achieved something the user can benefit from. 


Sunday 3 April 2016

End of the Gold Rush



When you tell people you develop mobile apps your very often told, often in hushed tones, about a great idea for an app.
Usually these ideas are interesting and are apps you think you would like to use, but are they a route to a gold mine for the inventors, sadly most times they aren't.
A few years ago we were taking part in an app store gold rush, a well designed app with a cool name and a striking look would command large sums of investment.
Those times have now passed, the gold rush is over and monetising mobile is not a straightforward challenge to meet.
No Secret Sauce
Software is increasingly being regarded as a commodity, its simply the raw material coming off the development production line.
While this view is flawed it has meant that the market often places very little value on code, the majority of apps are now free or carry a small nominal fee.
No longer are we purveying secret sauce, consumers aren't paying for the cleverness of your code there subscribing to the service your offering.
Aside from the possible exception of gaming your aren't going to get rich simply by producing an app.
Advertising Failure
When faced with this challenge many turn to advertising, it is the cure to all ills, when were not sure how we extract the value from the product were producing we fall back to the warm comfort of advertising.
Unfortunately what we very often lose sight of is the context in which the adverts are shown. We've all used apps where we are aware of a banner ad at the bottom of the screen but do we actual look at the advert?
Advertising without context degenerates into a pure numbers game, if we show it to enough people we may by pure fluke get someone who is interested in the product or service to look at and maybe even click the advert.
This is not optimum for anyone involved, the users who are forced to lose screen real estate to adverts, the advertiser with an uncertain audience and the developer who can only make money at enormous scale.
But what about if we did have context, if we display helpful suggestions and not adverts, what if we knew who our customers are.
The Devils in the Data
Mobile phones are an integral part of almost everyones lives, we have it with us all the time and we regularly consult it when making decisions or turn to it when we have some time to waste.
All of this means our phones can detect almost everything were doing in our lives, apps that can harness this and use it to both the developers and users advantage will truly be data gold mining.
This data has the potential to lead to enormous value that we could never have realised simply by putting a price on our app. 
I would never want to put anybody off from taking a crack at the app store but people should do this in the knowledge that very few will make their fortune.
Don't go looking for gold in the hills just have fun in creating something that you feel will entertain or enhance and take it from their, you may just have invented the next big thing, time will tell but you'll have enjoyed creating it regardless.