๐—ช๐—ต๐—ฎ๐˜ ๐—ฃ๐—ฟ๐—ผ๐—ฑ๐˜‚๐—ฐ๐˜๐—ถ๐—ผ๐—ป-๐—ฅ๐—ฒ๐—ฎ๐—ฑ๐˜† ๐— ๐—ฒ๐—ฎ๐—ป๐˜€ ๐—ณ๐—ผ๐—ฟ ๐—›๐—ฒ๐—ฎ๐—น๐˜๐—ต๐—ฐ๐—ฎ๐—ฟ๐—ฒ ๐—ฆ๐—ผ๐—ณ๐˜๐˜„๐—ฎ๐—ฟ๐—ฒ

A small bug in most apps causes an inconvenience. In healthcare software, a bug costs lives.

We audited our systems to find what makes software safe for clinical use. Here are the lessons we learned.

  1. Use medical standards, not opinions. Our early vital-sign alerts used custom ranges. We realized custom ranges are dangerous. We moved all thresholds to the NEWS2 standard. Do not invent your own constants in a regulated field. Use established medical scores.

  2. Fix your time logic. We used UTC for daily reports and billing. This caused issues with local facility reporting. We moved all systems to roll over at the local midnight of each facility. You must account for Daylight Saving Time changes.

  3. Let the database enforce truth. Two requests might try to admit the same patient to one bed at the same millisecond. Application code often fails to catch this race condition. We added a partial unique index in Postgres. This allows the database to reject the second write. Application guards provide error messages. The database provides truth.

  4. Test for security failures. We performed adversarial audits. We logged in as one user role to try and read data from another. If a user tries to access data they do not own, the system should return a 404 error instead of a 403 error. This prevents attackers from knowing a record exists.

None of these technical fixes make for a good marketing screenshot. We prefer to be slow and correct rather than fast and sorry.

We are building BioMedixAI in public. We will share more notes as we progress.

Source: https://dev.to/nazmulhd10/what-production-ready-actually-means-for-healthcare-software-2ei3