Software Development: Process & Features
ongoing conversation: with stakeholders; always in the loop, we can twiddle the bits as we go along, reorient, reprioritize, collect and act on feedback
iterative development: start with blank slate, add feature, tweak, software Always Works and Does Something Useful, and we grow it organically
use Software-as-a-Service: (examples: Gmail, Google Docs, Basecamp; benefits: pay-as-you-go and externally hosted, with no upfront costs, very fast signup, no capital investment costs, much reduced internal IT staffing requirements, and easy, usually-free upgrades)
use pre-existing components: so don't reinvent the wheel (OS, database, editors, tools, servers, browsers, multimedia apps, etc.)
use Open Source software: (examples: Linux, Apache, Django; benefits: because you have the source code you can study/fix/customize it directly, not held hostage to a vendor, no proprietary code lock-in making it difficult/costly to port away, widespread community support, and almost always free under some license terms)
utility computing: (examples: Amazon Web Services, Google App Engine; benefits: metered billing similar to water or electricity which charges you only for the resources used (cpu, memory, disk, network), sometimes cheaper at small traffic loads (GAE yes, AWS maybe no), but much easier and more affordable to scale up to handle higher visitor traffic (from incremental growth) especially for spikes (such as from splash-like publicity events) -- you want your site and systems to be available and responsive when they're most needed and can make the biggest impression, positive or negative, on a large amount of people)
use concise, high-level, rapid-development-friendly programming languages: like Python or Ruby, rather than verbose compiled languages like Java, or low-level unfriendly languages like C; results in less dev time to add features or fix bugs, faster time-to-market; Python will be the default language considered for any custom programming needed, but the actual language(s) used may vary by project, whatever make the most sense for a project: we're idealistic but pragmatic, not dogmatic
sprints: bundling up dev work into batches performed in sprints, to be efficient time-wise and dollar-wise (developers should spend as much time in "The Zone" as possible, with minimized interruption, in order to maximize productivity and minimize bugs; The Zone is software development lingo for an intellectual state where everything the developer needs to do is fresh in their short-term memory, including a clear understanding of the current codebase, what tasks need to be done, and what the dependencies and possible interactions are between the code they are dealing with, and other code above or below it, or downstream from it; sometimes also described as a 'code trance' or thinking like the machine)
automation: aggressive automation of otherwise manual tasks (Python & shell scripts); examples: scripts, tools, templates, builds, tests, deploys, monitoring production & taking corrective action
version control: git (by default, though I can use a different system instead, or in addition, as needed)
frequent periodic automatic backups: cron and Time Machine
fast, secure online delivery: DropBox (by default, though we can use another means if desired)
home