== Running servers and Fred Brooks on transforming programs to products One of the seminal books on software engineering and project management is Fred Brooks' justly famous [[The Mythical Man-Month https://en.wikipedia.org/wiki/The_Mythical_Man-Month]]. One of the things that Brooks discusses in the book is the additional effort it takes to transform a program (that has been written) into a product (that can be sold). The modern open source world has its own equivalent of this transformation that many people experience; to make your program useful for other people it needs documentation, build instructions, and often generalization and more testing than you gave it in your own personal use. A while back I wrote an entry about how [[running servers and services well is not trivial RunningServersNotTrivial]], which is about exactly that. It has recently occurred to me that one part of this difficulty, and also how setting up and running servers often appears easy for non specialists, is another version of Fred Brooks' transformation from programs to products and the extra effort it takes. Just as it's easy to write a one off program for your own use, it's easy these days to set up a one off special server. But that's not the server equivalent of a *product*; it's the server equivalent of a program before it's been transformed into a product. To become a product (a production server), you need a whole raft of additional things (many of which I outlined in [[my entry RunningServersNotTrivial]]). Many programs can be transformed into products through incremental improvements and developments (writing documentation, for example). Unfortunately servers are often less malleable this way, and it may not be very easy (or even possible) to transform a casually set up server into a production grade server. Often you'll wind up rebuilding the server from scratch. The good news is that it's usually much easier (and faster) to build new versions of servers than it is to rewrite programs from scratch. I think that this can also provide a guide and a caution for when you should set up a casual server yourself. If all you need is the server equivalent of a one-off program, you can spin it up just as you would write that program. But watch out; just as one off programs not infrequently get drawn into (or pressed into) long term use, your 'one off' server may not be so temporary or unimportant after all. If it becomes a load bearing component of your environment, the initial quick approach will likely have left you with lingering problems.