Improving business by emulating nature…

I guess it is true what they say “there is no substitute for experience.” Years of working in different environments, different industries and with different teams expose you to a varied number of situations, but also to a long list of very similar ones.

Sometimes one can find joining an entirely different industry a bit unnerving since we are seemingly facing the unknown. And yet when one starts to grasp the ins and outs of the company, the people and the industry things become a lot less scary and a lot more “business as usual”.

From a technical person’s perspective, I can certainly say that all industries I’ve worked in are faced by very similar challenges. However not all of them employ similar solutions. I have my own theory as to why this is, and I thought I’d lay it out here for people to comment on and discuss.

There are many nuances around the reasons why a technology solution is adopted over another, and so it’s unwise to assert that every industry should apply the same solution given the same challenge. We all have our baggage: legacy, staff skills, lack of training, budget restrictions and many more.

We all have our baggage...

Ultimately it is the people within a business who “choose” the way in which the solution to a challenge is approached. And I use inverted commas in the word “choose” because sometimes it is not so much a choice, but a collection of accidents that steer us toward the mechanism that will hopefully resolve our challenge. Perhaps “accident” is too strong a word, but it certainly feels like that sometimes.

When I’ve asked people in the past why did they choose to implement a solution in a given way, it is very rare that I hear an explanation backed by conviction and pride. They tend to sound more like apologies or excuses as to why it was built that way: “We couldn’t afford to do it the ‘proper way’.” or “our guys only know X or Y technology so we had to do it this way.

This is by no means a post about poking fun at the expense of businesses who describe their solutions in this way. On the contrary, it’s a post about getting people to embrace those limitations as part of their culture, and hopefully in doing so, they can turn what they consider their own shortcomings into opportunities to learn and to grow their organisation.

There are several ways to help in that process, but none of them can be realised until the businesses accepts its weaknesses and uses them to highlight the areas in which it should focus its attention in order to better itself. And it can’t better itself without bettering its staff first. I read a quote the other day (apologies, I can’t recall the source) that said something along the lines “improve your people, improve your business.

Training is one of the best ways to improve your staff

There are quite a few ways to achieve this, many of them to do with training, be it external, internal or on-line. My favourite on-line training resource as a developer has always been Pluralsight, as I am a visual learner and watching videos and seeing others code seems to help me take things in faster than just reading a book. But there are plenty of other alternatives such as Code Academy and others.

One of the most powerful way to learn is to do so from your peers. But if the organisation has a specific set of skills and technologies they work with, wouldn’t learning from your peers just bring you in-line with the rest of the collective mindset? Well, I think there is some truth to this, and in all honesty, learning from your peers works well when the learner is a junior or he/she comes from a different background. However, this tends to benefit the newcomer, and I’m trying to come up with an answer to the “overcoming existing limitations” problem.

Perhaps this sounds pretentious coming from someone who does consulting for a living, but in my humble opinion, sometimes bringing senior people on board with the right technical background but from an entirely different industry can not only be a breath of fresh air, but it can also offer alternative answers to problems that result in much more appropriate solutions. When hiring managers or even recruiters concern themselves excessively with looking for people who would look good on paper because they come from the same industry or even a direct competitor, they could be missing a chance to bring into the organisation a very powerful concept: cross-pollination. Bringing people in from different industries empowers staff to almost magically see their world from an entirely different perspective, sometimes making simpler and more appropriate solutions to their problems become self-evident.

Cross-pollination will improve your staff by exposing them to other world views

So next time you are thinking of hiring new people into your team, try and open your mind and cast a wider net onto the market than just candidates from your own industry and look beyond to people from other industries who might have already been presented with the same challenges than yours but maybe done so for a much longer period of time. You will be bringing in experience and knowledge currently not present in your organisation and you will be promoting the spread of that knowledge across your staff, bettering them and therefore bettering your business. And a better business means higher levels of customer satisfaction, higher customer stickiness and hopefully improved revenues.

So please, go and cross-pollinate, you won’t regret it!

Apache Cordova, TestFlight and Android

I have been recently working on a number of projects that required a combination of a REST API and some form of mobile application to consume the resources managed by the API. I have good experience on developing Android applications, but I have never been interested in getting involved with Apple’s protracted Objective C and its (in my humble opinion) weird idiosyncrasies. 

So, when it came to deliver an iOS application to support one of the projects I’m involved with, I thought long and hard about how to do this. Apache Cordova came into the picture as a clear contender very quickly. I must admit I already had played with PhoneGap, the early incarnation of Cordova, many moons ago and I liked it then.

