I've been taking a circuitous route with a side project: first just building an open source command-line tool that scratches my own itch, and then evaluating traction from there. If companies find the tool useful, I've been keeping in mind ways to build out a SaaS/enterprise version. Or if it doesn't get much traction, worst-case at least I have something that's useful to me!<p>The tool is called Skeema [1] and it allows you to manage relational database schemas as code -- a bridge between git (or hg, svn, etc) and SQL DDL. You can use it to export CREATE TABLE statements from a DB to a repo, and then auto-generate and run DDL based on changes to that repo. Currently it just targets MySQL (due to personal familiarity, and the historic complexity with schema changes there), but if it's successful I could envision porting it to other DBs.<p>The open source CLI is still in alpha, but getting very close to a first release candidate. I've spent 9 months of working 5 to 25 hours/week on it so far.<p>Some unexpected challenges:<p>* Even for entirely text-based command-line tools, building a nice polished interface takes a lot of time! My goal has been to make Skeema's CLI paradigms immediately intuitive to users of Git and MySQL, in terms of option-handling, subcommands, and config file format. Even little things like exit code values, and STDOUT vs STDERR for different types of output, matter a lot for building CLIs that are friendly to pipelines.<p>* None of the existing Golang CLI/config packages were the right fit. After a couple attempts at hacking/forking popular ones resulted in overly-awkward code, I scrapped all that and wrote my own. I should have done that from the start, but it felt like yak-shaving.<p>* I eschewed unit testing at first, going with the common side-project wisdom of only prioritizing functionality. But as the codebase grew, I really wished I had spent more time writing tests from the start. I suspect it would have been a net time-saver vs the manual ad hoc testing I was doing initially.<p>[1] <a href="http://github.com/skeema" rel="nofollow">http://github.com/skeema</a>