Tony ([info]quikchange) wrote,
@ 2007-04-22 08:34:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Current mood: optimistic
Current music:Gravity - Vienna Teng
Entry tags:geeky

Zoometry and software development
There are many aspects of software design that may be considered when creating a new application, library or communication standard (e.g. API, data storage format, wire protocol): scalability, flexibility, portability, usability, extensibility, localizability, consistency, measurability, interoperability, security, reliability, availability, maintainability, efficiency, etc. In theory it would be wonderful to account for every one of these in the original design but in practice we are constrained by market pressures and resource limitations. This makes it necessary to prioritize certain aspects in the initial design and iteratively focus on others during subsequent refactoring. I think that a good approach would be to focus on a very small number of aspects for each major release, adding functionality in minor releases (e.g. 1.1) and fixing outstanding correctness issues in revisions (e.g. 1.0.1). [My personal inclination is also to prioritize fixing correctness issues over functionality additions and design improvements.]

This leaves open the question of which aspects are best suited to being prioritized for the initial release. The important thing to realize here is that, for software that is not merely a clone of other mature software that already serves the needs of a particular domain, it is very likely that the future usage patterns cannot be accurately predicted. A flexible architecture is therefore of paramount importance. Designing for change should take top priority so that future changes can be made quickly in anticipation of user needs and market direction or in reaction to unexpected events. In keeping with this strategy, it is also a good idea to design the software to be easily upgradeable by its users.

The second most important aspect for nascent software is determined by the need for users. Software that isn't being used is no better than software that was never written. If you want your software to be used then you should take user needs and biases into account when designing it. Naturally, this means identifying your target user base, although you should be open to usage beyond that initial target. When selecting an initial target user base, it is a good idea to focus on a narrow set of users with whom you have some existing familiarity. Once you pick a user base, you should observe how they go about their lives and find a problem they regularly encounter that is worth solving and for which you have an idea for a better solution than they one they currently employ. Make careful notes of the constraints they face, the ease with which their current solution is applied and the utility it provides. This is your competition.



(Post a new comment)


[info]thewizard
2007-04-22 05:43 pm UTC (link)
My last co-op term used to do it's versioning this way, have the basic major functionality in dot-oh releases and slowly activate/complete minor features in dot-x's. I thought it was kind of funny, but eventually realized that, like every weird thing they did, it was quite a nice idea.

Man ... well-run software dev companies are a beautiful thing.

(Reply to this)


[info]kinthelt
2007-04-23 01:14 am UTC (link)
Since I'm a one-man demolition crew, I get to choose how we set version numbers.

Fortunately, our app is delivered via Java Web Start. As such, everybody automatically runs the latest version. I've never updated the version number even though there have been numerous bug fixes, and numerous new features.

(Reply to this)(Thread)


[info]quikchange
2007-04-23 01:19 am UTC (link)
You raise a good point. In cases where software does not require explicit user action to be upgraded (such as with web-apps or Java WebStart), publicly visible version numbers are not useful as we can always assume that people are using the latest production code. And for internal change tracking, I assume that you simply rely on source control.

(Reply to this)(Parent)(Thread)


[info]kinthelt
2007-04-23 05:02 am UTC (link)
Yes. I made sure the first thing I did when I took control of the source code was to place it into CVS and keep it up to date. You never know when a second developer will start. And the ability to go back in time to see what has changed (when a bug is introduced, for example) is priceless.

I know CVS is considered antiquated by some, and argue that I should be using Subversion. So far, I have found no compelling reason for me to use it instead of CVS in my particular case.

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…