400 likes | 490 Views
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-DOS First Windows version 1992/3 Now: C/C++
E N D
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 Systems Infrastructure Business Constraints
Forces at work … Users and Prospects Changing Domain Requirements Systems Infrastructure Business Constraints
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 … Changing Domain Requirements Users and Prospects Systems Infrastructure Changes Business Constraints
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 Systems Infrastructure Changes Business Constraints
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 Systems Infrastructure Business Constraints
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 Q1. How much did you spend? 4.56 raw data syntax & value checks variable 4.56 processed output
Patterns … as data cleaner Q1. How much did you spend? £4.56 raw data syntax & value checks variable ERROR processed output
Patterns … as data cleaner Q1. How much did you spend? £4.56 raw data syntactictransforms pattern 4.56 cleaned input syntax & value checks variable 4.56 processed output
Patterns … as data cleaner Q2. How many children do you have? three raw data syntactictransforms pattern 3 cleaned input syntax & value checks variable 3 processed output
Patterns … as sub-field prompt Q3. When did you arrive? raw data 25 / 01 / 2006 pattern day 25 matched input month 01 year 2006 variable Q3 Q3 25/01/2006 processed output
Patterns … as sub-field selector Q3. When did you arrive? raw data 25 / 01 / 2006 pattern day 25 matched input month 01 year 2006 variable Q3 Q3 month 01 processed output
Ongoing Development … • Domain-based extensibility • Patterns ... • Prototype-based object model ...
Class-based Object Model declare & assignproperties& methods axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } class Rows = Q2; Cols = Q10; ... instance assign properties
Class-based Object Model Programmer declare & assignproperties & methods axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } class User Rows = Q2; Cols = Q10; ... instance assign properties
Class-based Object Model Programmer declare & assignproperties & methods axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } class User Rows = Q2; Cols = Q10; ... instance assign properties
Class-based Object Model Programmer declare & assignproperties & methods axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } class User instance assign properties
Prototype-based Object Model class prototype instance
Prototype-based Object Model axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } declare & assignproperties & methods prototype num Weight=1; num Accumulate(cell) { cell=cell+weight; return cell } declare & assignproperties & methods prototype / instance
Prototype-based Object Model Programmer axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } declare & assignproperties & methods prototype User num Weight=1; num Accumulate(cell) { cell=cell+weight; return cell } declare & assignproperties & methods prototype / instance
Prototype-based Model Programmer axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } declare & assignproperties & methods prototype User num Weight=1; num Accumulate(cell) { cell=cell+weight; return cell } declare & assignproperties & methods prototype / instance
Prototype-based Model Programmer axis Rows; axis Cols; num Accumulate(cell) { cell = cell + 1; return cell } declare & assignproperties & methods prototype User-developer declare & assignproperties & methods prototype / instance
User prototype / instance declare & assignproperties & methods Prototype-based Object Model User-developer declare & assignproperties & methods prototype / instance
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
Evolution Intelligent Design and Evolution or Intelligent Design? Stephen Jenkins sjenkins@snapsurveys.com