The Pains and Pleasures of Setting up Bika LIMS
Configuring any complex computer system is not a double-edged sword - it has only one cutting edge and it is not setting the LIMS up manually. The pleasure that automation brings by uploading setup spreadsheets is not outweighed by the frustration copped by trying to express a relational database in a set of 50 lists
Lemoene, Cape Town, 23 June 2026
This week I was mainly using setup data spreadsheet imports configuring a Bika LIMS site
Most calendar time in these mini projects goes into collecting the lab’s setup information. Labs are busy, and though most data is available in tabled format somewhere, it takes time to gather and then interpret, triggering iterative Q&A rounds

It’s the little foxes that spoil the vines. Get something small like Analysis TATs wrong and the LIMS will start sending ‘Late Analysis’ alerts too early or late. To fix it, each one has to be visited individually in the UI
The spreadsheet are populated in layers: Sample Types, then Sample Points, Methods, Instruments, Instrument Methods, …, Sampling Rounds, Reference Specifications, Worksheet Templates, and so on
At the same time, also try to finalise the Sample Points for recurring Sampling Rounds or Surveys to prepare bulk Sample Import sheets with later
For maximum automation on the Sample Create form, link Analysis Templates, Specifications, Profiles and Sample Points to their respective Sample Types. This limits their lookups to only list the relevant options instead of going deep
Note Try Imports on a throwaway site first so you don't soil your Test server. Uploads hardly ever go perfectly the first time around. Once promoted to Test, the configuration will be refined in the UI during acceptance testing before being migrated to the Production LIMS
Error messages are cryptic, mostly relational index issues, typos and the like. The online example features validation rules mimicking relational lookups and helps a lot to keep dependencies alive. Post indecipherable errors to Bika Slack for interpretation
At this point you might already be regretting not accepting the 60 hour offer for professional configuration services:)
Sometimes invisible cell formatting in the spreadsheet causes problems. Remove all empty rows, and make sure numeric columns are formatted as Number
The migration from Python 2 Archetypes to Python 3 Dexterity also throws the occasional spanner in the works. In such cases the code needs attention. These and other unexplained issues that surface during Setup review I pass on to Lunga :-)
When an upload error occurs, nothing is imported and you have to start again after fixing the issue in the spreadsheets. Each run takes time, so I have started doing the uploads in parts

Once the first part loads successfully, move on to the next. The sheets are interdependent, but splitting them - with everything up to and including Manufacturers as Part 1, and the rest as Part 2 - works well as a starting point
And all the while, the clock is ticking and only so many hours were budgeted
Knowing it would have taken 20 times longer if everything had been captured manually saves morale at this juncture
A host of non-loaded items will now be discovered during the configuration review. A few more issues go to Lunga and team. More tests on a new throwaway site… A smoke test and a setup walkthrough with the superusers always surface more gaps and misunderstandings...
Alas, after everything imports successfully, one still has to redo the upload on the Test site. Final manual configuration tasks in the UI remain! Quick Guide: Post-import Configuration
Done! Now to convince lab users, after training, to make time for experimenting and doing Tutorials on the Test LIMS:-)
