Skip to content

BrewBuddy the road forward

Pim Bliek edited this page Feb 12, 2019 · 1 revision

The number one application for home brewers

Introduction

BrewBuddy aims to be the number one application for home brewers. It allows users to create and edit recipes, register the brewing session, keep inventory, take notes et cetera. BrewBuddy is based on the Dutch “BrouwHulp” application for Windows an Linux which was released as Open Source Software under the GPLv3 license in 2018.

When the code became Open Source Software (OSS) we found out the code is not very structured and quite ad-hoc written. Also the language used (FreePascal) is not very common nowadays and the used IDE (Lazarus) is buggy at best. Even when we cleaned up the codetree and made specific configurationfiles for Lazarus per platform, it turned out not to be portable from one developer to another. What would compile and run succesfully for one person would totally crash for the next. In a multiple person development team this behaviour is totally unacceptable.

After some time we decided to discuss alternatives. This document is an attempt to structure that discussion and to create a common ground on which to build further. Structure

In this document I will first describe ideas on the direction of BrewBuddy in the chapter "Purpose". Then I will discuss the functional requirements for the new application and then the technical ones. I will also discuss some choices for the purpose of smooth development. Purpose

The whole idea is to leave the current code as it is and start a new codebase. The following common ground starting points are a guide for the new direction:

  • We will use a modern language
    
  • We will use modern frameworks for development
    
  • We want full reproducability
    
  • We want a development environment that enables rapid development in a mixed team
    
  • We want to choose an architecture that everybody could quickly adapt to
    

How to get requirements more focussed?

A recipe program for home brewers is in fact a question-response kind of interface. I combine ingredient A, B and C in specific amount and I want a start SG of 1050 and 20 liters of wort. The application calculates the amount of ingredients needed, the colour, pH, bitterness etc. Furthermore there is data logging, repoarting etc.

To get our requirements further analyzed, we can try to answer questions: how do you work, what is your workflow, what would work for you?

Proposal: take the functional requirements listed below and translate them to Epics. Then we refine them further down to User Stories and Issues.

Functional requirements

To start with we want to try to recreate BrewBuddy as best as we can, although we should not necessarily try to recreate the exact same interface. However, it should be recognizable as 'BrouwHulp' for our loyal fans. At least we should support all the most used functions in a first version.

  • We create a desktop application first;
    
  • It should feel like BrouwHulp in the sense that it feels familiar;
    
  • It should be easy to install and run for an end-user who is just using his PC for applications and nothing more;
    
  • BrewBuddy should be available for Windows, MacOS and Linux;
    
  • Basic functionality it should support:
    
  •     Keep inventory of your ingredients
    
  •     Included set of common ingredients
    
  •     Create and change recipes
    
  •     Automatically calculate bitterness of the recipe
    
  •     Automatically calculate colour of the recipe
    
  •     Automatically calculate start SG of the recipe
    
  •     Create and change brewing sessions based on a recipe
    
  •     Import and export of BeerXML
    
  •     Export a recipe to clipboard for forum-layout (bbCode)
    
  •     Export a recipe to clipboard in HTML-format
    
  •     Export your whole dataset for backup (inventory, recipes, brewing sessions, the whole lot)
    
  •     Print logging forms for the brewday
    
  •     Print recipes
    
  •     Included beerstyles
    
  •     Comparison of your recipe with the chosen beerstyle
    
  •     Input ingredients in a recipe according to weight or percentage of the mash
    
  •     Input hops into your recipe based on weight or bitterness
    
  •     Automatically calculate expected Alcohol content of the recipe
    
  •     Add / change water-profiles
    
  •     Use waterprofile in the recipe
    
  •     Calculate expected pH of the mash based on ingredients
    
  •     Calculate the amount of acids to add to get the required pH
    
  •     Calculate expected end SG
    
  •     Calculate the virtual SG before adding extra sugar before fermentation
    
  •     Calculate temperatures at mashing
    
  •     Calculate level of your mash in the mashtun based on physical dimensions of your mashtun
    
  •     Calculate amount of water used for infusion and decoction
    
  •     Calculate amount of water needed for every step in the brew
    
  •     Log measurements during the brewing session like pH, SG etc
    
  •     Timer for mashing and boiling.
    
  •     Calculate size of needed yeast-starter
    
  •     Calculate amount of dried yeast needed
    
  •     Manage the inventory
    
  •     Print your inventory
    
  •     Starting a brewing session will deduct ingredients from inventory
    
  •     Print checklist for the brewing session
    
  •     Sort recipes and brewing sessions based on name, number, creation date etc
    
  •     Change the location of your datastorage
    
  •     Calculate SG <--> Brix  and SG <--> Plato and Brix <--> Plato
    
  •     Change the colour calculation method
    
  •     Change the bitterness calculation method
    
  •     Calculate new SG when adding water or sugars
    
  •     Both bottles or kegs are supported for transfering the beer into
    
  •     Calculate amount of bottling sugar needed per brew, bottle or keg
    
  •     Calculate pressure (bar/psi) for forced carbination in kegs
    
  • Nice to have functionality:
    
  •     Support own brewery logo (nice to have)
    
  •     Calculate refractometer readings (nice to have)
    
  •     Stopwatch function (nice to have)
    
  •     Support for high gravity brewing (nice to have)
    
  •     Calculate corrections for temperature when doing hydrometer readings (nice to have)
    
  •     Log notes during the brewing session (nice to have)
    
  •     Automatic calculation of hop-aging (nice to have)
    
  •     Automatic alteration of recipe when you change target IBU (nice to have)
    
  •     Import and export of Promash (nice to have)
    
  • Maybe in the future:
    
  •     Cloud support
    
  •     Support connection to a mobile app on the same LAN or via Cloud for the brewing session
    
  •     Full mobile app
    
  •     Full tablet app
    
  •     Web-based app, self hosted or cloud-hosted (paid) 
    

Technical requirements

For BrewBuddy the following technical requirements are a minimum:

  • Support for Windows
    
  • Support for MacOS
    
  • Support for Linux
    
  • All of the above 64 bits
    
  • We will support 32 bits if that does not require extra or much development effort
    
  • Fast and responsive UI
    
  • As native as possible on the platform it runs on
    
  • Easy installer for the end user
    
  • As less dependencies as possible on third party software. BrewBuddy should be easily installable.
    

Development requirements

To be able to develop a new BredBuddy easily and rapidly in a controlled manner we need to consider many things in unison. The following common ground starting points are proposed:

  • Use a modern language with broad popularity and support
    
  • Use an object-oriented language
    
  • Use of the MVC design pattern for seperation of functions
    
  • Language should be easy to learn
    
  • Open architecture
    
  • Only Open Source components can be used! (HARD requirement due to our licensing!)
    
  • Modular design
    
  • Architecture is flexible
    
  • Web-oriented design: we should easily be able to port to a website / cloud / selfhosting
    
  • Automated tests
    
  • Automated CI/CD pipeline
    
  • Easy creation of packages / executables
    

Ideas for stuff me might use!