Deprecated: Function split() is deprecated in /var/www/seafelt-blog/wp-content/plugins/google-analytics-for-wordpress/googleanalytics.php on line 413
There are two ideas at the core of all our development here at seafelt:
- Our products have to be flexible
- Our products should have sensible defaults
Writing flexible code is tricky, but it’s not that much trickier than writing inflexible code. The trick is to notice when you’re doing something specific and to make it more generic, but not too much. It’s the judgement call that makes it tricky. Here’s an example from seafelt Reporter:
We wrote originally Reporter to be able to get information from a PostgreSQL database, and do draw charts of any information we passed it, or to draw tables. We mostly assumed that we’d only be reporting on seafelt Performance Manager data, which had a specific structure. But we also figured that you might want to have many instances of SPM running, each monitoring different equipment. We couldn’t assume a single database, so we built the code to handle multiple databases.
And then a colleague of ours asked if he’d be able to report on some different data, that also happened to be in a PostgreSQL database. I had a think about it, and aside from a couple of hardcoded assumptions on one of the forms, I figured “umm, yeah, actually that will probably work.” 10 minutes later, we had a set of reports on a dataset that had nothing at all to do with seafelt Performance Manager. In fact, because of the way we’d written the code, you could report on anything that had a Zope Database Adapter. And thanks to SQLRelay, that meant any database that could speak ODBC… which is basically all of them.
We want you to be able to use our products in ways we haven’t thought of, to solve problems we haven’t thought of. Solving your problems is the whole point, after all, right?
A potential downside of all this flexibility is that you can be spoiled for choice. You’re standing in the supermarket wondering what kind of bread to buy. “Should I buy wholegrain, 5 grain, 9 grain, nuts and seeds, fibre-enhanced, healthy heart, traditional, traditional rye, rye and wholegrain…” If there are a lot of options, and no clues as to what you should choose, you’ll be paralysed by indecision.
We try to make it easy for you by making some informed choices on your behalf. We build in sensible defaults based on the way most people use our products, or what we think is the best way to solve a problem most of the time. But we don’t stop there.
You’ve probably encountered a program that is so helpful that it won’t let you do what you know you want to do. It’s permantly in dummy mode, and assumes it always knows better than you. I personally find this incredibly frustrating. Sure, helpful hints are great the first few times when you’re just learning how to do something, but after you’ve got some skill with the tool, you want it to get out of your way so you can complete the task you’re attempting to perform.
That’s our goal. We want you to be able to complete your task as fast as possible. To begin with, you might need some training wheels, but once you’re starting to build up speed, you need to be able to take off the training wheels and crank it up. That’s why we always have an ‘expert override’, so if you really know what you’re doing, you can do it.
So what do you think? Do we have our priorities right? Or do you have other suggestions?