[comp.lang.eiffel] Managing multi-programmer projects in OOP.

giddy@trl.oz.au (David Giddy) (01/17/91)

Hello fellow OOer's,

	I would like to generate some discussion on the subject of developing
object oriented systems with more than a single programmer working on the same
system.

	I would like to hear of others experiences in developing large systems
and how they divided work, defined interfaces and handled problems of ensuring
that a system was compilable while several people worked on various parts of
the system simultaneously.

	We are in the process of starting development of a significant sized 
system (around 10 staff years). We have chosen Eiffel as the development
environment for it's conceptual elegance, strict typing and good libraries. We
are in the process of system analysis and design and will be shortly in
a position
to start coding.

	Being large, we have broken the system into many clusters of classes and
have tried to keep the interactions between clusters to a minimum. The
question we
now face is how to divide work amongst programmers and how much specification
of clusters is necessary before initial prototyping can begin. This is the area
where I am most interested to hear others experiences.

	Out project team consists of around 7 programmers, two of whom are 
located in another state! This last constraint makes clean division of work
essential and is an area in which I am looking for ideas.

	I am looking forward to hearing the net's opinions on this area as I
don't believe it has been discussed much to date.

Regards,

David.

P.S: Our News system is being a bit slow at present (we are a dial up site), so
     I may not see your replies for upto six or seven days, so please be
patient
     for any response from me (Email is much quicker). 
______________________________________________________________________________
David Giddy,
Telecom Research Laboratories, P.O. Box 249, Clayton, VICTORIA 3168, AUSTRALIA
Voice: +61 3 541 6388	Fax: +61 3 543 1944   	      Email: d.giddy@trl.oz.au

paj@mrcu (Paul Johnson) (01/18/91)

David Giddy (d.giddy@trl.os.au) asked for experiences in multi-person
projects in OOP.

The year before last I worked on a project in C++ with two other
people.  It was the first time we had used C++ on anything more than
"Hello World" programs, although we were fluent in C and had used
module based languages as well.

I think the things we did right were:

- We divided the work into three broad areas.  Each person had one
  area and was responsible for the design and functionality of that
  area (mirroring the modular programming paradigm).

- Everyone helped design the general architecture.  This ensured that
  a) we got the benefit of three brains instead of one, and b)
  everyone understood how the system was supposed to work.

- We had frequent meetings to hash out details of the interfaces.
  This seemed to work better than a top-down, waterfall style of
  cluster design.

- We used SCCS.  On any kind of multi-person project this (or its
  cousin RCS) is invaluable.  It stops people editing the same file at
  the same time and it allows you to unwind from mistakes.  Eiffel
  does not support SCCS or RCS, so you will have to fix up shell
  scripts or (ugh) Makefiles instead.  Try and get this kind of
  substructure sorted out before you begin.

Given that you are so split up, you are going to have to ensure high
bandwidth communications between your 5 and your 2.  I assume you have
email between the sites.  Try and get multi-way phone conference
facilities and make it easy for anyone to set up or join a conference.
Look into setting up a private newsgroup as well: that might be
simpler than a mailing list.

I think you are going to have to set up some ground rules to ensure
consistency between your sites.  Probably some kind of semi-automatic
update propogation system will be needed.  Again, think about this and
sort it out first.  I think that this is probably more important than
detailed design documents (which we didn't have and didn't miss).  Of
course, we did not have the distribution problem.

Good luck, and let us know how you get on.

Paul.
-- 
Paul Johnson                               UUCP: <world>!mcvax!ukc!gec-mrc!paj
--------------------------------!-------------------------|-------------------
GEC-Marconi Research is not 	| Telex: 995016 GECRES G  | Tel: +44 245 73331
responsible for my opinions.	| Inet: paj@uk.co.gec-mrc | Fax: +44 245 75244

tma@osc.COM (Tim Atkins) (01/25/91)

I'll briefly throw my two cents in here.  The interesting and difficult
part of multi-programmer OOP is precisely the part that is not logically
divisible into independent projects.  I recommend placement of the
strongest design talents on the design of this common base of classes.
Those portions of the system that are independent can proceed by whatever
schedule and amount of up-front analysis/design is amenable.  All using
groups must have input as to what they need of the commonly used set
of abstractions though.  As in normal development, agreement as to inter-
face is the paramount consideration.  Once this has been agreed the actual
developers of this critical layer are much freer using OO to change the
actual architecture as long as the interface is preserved.

I have some difficulty believing that too much analysis is called for,
particularly in OOP.  Just enough to identify common problems and abstract
out the essential portions seems to be right.  To do this well places a 
high premium on more than one individual having a good working knowledge
of the entire design.  One such individual is crucial to the coherency
of the system.  Two or more are likely to make it a much cleaner design
as they will catch each other's oversights.  Perhaps the most difficult
part of OO is that it is much more essential than in more traditional 
approaches that ALL team members are aware of the classes and their methods
as only such awareness can drive the tightness of the design and the
achieving of maximum reuseability.  Such awareness must be tightly 
separated from issues of responsibility if the project is not to 
bog down in endless committee reviews.  

