Design of a baby changing station
First, a summary. All implementing classes must conform to the following interface.
+------++---------------------------------------+ | ||............ | |Bucket||. . Misc. Diaper stack | | X ||. . supplies (local backup)| | ||. Place . | +------+|. for . | +------+|. baby . | | ||. . Diaper Buffer | |Bucket||. . stack space | | Y ||. . (primary) | | ||............ | +------++---------------------------------------+ Not shown: - clothing supplies - light source - off-site diaper backup
Requirements analysis
A newborn baby is expected to soil 15 or more diapers a day. Many of the resulting diaper-change operations will be performed under high stress in sub-optimal conditions by inexperienced amateurs. The service is subject to performance constraints: high diaper-change latency is not acceptable to clients and affects morale of the operations team. Lastly, peak loads cause resource contention in supporting processes such as laundry and supply logistics.
It is therefore necessary to optimize the diaper-changing architecture along multiple dimensions. We identified some key requirements:
- local-first design: all tasks within arm's reach
- asynchronous API for background jobs (e.g. waste disposal)
- fast failure & alerting on supply shortages
- double redundancy (minimum) for all components
Like many aspects of parenting, the resulting design appears obvious. Simple and effective systems usually do. I am under no illusion that my advice is novel in any way, given the vast diapering experience our foremothers have accumulated. Nevertheless, as a parent who was recently ignorant of these details, I hope that this writing might somehow contribute to our shared knowledge.
Note: the design in this article applies to the infant phase and should be considered inapplicable to the very different requirements of toddlers.
Our implementation
We started from the base interface. Key stakeholders added a cloth diaper requirement. Strategic business partners encouraged us to include a heat lamp as an experimental feature. As is often the case in large projects, the resulting feature set was somewhat crowded.
Heat +---------------------------------------+ lamp |............ Open Box of | . |. . supply assorted | +------+|. . tray diapers | |Bucket||. . | | X ||. Foam . E | +------+|. pad . H20 Stuffed m | +------+|. . cloth p | |Bucket||. . diapers t | | Y ||. . Clips y | | ||............ | +------++---------------------------------------+ - clothing supplies are stored underneath - string lights provide light source - off-site diaper backups are in the bathroom
Operations details
The system works as follows, starting from top left.
Soiled diapers and wipes go in Bucket X for a high-priority, high-temperature wash. (Teams using disposable diapers and wipes want a trash receptacle here.) Due to smell, a cover is not negotiable; foot pedals are ideal. Bucket Y is for soiled clothing and diaper covers, which don't require hot water to clean, and can be washed when the team has bandwidth.
Next to the buckets we have a heat lamp, ostensibly for keeping the nude baby warm in cold rooms. I have not found it very useful except after baths, and would not include it in future projects.
Everything else is on an elevated surface, in our case a waist-high cabinet. Inside it we store baby clothes and a stash of backup diapers. In my ideal architecture the clothes would be ready-to-hand in open shelves above the changing table. This ticket was estimated as too much effort and never got past initial designs. (A senior developer considered the proposed solution inelegant and visually abrasive, and blocked it in several sprint planning sessions.)
The baby goes on top of the foam pad, which has inward-sloping edges and an impermeable cover. We keep a flat diaper on top of it as well, to satisfy comfort requirements and for easy clean-up of stray waste both liquid and solid.
The open supply tray is the vital toolbox of the changing station. I like to keep this uncovered so all items are ready-to-hand. It holds things like:
- flat cloth diapers (folded)
- toys & baubles, to occupy the infant's attention
- creams, for rashes & post-bath massages
- diaper covers
- cloth wipes (primary)
- disposable wipes (as backup)
I recommend all teams, even those on a disposable-diaper toolchain, keep at least a few flat cloth diapers. They are an incredible multitool — think of them as the best rag ever invented. We use them to clean up messes, cover the changing pad, and as a last-resort diaper or tissue.
Another (weaker) recommendation is that everyone should consider cloth wipes. Disposables can't match terrycloth's great texture and incredible strength. They also pack down smaller in the quantities you'll actually use. Even after switching to disposable diapers for the toddler phase, cloth wipes remain in our tech stack.
We keep a stable bowl of water to wet our cloth wipes, and a pile of diaper clips necessary for some forms of cloth diapers.
There is a primary diaper stack and a first-backup diaper stack. Keeping them separate means a mere glance across the room can trigger urgent terror and immediate re-supply. Our team likes this obvious visual cue, and use it as a pre-departing-the-house hook. Keeping two stacks also helps us separate diapers which require a cover from diapers which do not.
We also use hardware to signal re-supply: on encountering a near-shortage, we physically move specific items from the changing table to a central location like the front door or dining room table, making it impossible to forget to stock up.
The rightmost end of the surface is kept intentionally empty for miscellaneous rapid-access storage. Here one most often finds discarded but still-clean clothes, but it has other ad-hoc uses. It's important to leave room for the unexpected!
Not shown on the diagram are the string lights used as our minimal nighttime light source. Night lights are not for children, as I believed in my youth, but rather for the adults who attend to them. Christmas lights with a switch work well.
Also not shown is the off-site diaper backup. A prudent team always keeps multiple backups. Since our changing table was in the bedroom, our stash went in the bathroom.
Shortcomings
One drawback of our implementation is that baby clothes are stored behind swinging doors which open up precisely where my legs are while using the system. We also went with a bucket provider which requires manual instead of pedal authentication to access, which causes significant friction at runtime.
As mentioned above, the heat lamp was slow to start and helped us negligibly, though other teams have found it valuable.
— Dave Liepmann, 17 March 2023