Here is how I handle this at my company. LibreS3 is a product written in pure OCaml [1], using as a backend a cluster running Skylable SX (written in C)[2]:<p>- QA: unit tests written using oUnit, and integration tests by using linked Docker containers.<p>- builds&#x2F;releases: opam + packages written for Debian and Fedora based distributions. The packages provided on our website are built inside Docker just like all the other packages. Internal beta packages are uploaded to a separate volume&#x2F;bucket and served via LibreS3 itself.<p>- Pain points: building a package compliant with packaging policy is more complicated because I usually need newer versions, or OCaml libraries that are not yet packaged.
I planned to use opam to generate templates for LibreS3+dependencies but was waiting for the C backend to get packaged upstream first.
My slides from last year list a few more problems that I encountered during development but they aren&#x27;t an issue currently [4].<p>The main advantages of OCaml for me are:
 - the availability of high-level libraries that makes implementing HTTP APIs simpler (Ocsigen, Cryptokit, atdgen, etc.)<p>- event-driven&#x2F;non-blocking architecture to support large number of concurrent users (Lwt)<p>- native binaries and static type system<p>- not having to look for certain bugs in my code like uninitialized variables, NULL dereferences, memory leaks or memory corruption bugs; which (used to) take up a significant amount of time when developing applications in C (although tooling on C side have improved with valgrind, clang -fsanitize= and Coverity).<p>That doesn&#x27;t mean that code written in OCaml or the libraries that I use doesn&#x27;t have bugs, I track them down
and provide patches just as I would for a C library.
Although perhaps writing code in OCaml has made me somewhat overconfident in my code, and I find bugs in other people&#x27;s code more easier than in mine even if I&#x27;m not looking for them.<p>[1] <a href="http:&#x2F;&#x2F;gitweb.skylable.com&#x2F;gitweb&#x2F;?p=libres3.git;a=summary" rel="nofollow">http:&#x2F;&#x2F;gitweb.skylable.com&#x2F;gitweb&#x2F;?p=libres3.git;a=summary</a> <a href="http:&#x2F;&#x2F;www.skylable.com&#x2F;products&#x2F;libres3" rel="nofollow">http:&#x2F;&#x2F;www.skylable.com&#x2F;products&#x2F;libres3</a><p>[2] <a href="http:&#x2F;&#x2F;gitweb.skylable.com&#x2F;gitweb&#x2F;?p=libres3.git;a=tree;f=libres3&#x2F;testsuite&#x2F;docker" rel="nofollow">http:&#x2F;&#x2F;gitweb.skylable.com&#x2F;gitweb&#x2F;?p=libres3.git;a=tree;f=li...</a><p>[3] <a href="http:&#x2F;&#x2F;www.skylable.com&#x2F;products&#x2F;sx" rel="nofollow">http:&#x2F;&#x2F;www.skylable.com&#x2F;products&#x2F;sx</a><p>[4] <a href="https:&#x2F;&#x2F;ocaml.org&#x2F;meetings&#x2F;ocaml&#x2F;2014&#x2F;ocaml2014_13_slides.pdf" rel="nofollow">https:&#x2F;&#x2F;ocaml.org&#x2F;meetings&#x2F;ocaml&#x2F;2014&#x2F;ocaml2014_13_slides.pd...</a>