evolution or intelligent design? an objective view of software development stephen jenkins
TRANSCRIPT
Evolution or Intelligent Design?
an objective view of software development
Stephen Jenkins
In the beginning …
Snap prototyped in 1980 First commercial version in 1981 MS-Basic under CP/M
Rewritten 1986/7 in C under MS-DOSFirst Windows version 1992/3
Now: C/C++ Utilities in VB, online scripting in Python
Snap today … multi-mode, multi-language questionnaires paper, scanning, web, pda, tablet, kiosk tables, charts, weights, filters, scores descriptive stats, factor & cluster analysis online management & real-time analysis
> 20,000 active users > 500,000 web respondents/month active forum with ~600 registered
Snap users …
Snap user profile:- MR function in commercial organisation- Consultation in government / education- Smaller research agencies
Some full-time, many stop/start
Snap is a tool to get the job done
Forces at work …
Users and Prospects
Changing Domain Requirements
Business Constraints
Systems Infrastructure
Forces at work …
Users and Prospects
Changing Domain Requirements
Business Constraints
Systems Infrastructure
Users and Prospects …
Not “programmers”
Snap treated more like a Word Processor than a Database system
Snap used as a guide and assistant
Sales demos are typically to new users
Forces at work …
Users and Prospects
Changing Domain Requirements
Business Constraints
Systems Infrastructure
Changes
Changing Domain Requirements …
Multi-mode questionnaires- more respondent self-completion
More re-use of existing data- database links- other survey systems (Triple-s)
More coarse fragmentation- more “standardisation”- but in disparate areas
Forces at work …
Users and Prospects
Changing Domain Requirements
Business Constraints
Systems Infrastructure
Changes
Systems Infrastructure …
Systems Configuration- Stand-alone desktop- LAN / WAN -connected desktop- Browser model
Memory / media etc.48k - 2Gb RAM (x42,000)80k - 100Gb disk (x1,250,000)
Systems Infrastructure …
Language choice- Snap in C/C++, VB, Python- ?PL-1? / ?Pascal? / ?Ada?- very expensive to rewrite later
Avoid big black-box components- better control of update schedules- better control of licensing models
Forces at work …
Users and Prospects
Changing Domain Requirements
Business Constraints
Systems Infrastructure
Changes
Business Constraints …
Commercial model- Standard package / optional modules- Desktop / server based- Perpetual licence- Free support & updates for 1 year- Optional annual support & updates
Updates every 12-18 months
Developers …
“Ownership” of specific areas- Agreed macro-design- Do their own micro-designs
Systems / language expertise- Language and/or system focus
Dabbled in eXtreme Programming- pair-programming
Architectural Design
Users and Prospects
Domain Requirements
Business Constraints
Systems Infrastructure
Architecture …
Single C/C++ program- optional modules turned on- fewer option incompatibility issues- helps consistent, holistic view
No “special versions” etc.
Build VB apps to get features to market quickly (“SurveyPlus”)
Architecture …
Object-oriented- Questions, Styles, Variables, Tables …- No overall navigable DOM- No user-accessible API
Files / persistence- Metadata file (object streams)- Raw data file (fixed-length records)- Processed data file (response streams)
Abstract for re-use …
Filter expressions- tables, browse data, derive categories routing preconditions
Text substitution- answers from previous question(s)- headers, footers and report titles- dynamic multi-language
Ongoing Development …
Domain-based extensibility
Patterns ...
Patterns … as data cleaner
variable
raw data
processed output
syntax & value checks
Q1. How much did you spend?
4.56
4.56
Patterns … as data cleaner
variable
raw data
processed output
syntax & value checks
Q1. How much did you spend?
£4.56
ERROR
Patterns … as data cleaner
variable
raw data
processed output
pattern
cleaned input
Q1. How much did you spend?
£4.56
4.56
4.56
syntactictransforms
syntax & value checks
Patterns … as data cleaner
variable
raw data
processed output
pattern
cleaned input
Q2. How many children do you have?
three
3
3
syntactictransforms
syntax & value checks
Patterns … as sub-field prompt
variable
raw data
processed output
patternmatched input
Q3. When did you arrive?
2006
25/01/2006
daymonthyear
Q3
0125
Q3
20060125 / /
Patterns … as sub-field selector
variable
raw data
processed output
patternmatched input
Q3. When did you arrive?
2006
daymonthyear
Q3
0125
20060125 / /
01Q3 month
Ongoing Development …
Domain-based extensibility
Patterns ...
Prototype-based object model ...
Class-based Object Model
class
instance
declare & assignproperties& methods
assign properties
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
Rows = Q2;Cols = Q10;...
User Programmer
Class-based Object Model
class
instance
declare & assignproperties &
methods
assign properties
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
Rows = Q2;Cols = Q10;...
User Programmer
Class-based Object Model
class
instance
declare & assignproperties &
methods
assign properties
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
Rows = Q2;Cols = Q10;...
Build Table
Q2
Q10
Rows
Cols
Ok
Cancel
User Programmer
Class-based Object Model
class
instance
declare & assignproperties &
methods
assign properties
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
Build Table
Q2
Q10
Rows
Cols
Ok
Cancel
Prototype-based Object Model
class
instance
prototype
Prototype-based Object Model
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
prototype
prototype / instance
num Weight=1;
num Accumulate(cell){ cell=cell+weight; return cell}
declare & assignproperties &
methods
declare & assignproperties &
methods
Prototype-based Object Model
prototype
declare & assignproperties &
methods
prototype / instance
declare & assignproperties &
methods
User Programmer
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
num Weight=1;
num Accumulate(cell){ cell=cell+weight; return cell}
Prototype-based Model
prototype
declare & assignproperties &
methods
prototype / instance
declare & assignproperties &
methods
User Programmer
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
num Weight=1;
num Accumulate(cell){ cell=cell+weight; return cell}
My Table
Rows
Cols
Ok
Cancel
1Weight
cell=cell+WeightAccumulate
Prototype-based Model
prototype
declare & assignproperties &
methods
prototype / instance
declare & assignproperties &
methods
User-developer Programmer
axis Rows;axis Cols;
num Accumulate(cell){ cell = cell + 1; return cell}
My Table
Rows
Cols
Ok
Cancel
1Weight
cell=cell+WeightAccumulate
User-developer
Prototype-based Object Model
declare & assignproperties &
methods
prototype / instance
My Table
Rows
Cols
Ok
Cancel
1Weight
cell=cell+WeightAccumulate
Userdeclare & assign
properties & methods
prototype / instance
Build MyTable
Q2
Q10
Rows
Cols
Ok
Cancel
RespWtWeight
Ongoing Development …
Domain-based extensibility
Patterns ...
Prototype-based object model ...
Core wholly driven by metadata
Snap development philosophy …
Know & understand intended users
Allow users to work in their domain
Don’t rely solely on software
Plan for evolution
Stephen [email protected]
Intelligent Design?Evolution orEvolution and Intelligent Design