Skip to content

Design

We don’t want to specify any harsh requirements that would prevent students creating a variety of projects.

However, we do need to give some recommendations for designing projects, so that future students can still understand and maintain the projects.

It is also worth noting that due to the requirement of hosting things for free, you will want to read the hosting page as this limits what you can do signficantly.

Please make sure to follow the coding guidelines as well for any programming.

KISS

Keep it simple stupid!

If it doesn’t require a feature, don’t add it.

If it doesn’t require being written in a fancy programming language, don’t use that.

If it doesn’t require data collection, don’t collect people’s data!

Existing Systems

If a system exists, please try to use it unless its completely impractical.

This is because students don’t have much time and don’t want to be managing a completely new system. However please use open source projects (closed source nearly always comes with a cost, either data collection or money both of which we cannot afford)

Note: I’m mostly referring to libraries. I think its quite fun to write simple projects like a link shortener for yourself.

Licensing

The issue that comes with using other people’s projects is that we need to check the license agreement to ensure that we can use it legally.

To summarise, we require commercial access to a project. So you will need to check a project allows commercial use. MIT and BSD licenses should be fine.

Keep it general

Always try to keep the structure of the project general, so that it can be repurposed easily. Don’t take it too far though---there’s a balance.

Generalisation normally leads to cleaner code and better maintainability.

Modules

Modules are your friend, different languages implement them differently and have different ideas about how they should be organised (e.g. Go vs Rust).

We don’t really have opinions, as you should use the style which fits the programming language you are using. If you don’t like that style, don’t write a project in that language (for maintainers, I’m sorry but deal with it).

If you try to go against the style of the programming language, you will find more barriers and have to implement hacky workarounds which will lead to unreadable, confusing and buggy code.

Data storage

Due to limitations with the fact we will never get any funding, we must create projects which only relies on database storage (which we can host for free, see the database page).

Docker

For easy hosting for free, we require projects which need hosting to be dockerised (meaning they have a Dockerfile).

These Docker containers cannot interact with the host system at all.

Websites

If all pages can be written in markdown, then use a static site generator.

If a website is dynamic it should always be designed with a backend and frontend to help with code security, which also helps with a website feeling “modern”.

Any data input should be validated on the backend.