As a long time designer and implementer I am also highly aware of the
fact that a paper design is next to worthless as a specification compared
to at least a skeleton of working code.  The really subtle at design time
is glaringly obvious once a bit of code is actually written.  I would 
strongly recommend a technique of lots of early prototyping and an 
incremental development strategy.

- Tim Atkins

jguy@lilith.EBay.Sun.COM (Jeff Bone) (01/26/91)

Just a (LONG) random $0.02 comment:

An interesting example of a shared OOP environment can be found in
the game "MOO".  MOO is one of a family of games called "MUD", or
multi-user dimension --- "MOO" is an acronym for MUD object-oriented.


---------------------------------
MUD (and MOO) for the uninitiated
---------------------------------


MUDs resemble text adventure games with the exceptions that (a)
multiple users play and interact within the game world and (b) the
game world is usually extensible from within the game itself.  The
more sophisticated MUDs (MOO is currently state of the art) allow
you to program complex behaviors on the objects within the database.

The various different flavors of MUD allow for various levels of
programmability in various languages --- among them C-like languages,
Forth-like languages, Lisp-like languages...  MOO itself has a C-
like appearance on the surface, but is actually quite OO...

Additionally, MUDs have varying degrees of extensibility.  Some MUDs
are actually "meta MUDs" --- the server itself simply provides the
database engine and programming environment and the rest of the game
(including in some cases the input parser --- not to be confused
with the language parser) is implemented in the server language
itself.  MOO and Ubermud are examples of "meta MUDs".


-----------------------------------------
MOO as a multi-programmer OOP environment
-----------------------------------------


From the "Introduction to MOO" document by Stephen F. White, the
creator of MOO (the whole document is available via anonymous FTP
from belch.berkeley.edu as ~ftp/pub/moo/moo2.0.doc.ps...):
	
	"One of the most powerful features of MOO (and that from 
	which it derives its rather silly name), is the object-
	oriented programming metaphor known as inheritance.  
	Simply put, inheritance means that an object "inherits" 
	properties and functionality from another object.  For 
	example, a brown paper bag might inherit the verbs 'put
	in' and 'remove from' from a generic object "container".
	The "parent" of an object is the object from which
	it inherits functions (verbs)...

	"In MOO, there is no distinction between objects and 
	classes.  All classes are objects, and any object may 
	be instantiated to become a class.

	"Objects inherit properties and verbs from their 
	parents. ...  Verbs are the functions, or "methods" 
	(in o-o speak) which the object has.  They determine 
	what behaviour an object is capable of performing.  The 
	verbs in MOO are programmed in the MOO language ...

	"Thus, a player may create an object, give it some 
	properties and verbs which may be used to manipulate it, 
	and then leave it in a public place for others to peruse 
	or instantiate (make copies of).  The permissions on an 
	object determine who may instantiate what objects...

	"Since MOO keeps track of what objects are instances of 
	what other objects, you may also dynamically add properties 
	and verbs to existing objects.  For example, if you decide
	to add the verb 'smash' to your 'precious ming vase' object,
	all instances of that object will immediately inherit the 
	new functionality."


And so on... the MOO environment was designed expressely with the
multi-programmer concept in mind.

Note:  MOO is a game and not a software development environment per
se.


--------------------------------------------------
Neat!  Where do I find out more?  How do I do MOO?
--------------------------------------------------


The definitive site for MOO code, examples, and documentation is
belch.berkeley.edu.  There is also a variant version of MOO (the 
"lambda" version) available at belch with various functional and 
cosmetic differences from "original" MOO.

The MOO code is currently not in a stable release state --- it's a
tinkerer's toy right now.  Also, there are not yet any published,
"live" MOO sites though I know of at least one which is nearing
completion...  for information about the availability of live
MOO servers and other MUD topics, explore the archives on belch
and/or read the USENET group rec.games.mud...  Be forewarned:
there's a significant social aspect to MUDding and a whole subculture
has evolved, so most of the postings in r.g.m are rather obscure to
the novice and deal with non-technical issues.



Anyway hope this proves at least interesting to you all...  good luck
and let's hear any comments or observations any of you may have
about the technical aspects of MUDs/MOO and/or it's relevance to
OOP or other programming and systems issues in general.



Yrs,


--
--- jbone@Sun.COM ---------------------------------------------------
------------------------------------------------------ Jeff Bone  ---
                                                                   --



#include <std.disclaimer>

Note:  My work at Sun does not involve MUDs or MOO...  this is my own
thing, so to speak...