I will not dwell on the primitive installations that permit the production of alloys; these are well explained in your space-traveller manual. Let’s instead fast-forward to a modern-technology installation, learning from the lessons of the first episode.
Here is the structure of an alloy-production installation, with first a view of an intermediate building step, so that you can see below the top layer (colours are here only to denote depth — Y-axis in the game):
This probably deserves some explanations… Here are first the components being used:
- The white cube, with little black squares arranged around a blank square area on each side, is the sequencer. Its right-hand side is the outlet, and the 5 other sides are the inputs, which may be all used; for example, this sequencer for stainless steel production needs all 5 inputs:
- The white cubes with arrows are materializers (expanding arrows), attached to green-dot blocks which receive incoming materials; and dematerializers (centripetal arrows), attached to red-dot blocks which send outgoing materials.
- The green translucent stuff is “optical fibre”, which can be viewed as a zero-capacity FIFO with automatic distribution of absorbed items among the consumers.
- The translucent blue material is water, which is shown here to illustrate the need for confining blocks; and the shiny brown cube is a block of cooled-down bronze, which I put there to better locate the farther-ahead of the 10 positions where molten alloy gets poured out of the melting furnace.
- The pump, the melting furnace, and the conveyor belts are easy to recognize.
The principle of this installation is the same as seen for pure metals. However, as I previously said, cooling down an alloy must be delayed a bit, to let the different metals mix properly. The slide is there to act as a retardant: the time needed for the pump to send water on top, and the water to go down the slide, is enough to let the metals mix correctly. This is why this installation works…
… or so it seems at first.
The Problem with Alloys
Alloys are melted in batches of 10 units in the game. When there is no demand for the alloy, here is what happens:
The fact that all the alloy cools down in place, without the water to accelerate the process, has these consequences:
- Unless you build a drain for excess water, the water that falls down the slide will cool down the first cube (which will remain there because it is not needed anywhere else), and the 9 other units of water will simply spill everywhere and make a mess of future or nearby productions.
- As soon as a couple of units of alloy do get used, this frees the same amount of space near the outlet of the melting furnace, a fact that triggers the production of a new batch of 10 units of alloy… except there is not enough room for 10 units of molten alloy!
- And so instead of producing regular alloy, the output is a bunch of pure-metal blocks and defective alloy, all of which get sent to other production centres, as normal alloy units would be!
This design results rather quickly in defective alloy, which the game says is of no use at all, unless you find it decorative… And the sequencer is completely out-of-sync with what really happens at the melting furnace.
A New Hope
All is not lost! The sequencer, this wonderful tool, has the ability to regulate, in addition to being a sequencer: it will not absorb any input material for a new run of its sequence until the current run of the sequence has ended. So a minor tweak of the previous installation leads to this:
The output sequencer just needs to be programmed for a sequence of 10 units of the alloy. Icing on the cake, the sequencer also acts as a filter: in case something goes wrong, pure metals or defective alloy will not get absorbed by that sequencer, because those are not part of the programmed sequence!
The other production centres are now protected against bad units from this installation. This solves one important issue with the first design, that did not fit one requirement of Kanban:
Processes must not send out defective items, to ensure that finished products will be defect-free.
The new design ensures, that this remains true. Besides, when there is demand for this alloy, it will be taken from the sequencer’s little stock. Only when that is empty will the sequencer absorb a new full batch of 10 units, and so on. And thus it works…
… or so it seems at first.
Open-air Cooling Strikes Back
What could go wrong? The output sequencer will only absorb produced units 10 at a time; is that not perfect?
It is, except for one small detail: open-air cooling takes a long time, compared to water-cooling. And thus sometimes it happens, that the last of the output sequencer’s little stock gets pulled to some production centre, and that sequencer resupplies, while only the first cube has been water-cooled and is ready to get absorbed: the other 9 units are still in the process of cooling, slowly, in the open air.
The result is, that the melting furnace starts pouring molten alloy again, without there being enough space to pour all 10 units…
Back to square one. Hum… one-and-a-half (remember, the output sequencer still solves one important issue, at least).
The gist of the problem, is that input materials are pushed into the melting furnace regardless of what happens on the other side. What would solve this, is some kind of signal to tell “it’s OK now: enough room has been freed for another batch to start”.
The Return of the Kanban
Oh? Let us read again the origins of Kanban at Wikipedia:
Kanban aligns inventory levels with actual consumption. A signal tells a supplier to produce and deliver a new shipment when a material is consumed.
This is the answer!
As a signal, I chose the “defective alloy” block, because I found it fun to prove the game wrong: there is some use after all for this “useless” block
Any kind of block that is ignored by both the melting furnace and the pump can be used instead.
At first, I envisioned a pure-Kanban setup:
- The input sequencer would output the signal-block first, as a “Kanban” that would follow the current shipment.
- The output sequencer would gather the signal-block along with the full shipment.
- The output sequencer would distribute the gathered stock until it is exhausted, and then release the signal-block (i.e. the Kanban) back to the input sequencer.
- The input sequencer would be in wait for the return of the Kanban, and would start a new shipment as soon as the output sequencer would provide it, thus signalling its ability to absorb a full shipment again.
Unfortunately, in the case of the stainless steel, all 5 inputs of the input sequencer are already used, and I did not want to complicate things by chaining two input sequencers. So I altered this pure model to get something equivalent, by acting on the 6th side side of the input sequencer: its outlet-side!
Here is the final installation, with first a vertically-truncated view, so that you can see below the top layers (again, colours are here only to denote depth):
This assuredly deserves some more explanations. Again, let me begin with the description of the new components:
- The cubes with kinds of miniature conveyor belts drawn around a central square on each side are selective movers. The one added in the first picture will only take alloy units on its “IN” side, and move those to its “OUT” side; the one added in the second picture will only take Kanban cubes on its “IN” side, and move them to its “OUT” side.
- The IN and OUT cubes themselves are marker cubes, used to program the special “mover” cubes, and are normally removed afterwards. I kept them here for illustration purposes only.
- The yellow-and-blue block is a deflector/splitter, necessary here because the way from the red-dot block to the green-dot block is not a straight line.
- Last but not least, the rough, somewhat-shiny, grey cubes are my “Kanban”: the “defective alloy”. With this alternate design, I need two instead of one (explanation below).
Now, let me describe the process:
- The input sequencer is unaltered (see above).
- The output sequencer is programmed with a sequence of 1 Kanban, then 10 alloy units; example for stainless steel:
- The output sequencer being empty, it absorbs the Kanban-block on its side because it is part of the programmed sequence; it is still missing all the alloy units.
- The place left empty near the output sequencer immediately pulls the other Kanban-block, thus freeing the input sequencer outlet. This second Kanban-block remains outside because the output sequencer already has one of these, and only needs one.
- Now that the outlet of the input sequencer is free, the usual production cycle can begin: first the raw ores, then the water, until the last unit of water has left the input sequencer. All these units of ore and water are not absorbed by the dematerializer, because a Kanban-block is still blocking the other end of that optical fibre.
- As the last unit of molten alloy gets cooled down by the last unit of water, and then absorbed by the output sequencer, the latter thus completes its stocks and begins a new run of its sequence.
- Hence the output sequencer first ejects its Kanban-block, which is immediately moved aside, and then pushed in front of the input sequencer outlet, way before this sequencer has finished resupplying. The input sequencer cannot output anything any more.
- Then the output sequencer distributes the 10 alloy units, until it is empty.
- Only after all alloy units have been used can the cycle begin again, with the output sequencer absorbing the Kanban-block on its side, and so on.
The final result is a large-scale Kanban-driven factory, within which sensitive production centres are themselves small-scale Kanban-driven installations. One could almost say “Kanban-at-scale”
At this point, I am not sure there is still room in the game for expanding the use of Kanban, or for illustrating other aspects of this organisational method. For sure, there are still aspects of Kanban left unexplored. For instance, say “Kanban” to any modern IT worker, and you will probably be presented with that:
I hope this article was as interesting for you to read, as it was enlightening for me to write, after having had a great time playing Blackvoxel.
If, after reading this, you feel like playing Blackvoxel yourself, remember: Don’t underestimate the Code! It permeates everything in that universe, and the programmable robot is your friend for digging, sorting, storing everything at the right place…
Use the Code!