/
Infrastructure Requirements

Infrastructure Requirements

Requirements depend on what type of software you plan on developing, a web application, desktop application, mobile application? A simple website, a customized CMS, a full-blown web application?

Web Applications

  • For simple websites, most institutions offer solutions such as Wordpress or Drupal instances that often provides all a project needs.
  • If just a few additional or customized functionalities are needed, customizing Wordpress or Drupal might be the best way.
  • If more sophisticated functionalities are needed, developing your own web application is probably the way to go.

Customizing Wordpress, Drupal, etc

  • You need a developer who can customize/implement the extra functionality you need.
  • You need a place to host your instance. Your institution might provide the relevant infrastructure, or there are companies that do that.
  • Pros:
    • Usually, your servers are taken care of, maybe even the core updates to your instances. All you need to worry about is the content and your customizations.
    • Often the service that provides your instance also provides testing and staging environments.
    • You usually buy the whole package and don't have to worry about anything else.
  • Cons:
    • There is a limit to what you can achieve with customizations.

Developing a new Web Application

  • You need a (or multiple) developer(s).
  • You need servers to host your application. There are services such as AWS, Heroku, etc. and some institutions provide their own services.
  • Pros:
    • You can have an application that does exactly what you want (given enough time and money).
  • Cons:
    • Probably costs more money.
    • Requires continuous maintenance.
    • More of a add components as you need them approach than buying the whole package.

Environments

An environment is the whole stack of your software deployed to one or multiple servers (e.g. web server, web application, database). You typically have (at least) three environment:

  • Testing - an instance of the software that developers and internal quality assurance uses to test changes to the software.
  • Staging - an instance that is used by the client to approve changes. Ideally its setup is identical with the production environment including the data.
  • Production - the software running in production. This is where your actual data resides.

Software Stack

A software stack is a combination of software that is required to run an application. Typical components for a web application are:

  • operation system
  • database (this is where the data of an application is stored and managed)
  • programming language and framework
  • server software
  • and many other components depending on the application

These components can run on one or multiple machines.

Desktop Applications

Sometimes an application that runs locally on a users machine can be better suited than a web application (that a user access through their browser). 

  • Pros:
    • The infrastructure is simpler in most cases (there are no servers needed, no staging/testing/production environment, etc.)
    • Some things are easier to implement (for example if the application mainly deals with data users keep locally)
    • Fewer security considerations since no data is send over the internet (assuming there is no server component to the desktop application)
  • Cons:
    • If the operating system shouldn't be restricted to just one, there can be more development work required. Cross-platform development can be tricky.
    • Testing is more involved since you need to test multiple platforms (MacOS, Windows, Linux,...)
    • Since you can't control the environment your software is running in (it's the user's computer), there will be more unexpected issues coming up and your software might not run at all on some computers. For web applications, typically if the user has a fairly up-to-date browser, the application will function.

Mobile Applications

Especially if you want user to interact with your software as they move around, a mobile application might be want you want to develop.

  • Pro:
    • you can enable users to interact with you application while moving around
  • Cons:
    • if the operating system shouldn't be restricted to just one, there is usually more development work required. Especially if you want the app to run natively on the system, several versions of you app have to be developed (one for iOS, one for Android, etc). There are framework for cross-platform development, but they don't always let you do everything you might want to do.
    • often you also need to implement a backend component that runs on a server that you app connects to, which adds additional development work.
    • Testing is more involved since you need to test multiple platforms (iOS, Android,...)
    • Design/Layout can be tricky since there is only limited space on a phone or tablet screen

Code Management

Code needs to be versioned and stored somewhere. There are several software solutions for that (SVN, Git, Mercurial, TFS, ...). Multiple services offer cloud solutions based on those software solutions:

  • GitHub
  • Bitbucket
  • SourceForge
  • several others

Whoever develops code for you, make sure the code is hosted somewhere (ideally in the cloud by one of the above services or in an institutional version of it) and not just on the developers computer.



Related content

General Considerations
General Considerations
More like this
Sustainability considerations
Sustainability considerations
More like this
Software Development Methodologies
Software Development Methodologies
More like this
Workshop Outline
Workshop Outline
More like this
Tutorial #3: How to create a Java/Spring web application (part 1)
Tutorial #3: How to create a Java/Spring web application (part 1)
More like this
HSS 2017 Workshop Home
HSS 2017 Workshop Home
More like this