Finishing <i>(i.e. shipping)</i> stuff is a pain.<p>At some point, we reach the part where the fun stuff is done. We've learned pretty much everything we can, from the exercise, and it's "90%" done.<p>That last 10%, however, is a <i>bear</i>. Many, many folks never bother with it.<p>In a lot of cases, that's fine. The main purpose was learning, and there's really not enough "market pull" to justify finishing the project.<p>If there is a requirement to see it through to completion (like, say, a contract, with your signature on it), then we need to complete that last 10%, even if it's boring.<p>There's a joke: <i>"90% of the project is completed in 10% of the time. 10% of the project is completed in 90% of the time."</i> (there are many variants, thereof).<p>Ever notice how, when a new building is going up, it appears to be "complete," in an astonishingly short time? Then, it's twice as long, before the doors open?<p>That's because making the exterior and structure is straightforward, and can be done by just about anyone. Framing, windows, doors, roofing, masonry, etc., are skills, but not extremely specialized.<p>The interior stuff, though, requires a <i>lot</i> of skill. You can't just bring in some half-trained hammer monkey. You need the experienced finish carpenters, and the expensive painters, etc. These folks are harder to schedule, and won't rush the job. Their work is what people will see, up close, every day, so it needs a lot of polish, and has to be robust.<p>Same with any product.<p>I'm writing an SDK, right now. It was probably 90% complete, last week, but I wrote a pretty beefy test harness for it, and I am now implementing a whole bunch of "live server" unit tests. I am finding bugs in my implementation (I always do), and I'm fixing them, as I go along. I'm also encountering the "little things," that I forgot to implement.<p>Once I have the unit tests all humming along to my satisfaction (I tend to write unit tests after the fact, for SDKs. I write about that here[0]), I'll flesh out the documentation.<p>Only then, when I can release the project as a standalone package, will I return to the main app, that is my initial consumer of the SDK, and I'll need to integrate it; replacing an older SDK (that I also wrote).<p>Lot of boring stuff, but it means that I don't have to worry about this very critical (and dicey) communication infrastructure, when working on the main app.<p>[0] <a href="https://littlegreenviper.com/blah-blah-blah/testing-harness-vs-unit/" rel="nofollow">https://littlegreenviper.com/blah-blah-blah/testing-harness-...</a>