Software Development: Then and Now

Client: I need to develop an application.

Developer: Sure. I can do that.

1997

I can create for you a modern Windows application. I just need to install Visual Basic or Delphi from the CD and I will be up and running in 1 hour. I will deliver the application next month together with a step by step installation kit.

2017

I can create for you a modern Web application. Today is easier than ever. Today we have granularity and choice … not like 20 years ago. I just need to glue together a few prebuild frameworks and technologies.

The client-side is easy. HTML5 and CSS3 together with JavaScript are great for building interactive Web applications.

Although I don’t quite like the JavaScript implementation in the current browsers so I will probably use a transpiler. I can go with Typescript, Babel or even Traceur.

Good! I just improved the language. Now let me take the initiative to improve the CSS3 as well. I heard that LESS, SASS and Compass – a SASS framework are great CSS preprocessors that will save me from coding boring CSS.

Once I have these, I can go ahead and select a CSS framework. Bootstrap, Foundation, Semantic and PureCSS are popular options.

I left selection on the main framework last … but I should definitely go with either Angular, React, Ember or Vue… These are pretty popular.

Well… that pretty much is everything. Although I may still use one or two libraries here and there… perhaps jQuery, MooTools or Underscore and maybe a few other polyfills and shimms to adress browser differences… I need to reseach these.

And to be sure that I will introduce errors, I will setup also a JavaScript linter such as ESLint. Of course, I will not do all this linting manually. I will use a JavaScript task runner. Grunt is an excellent task runner that can also do minification. Maybe I should also check out Gulp and compare it with Grunt.

On a second though I think I should also look into RequireJS and Browserify. They are great module packers, although some people really like WebPack module bundler. These packers will allow me to work decently with a module format like CommonJS or AMD.

For the server side I can choose a popular technology such as ASP.NET, PHP with Symphony or Laravel, Python with Django, Ruby with Rails, node.js with Express, Swift with Kitura or Go with Revel.

You know what: I think I will go with node.js since is JavaScript based like the client-side. I just need to install node.js runtime, NPM package management and Express web framework.

… or maybe I should use Hapi or even better Koa and leverage thouse JavaScript generators.

I can select then a template engine. I’m still not decided if I should select a logic or logicless template engine. I have plenty of options… but I think I will go with Pug/Jade or maybe Handlebars. Mustache and EJS are quite fine as well… Or maybe I should forget about server-side templates and start considering using a template engine on the client-side. Those browsers are quite powerful.

Perhaps I should also investigate a full-stack framework such as Meteor or Derby.

As for deployment I say we should go for the public cloud. There are plenty of options but you cannot go wrong with either Azure or AWS or Google cloud or even Digital Ocean.

We should watch though for cloud lock in. Perhaps we should dockerize your application until we further investigate the PaaS model.

Well… dear customer I think we are in good shape. I expect to finish the selection next month, then I will use the next month to download, install and configure the tools from github and other stores. We can soon after meet and discuss the functional business requirements.

Do you want a relational database or a NOSQL database?

And finally I totally recommend building also a companion mobile application. HTML5 web applications cannot realy access the hardware of modern mobile devices. But don’t worry: we have plenty of options here too…

14 Jun 2017