Choosing between different solutions (WebApp, MobileApp, DesktopApp, Console or Service)
Abstract
In this article I’ll encourage you to keep an open mind about your
options when building a software solution.
Motivation
Why write or read about how to choose between different solutions?
Shouldn’t it be obvious? I think it’s well worth our time to dwell on
that, especially considering two reasons:
- Choosing the wrong solution is one of the most expensive mistakes to
make. E.g. adding an unplanned feature to an application may seem
expensive, but it pales in comparison with the realization that your
mobile app should have been website or the other way round.
- Often a decision about a platform or solution is not made
deliberately, because we are simply not aware of all our options.
E.g. consider if Kahneman’s WYSIATI (What You See Is All There Is)
theory comes into play here or the “If all you have is a hammer,
everything looks like a nail” quote rings true.
Why don’t we evaluate our options more carefully?
There are a couple of obstacles that keep us from taking a closer look.
- Missing Expertise It often requires in-depth knowledge and
experience of different technologies, which is hard to come by. E.g.
if you’re only skilled in developing Web Pages for customers you
won’t necessarily see that a Windows Service or a commandline tool
on a Parallela Board fits the
requirements better.
- Emotional Bias We’re often biased towards some technology not
based upon it’s merits and flaws for our specific use case, but
rather on our feelings and emotions based on a past project. Not
only was it a different project and the technology should be
reevaluated in the context of the new one, but also our emotions
were influenced by other factors like a too short deadline,
mismanagement, unrealistic expectations or difficulties with the
involved parties.
- Lots of Options Evaluating a lot of options is difficult and
straining, consider for example the book The paradox of
choice
or the TED
Talk
given by Barry Schwartz.
Removing the Obstacles
But how can you remove those obstacles?
Missing Expertise
Missing Expertise can be battled in the following ways:
- Learn about it The most obvious, although hardest solution is to
learn about the qualities of certain technologies. This does not
mean that one needs to become an expert in every new technology that
pops up, but knowing if it’s a good match for a certain use case is
important.
- Get Help If you’re a consultant or developer and the technology
that is most appropriate or required for the task does not match
your expertise, you should acknowledge the fact and inform your
client or boss. If you have a colleague or acquaintance that
specializes in that technology or field you should refer to them.
Emotional Bias
- Stressfree Environment A good way to combat emotional bias is to
get to know a technology in a stressfree environment. This may mean,
that you take a look at it in your spare time, without the clock
ticking.
- Tiny steps Start step by step and don’t try get everything done
at once. Sometimes you’ll feel tempted to try something big at once
that you are able to do in another language or with another
framework that you’ve already mastered - but don’t give in. Small
incremental successes keep your motiviation going for a longer time.
- Ask a friend If you really dislike a certain technology, you
should talk with a friend or someone you respect that is fond of it.
As he or she is your friend, you are unlikely to completely dismiss
them and get a glance why someone would want to use that and
advantages it has.
Lots of Options
And finally, to get a quick overview I’ve compiled the following list
that can be used to get the juices flowing on what parts could make up
the ideal solution. My hope is that by spelling them out, they’ll be on
the radar the next time when a problem needs solving. Many solutions do
not fall strictly within one category and more often than not consist of
more than one part.
Disclaimer
This list is neither exhaustive nor can it be, it’s just a reminder of
what’s out there and should be seen as an inspiration to get you to
explore your options.
- Web Solutions
- Static Web Pages (consider online/offline help, manuals)
- Content Management Systems (CMS)
- Wordpress (php)
- Umbraco (asp.net)
- Mobile first
- Server Side Frameworks
- Asp.Net
- NancyFx
- Asp.Net MVC
- Asp.Net WebApi
- Ruby
- Php
- Node.js
- Forums
- phpBB (php)
- MVCForum (asp.net mvc)
- SPA
- Web API
- Front End Frameworks
- Bootstrap
- jqueryUI
- Skeleton
- javascript frameworks
- angular
- aurelia
- knockout
- react
- visualization
- CSS Languages
- Mobile Applications
- Platform specific
- Android
- iOS
- Windows Phone
- Blackberry
- Cross platform
- Apache Cordova
- Xamarin
- RemObjects
- Unity
- Desktop Applications
- Wpf (windows only)
- WinForms (cross platform using mono)
- GTK and it’s wrappers like GTK#
- DirextX and it’s wrappers like SlimDX or SharpDX
- OpenGL and it’s wrappers like OpenTK
- Unity
- Console Applications
- Windows Services
- Linux Daemons
- Datastorage
- FileSystem
- SQL Databases
- MS-Sql
- MySql
- Postgresql
- Oracle
- SQLite
- No SQL Databases
- WebServers
- Media Processing
- imagemagick for images
- sox for audios
- ffmpeg for videos
- Virtualization
- Virtual Box
- Hyper-V
- Virtual Machine
- Xen
- Operating Systems
- Hardware platforms
- Raspberry Pi
- Beagle Bone
- Parallela
- Cloud platforms
- Amazon
- Azure
- Digital Ocean
- Linode
- Payment Providers
As always feel free to leave a comment, especially if you want to remind
me of an important option that I completely missed when I typed up the
list, as I most certainly did.