This is a post that has been floating around in my head for a while, caused by many decisions I have seen in the businesses in which I have worked (mostly with regard to software purchases, but the idea can be generalised). I will start with defining the idea of a devil’s advocate and then move on to where I think it has a place in the modern business world. In my view the idea is also closely related to that of the 10th man rule (made famous by World War Z).

Let me start off by saying that I have read many arguments against using MongoDB (or in fact any other NoSQL database), typically from the SQL diehards (and have heard those same people call the users of NoSQL databases inexperienced and / or stupid). Some of the arguments are valid criticisms of the general use NoSQL databases, whereas some of them seem like ad-hominem attacks based purely on a lack of knowledge. I don’t consider myself to be inexperienced as I have been developing software that works in a variety of industries for quite a few years now, using all manner of SQL databases (Paradox / BDE, SQL Server, MySQL and Postgres to name a few) and I am familiar with the benefits of these databases, but I also have my own share of complaints about them. Personally however I feel that those that are completely against NoSQL databases such as MongoDB tend to throw out the baby with the bathwater. While the benefits of ACID transactions are not in doubt, I find that there is a certain beauty in the way MongoDB works, particularly in terms of the schema-less design. When combined with F#, MongoDB allows for extremely rapid iterations. I can’t claim to be familiar enough with MongoDB to run it in a production environment, nor have I run into all of the issues that many of the people who have complained about it mentioned. However, for prototyping MongoDB gives me iteration cycles and feedback loops that are at least an order of magnitude faster than I would have were I to be using a traditional SQL database. This decrease in feedback time has lead to me be able to create a system in about a 10th of the time that it would have taken with a traditional relational database, as well as saved me a good number of grey hairs that tend to come about because of schema versioning issues.

First off, I apologise for posting this later than I said I would. I didn't realise quite how tired I would be after JSInSA. JSInSA has been and gone, and to give conference attendees (as well as those that couldn’t attend) something to refer back to, here is the long version of my Full Stack F# talk, with a step by step code sample. The demo app can be found here.

The JavasScript in South Africa conference (JSInSA 2014) is nearly upon us (Saturday 31 May is the big day), and I will be presenting on Full Stack F# – From the Server to the Browser with Strongly-Typed Functional Programming. Here is the blurb from the conference website:

Background

In the course of my career, I have fortunately been exposed to many different types of environment, and I thought I would share some of my experiences and opinions on those environments as I currently view them. My first job, working with my father, was at a software development company that provided Off-The-Shelf solutions to the food, pharmaceutical and fast moving consumer goods market. The company was an interesting mix of corporate and consultancy as most of the software was the kind of thing that could be pre-packaged and sold, but most of the development work was on the customisation of that software to integrate with the client’s existing ERP and / or financial systems. For me, this was good experience as I learned quite a lot of the craft of software development in an environment that was quite forgiving, but I was also very limited on the technologies I could use.

Who am I?

This is the first time I am attempting blogging, so I figured that it would be a good idea to start out by introducing myself, and explaining the purpose of blogging for me. My name is Kevin Ashton (@AshtonKj). I am a software developer, living and working Johannesburg, South Africa. My primary programming languages are C# and F# (I exclude things like HTML – as I don’t really consider it a programming language, but rather a mark-up language - and JavaScript as I consider these to be almost mandatory these days). I am currently working at an insurance company, developing systems for both internal and external use.