Skip to content
edgaleano edited this page Mar 10, 2024 · 5 revisions

Project overview

We want to replace all of our existing systems with the main version of foodsoft: a software application used by food cooperatives like vokomokum which has almost all of the functionalities that vokomokum needs. The functionality that is missing in foodsoft we can develop ourselves because foodsoft is open source and because it has a plugin system to extend the software.

Why we want to use foodsoft

We want to replace all of our systems with the main version of foodsoft because:

  1. Foodsoft will enable vokomokum to continue functioning long into the future, because:
  2. At vokomokum we will not need to have members with technical expertise because foodsoft is being actively maintained by the IT collective rokoli (source and because foodsoft is being used by other food coops. So, if we at vokomokum ever have a technical problem with our system, we could ask for help at the foodsoft forum. Right now, because all of our software is custom made for vokomokum, we are highly dependent on having technical people in vokomokum who can maintain this software. This has already started to become a problem because the people who created the existing software systems are not in vokomokum anymore.
  3. It will be easier for people in vokomokum to understand, fix and improve our software because foodsoft is a software application that is simpler, more up to date, and better documented than the many systems that we have now. Because of this increased simplicity, we increase the chances of finding people who can and are able to work on improving our software. Currently, because our software is so complex and poorly documented, the people who've tried to work on it have given up.
  4. Foodsoft will improve the functioning of vokomokum, because foodsoft has been maintained and improved over the past years, and it continues to be maintained. So we can directly benefit from any fixes and improvements made by or for other food cooperatives.
  5. We can empower other food cooperatives: because foodsoft is used by other food cooperatives, any improvements that we make to the software will also benefit those other cooperatives. And the better the software the easier it will be for people to start their own food coopeartives.

Current systems

This is the list of current systems which we want to replace by foodsoft.

  • Dry ordering system: this system is used to order all products that are not bulk or fresh products. We want to replace this system because it is hard to maintain. It is hard to maintain because it was written by one person, it was written in PERL (with some libraries that are now outdated), and it is not documented.
  • fresh ordering system: this system is used to order bulk products or fresh products (vegetables, fruit, bread, eggs). This software is a vokomokum custom version of foodsoft, which has a few plugins that work on top of the Amsterdam version of foodsoft version v3.4.0+adam+ß, which is a deprecated fork of the main version of foodsoft. The Amsterdam version of foodsoft (and in turn also the current vokomokum version) has not received any of the updates of the main version of foodsoft since it was forked in 2014, and it contains some functionality useful to vokomokum which doesn't exist in the main version of foodsoft.
  • Member system: this is a python web application used to add new members (and generating a number to identify that member), adding members to working groups, and emailing members in working groups. It is also used sometimes by the core team in vokomokum to see if members are active and see if they have done a shift.
  • emailing system: we have an exim mail server to send mails to mail groups with the address @vokomokum.nl. A custom script add members to an email group when they have been added to a member group in the member system.
    • Developed by the same person who developed the dry ordering system.

Database

All of these systems share a single postgresql database.

Server

All of these systems are hosted on a server owned by the person who developed the dry ordering system. Since this person is not active anymore we will host any new system on a server that is owned and can be accessed by everyone in the systems group of vokomokum.

Development process

Here are some ideas for how we will replace all of our existing systems with the main version of foodsoft:

Keep using the main version of foodsoft (don't fork it)

A problem that hapenned with the Amsterdam version of foodsoft, is that it was forked from the main version and because of that it didn't get any of the improvements from the main version. We want to always keep using the main version of foodsoft so that we get all the benefits described at the start of this document.

We think we can do this by:

  1. proposing improvements directly to the main version of foodsoft, instead of adding it to our own version.
  2. for any improvements that are not accepted in the main version of foodsoft, we add them to our own version as plugins that work on top of the latest main version of foodsoft.

Start from the main version of foodsoft

Since we already have a version of foodsoft at vokomokum we considered starting from this version and adding what was missing. However, because this software is years behind the main version, we'll just be introducing technical debt that we will have to fix later. Also, because the main version of foodsoft is years ahead it might already have some of the functionality that we are missing in the current version.

That's why, we'll start from the main version of foodsoft and add any missing functionality.

Only add the functionality we need

The Amsterdam version of foodsoft and the plugins in the vokomokum version of foodsoft both have custom functionality that might not be in the main version of foodsoft. However, we might not need all of that functionality. Some of it might already be integrated in the main version of foodsoft, and other might not be needed (like some style enhancements). So, instead of automatically adding to the main version of foodsoft all the functionality that is currently in the amsterdam and vokomokum version, we will only add the functionality that we need and which is currently missing in the main version of foodsoft.

All the functionality taht we want to develop should be described in our issue list: https://github.com/vokomokum/foodsoft-vokomokum/issues

How we decide what functionality we need

We'll do research by:

  • Talking with members of foodsoft who use our current systems.
  • Looking at the custom functionality in the Amsterdam and Vokomokum version of foodsoft.
  • Testing foodsoft with members and identify what is missing.

All the task that come out of this research will be added to our issue list: https://github.com/vokomokum/foodsoft-vokomokum/issues

Who we do research with

When talking with members and testing foodsoft with members, we need to make sure that we include people that do all the different tasks that keep vokomokum running:

  • People who order (everyone).
  • People from the ordering team who get the product list from our suppliers and send our orders to the suppliers
  • People who do the checkout on the ordering day.
  • People from the finance team who takes care of the accounting.
  • People from the core team who adds new members and contacts members.

How we prioritise our work

We prioritise work on functionalities that are:

  1. Essential to keep vokomokum running. For example, because the person who created and maintains the current dry ordering system will soon not be able to maintain it anymore, we need to prioritise being able to order through foodsoft everything we currently order through the dry ordering system. Functionalities that just make the cooperative a bit more efficient are given less priorities.
  2. Used by the most people. For example, we'll put the most work into the ordering aspect because that is used by everyone in the cooperative and will cause the most problems if it goes wrong. In contrast, the functionalities for the one or two people who do accounting have less priority because we can find workarounds for those.
  3. The most time sensitive. For example, during checkout the two people processing all payments need to get all the payments quickly done so that there is not a queue building up on pickup day. If they can't do their work people can't pay and won't be able to go home with the items they picked up. In contrast, something like accounting can happen slower with the help of some people in the systems team.
Clone this wiki locally