The concept is simple: write a standalone web application making use of all the goodness of HTML5, CSS3 and JavaScript that is amenable to run in a mobile device, and then make use of Cordova’s JavaScript API to provide access to parts of the mobile device that the application wouldn’t have access to if it were to run purely on the device’s browser. This is accomplished by effectively wrapping the web application in a native shell that offers access to the extra functionality via the Cordova JS API.

Several tools have since materialised that make the development, management and wrapping process even simpler, such as Telerik‘s Icenium which I will cover in future posts. 

One of the most powerful features of Cordova, is its ability to be extended by providing plugins. Plugins are small components that allow developers to provide other functionality not supported by Cordova’s core feature-set. This is delivered in the form of a little bit of native code (e.g. Objective C for iOS or Java for Android), a JavaScript API to expose this code, and a simple configuration file to put it all together. There are a large number of plugins already available, and a new effort by Apache is trying to get them all listed under a common repository called Cordova Plugin Registry.

I have been using a fabulous application release service for beta testing called TestFlight (I thoroughly recommend it!). It allows developers to distribute beta versions of their apps to a group of selected testers and easily notify people of updates, as well as capturing feedback from the users and remotely monitoring usage of the developer app’s features. There is a Cordova plugin for available for TestFlight, but unfortunately it is limited to iOS support only… until now, that is!

In the spirit of Open Source, and to celebrate Cordova’s efforts I have worked on an Android version of the TestFlight plugin, so that developers interested in how their users’ experience their hybrid apps running on Android can make use of the wonderful combination that is Cordova and TestFlight.

You can find my implementation of the plugin in GitHub (link below). It is based on Shazron Abdullah’s iOS version of the plugin, so a lot of credit goes to him for getting things started!

https://github.com/drfonz/TestFlightPlugin

Enjoy! And check back soon for more hybrid app development goodness!

Tutorial: Sending email from ASP.Net MVC 3 in Windows Azure – Part II

In Part I of this tutorial we prepared the framework we need in order to build an Azure email sending solution. In this second part of the series, we are going to focus on the Web Role part of the solution, where we build an ASP.Net MVC 3 site which will eventually produce the email content we will later on be sending across to our users in a scalable way using Windows Azure to do the heavy lifting.

Continue reading

Tutorial: Sending email from ASP.Net MVC 3 in Windows Azure – Part I

If like me you have been hooked by ASP.Net MVC 3 you have probably come to a point when you have needed to get your MVC 3 app to send some emails. Things such as account activation emails, password resets or just notifications in general. I have already covered at least two nice Nuget packages that help with the delivery of email from an MVC 3 app which you can find here and here. But what happens when you move to the hotness that is Windows Azure? Continue reading

Windows Azure storage: A cheap way to backup your TFS 2010 off-site

I’ve been toying with the idea of having some sort of home-made backup for my personal Team Foundation Server 2010 setup for a while. My instance of TFS2010 is actually on a Virtual Host on some hosting company which I shall not name here as I don’t want to provide them with any undue publicity…

Anyway, as I have been in deep exploration mode of Windows Azure and all that it offers, it occurred to me that Windows Azure Storage is actually a very cost-effective way to store valuable data somewhere far away from its source, so that it is inherently secure from site failure/disaster. And so in order to protect my source code, I needed to put all these things together on an experiment that would not take too much of my time, and yet would give me all I needed (for now) to keep my code safe, and my sleep a bit less troublesome. Continue reading

The irony is lost on Microsoft

This is not so much a technical post, as just an ironic observation. The latest incarnation of Microsoft “download everything” tool, the wonderful Web Platform Installer 3.0 tries to do a bit of advertising whilst it’s downloading and installing its wares. Unfortunately it doesn’t have the intelligence of Google’s offerings when targeting advertising, as you can see in the screenshot below. Whilst downloading Microsoft’s latest version of their Windows Azure SDK, their most wonderful service offering to date, they also decided to try and sell me “old fashioned” hosting space for any ASP.Net web pages I might be putting together… mmm, I know you have to be a cloud-savvy person to appreciate the irony, but it is funny for all 3 of us :)

Perhaps next time I’m downloading an update for Office 2011, they might want to sell me some floppy disks to store all those pesky text files…

AL

Fair is fair: ActionMailer.Net revisited

So, after doing a brief comparison and superficially evaluating a few alternatives for allowing my ASP.Net MVC 3 apps to send email as painlessly as possible, I settled for MVCMailer as the right alternative for my needs. So, I went ahead and did a bit of work towards implementing it just to realise that the project needed to take a completely different direction and mail would be implemented through the salesforce.com API as most of it would be CRM notifications to customers anyway. Continue reading