Final report: SchemeStation

Final report: SchemeStation
SchemeStation documentation


Finally it came the day
to stop, to finish, and then look back,
to evaluate the work of mine.

I did walk a long, long way,
months and months I did hack,
but now, look, how does it shine!


1 Summary

Here is a short summary of this document.

SCHEMESTATION is a simulator for an experimental distributed operating system. The main features are transparent migration and inherent security. This simulator has implemented many concepts that will be used in the future operating systems.

The SCHEMESTATION project, spanning over eight months, moved forward like a clockwork; there was constant progress throughout the project with no bigger difficulties. The overall development process was highly parallel, thanks to the CVS configuration management software.

The project was a success. The fact that we were able to fulfill all the requirements set to the project confirms this.

The work was done following a two-round spiral development model instead of the pure waterfall from the course's template. This introduced some difficulties, but it was the key to our success. Due to the lack of human resources (we had only four team members) we minimized the project management bureaucracy.

The simulator could be used as a model for a "real" implementation on the top of bare hardware. Also, Just-In-Time (JIT) -bytecode compiler in addition to optimizing Scheme-to-bytecode compiler could enhance the performance of the system dramatically.

We had funding for a 1200-hour project; we consumed 1228 hours, which can be regarded as nothing short of a miracle, considering that we produced over 110.000 lines of code and documentation.

Overall, this course is definitely one of the most useful courses that are available for CS students at HUT, even though we "overenjoyed" it a bit.


2 Introduction

2.1 Objective

The initial objective of the SCHEMESTATION project was (1) to evaluate the SCHEMESTATION concept via the means of implementing a prototype; (2) to research the agent based programming paradigm as the basis for development of modern operating systems, and (3) to establish a system on which students could experiment on distributed programming using the Scheme programming language.

2.2 SchemeStation Operating System Concept

The basis for this project was the SCHEMESTATION operating system concept defined in [Operating system specification]. In practice, the project involved implementing a working and functional simulation of the system on the top of a Unixtm system.

2.3 The Project Itself

The initial objectives of the project did not involve any commercial means, and one could not expect this project to yield any completed commercial product. While this kind of smallish and humble project involving basic reseach might appear useless, we shall take the opportunity to compare our concept to some related projects.

It seems clear that the future of the operating systems will exhibit highly distributed computing, fault tolerance, location independence, and other natural needs that the present operating systems fail to satisfy.

Most of the current research projects seem to have taken the approach that computers merely provide services --- computing power, data storage, peripherals --- that the users can access without knowing for example in what exact location the computation takes place or the data gets stored. In other words, a single operating system controls perhaps several computers. This is what is meant by location independence and distributed computing. An advanced operating system can balance usage of the resources, so that all of the resources get used nearly optimally. This is often referred to as load balancing.

In the extreme, this kind of a model implies that the units of execution (traditionally a.k.a. processes --- agents in the SCHEMESTATION concept) and other data collections have no direct connection with the underlying platform whatsoever. Instead, the operating system may move them freely from one location to another. This may happen for example when the system's resources are inequally burdened. The moved object can be ignorant of its location and thereby about the movement.

2.4 Related work

We take as an example an interesting operating system research project from the Microsoft Corporation called Millennium.

According to the document Microsoft has published in the WWW, the status of Millennium is that the development team has merely outlined the concept for now. They have loosely described the requirements they have set on the forthcoming system. While the specifications published are not nearly as detailed as ours, it can already be concluded that many of the design choices are similar.

The major goals the Millennium team has established can be summarized to be

For those mentioned we have already implemented: seamless distribution (based on transparent migration), worldwide scalability, self-tunability. Also, our simulation provides an interface for the sophisticated security Scheme the SCHEMESTATION operating system concept introduces, and implements part of it. It was out of the scope of this project to explore the self-configuration, fault tolerance and resource controlling issues, partly due to the the lack of resources.

It has been a pleasure to work on such a sophisticated concept. Our project was not about just another standard project on web tools and providing "added value" for the customer through MS Back Office products and/or Lotus Notes.

It is exciting to think that these kind of ideas will be used in the mainstream operating systems within near future (five to ten years). It is left as an excercise to the reader to think how many of the hot web products of today will still be used then.

3 Project progress

As an overall view of the project progress, it can be stated that the project moved towards its goal from start to finish, without ever looking back, not to mention stopping. That could be used as the frame of reference when considering the difficulties and successes we experienced on the way to the final success.

3.1 Mission: Impossible

When the requirements of the project were considered, the inevitable truth of the amount of work required to complete the project came up. This was by far the biggest risk factor in the project: how could we do enough work to come up with all the pieces and then glue them together? It was decided then, that the only solution to this problem would be to try to do as much "real work" in the beginning of the project as possible. This was a very good decision! By delaying part of the specification and design of the upper layers while implementing the lower layers the project justified itself. We used extensive scheduling (see Project plan - SchemeStation) to the smallest detail to make sure of the continuous progress, and this proved to be a good solution when the time was a limited resource. By December 1997 we had a working Scheme programming environment, virtual machine, heap and networking co-operating. As a proof for that the project could be finished, this had a significant impact on the overall work morale.

3.2 Scheduling

We used internal two-round scheduling (spiral model, with two rounds) with miniature milestones (the course's phases restricted this a bit, but on the other hand provided additional milestones). The first round consisted of the lower layers of the system and this work was done during the first three phases of the course. The second round of the spiral consisted of the upper layers of the system (primarily Scheme-oriented coding after the infrastructure was done). Within a spiral round we did all the conventional phases of a project: specification, design, implementation and testing. This worked well, in spite of the fact that the course's template does not suite too well to this approach (it was clear that we could not get the message of using this methodology through to the project's management group, even though we mentioned it many times).

3.3 Lack Of Client Presence

Due to the nature of this project, a research simulator for something not very well defined beforehand, there was a problem of no one controlling the project from the outside. There were few times when we could have used some encouragement from someone who could have seen where we were, instead of everyone suspecting if we were able to deliver anything at all (or speculating what was the "thing" that we were doing). But this was also our strength, as we could focus on the problems our own way, and make independent decisions (of course, with major issues we had meetings with our client and supervisor). The fact that there was little confidence in our abilities did increase the will to demonstrate that we knew what we were doing.

3.4 The Power Of Motivation

This project did demonstrate the fact that where there is vision, enthusiasm, people that are willing to work for fame and glory, and the people form a working team, there is the possibility of creating something that cannot be done otherwise with similar resources. We think that this project belongs to this category, and we are proud of what we have achieved.

3.5 Progress Reports

The progress reports give detailed information about each phase, with the perspective of the situation at that particular moment.

  1. Project Progress Report - Phase PS
  2. Project Progress Report - Phase MA
  3. Project Progress Report - Phase SU (design)
  4. Project Progress Report for the Prototype I Phase
  5. Project Progress Report for the Prototype II Phase
  6. Project Progress Report for the Delivery Phase

4 The Results

We will now examine the results of the project in view of the project requirements that are found in Project requirements specification.

4.1 Functionality

Project requirements specification defined eleven functionality requirements.

  1. It can be run in a supported UNIX environment.

    This requirement has been met.

  2. It can be used to simulate multiple domains and the communications between them. Some objectives are to be able to simulate communication faults easily and to observe the amount of data transferred between distinct domains.

    There exist two separate applications that implement a network simulator and a domain simulator. The network simulator is capable of monitoring amounts of data transferred. Network topology can be changed interactively.

  3. It is possible to observe the internal workings of a domain to some extent (system debugging).

    There is an extensive set of debug flags that can be toggled independently.

  4. Domains are able to run multiple actors that execute byte code instructions.

    This is the fundamental functionality of the system.

  5. The memory model for individual actors is a list-structured heap. Every actor has one heap that is read and modified by the byte code program.

    This requirement has been met.

  6. Actors are able to send and receive messages.

    This requirement has been met.

  7. There is simulation for some I/O facilities, at least for a text-based terminal, in order for the user(s) to be able to communicate with the system.

    There exists a SSDOC text terminal, with color, that can be used to interact with a SSDOC domain.

  8. A cross-compiler exists for generating byte code programs from a dialect of Scheme.

    This requirement has been met.

  9. The notions of trust relationships and cryptographic authentication are considered and support for them exists.

    This requirement has been met, though support is quite rudimentary. See Notes on Implementing the SchemeStation Security Paradigm in the SchemeStation Simulator.

  10. Actors are persistent over multiple simulator executions as long as the simulator is started and terminated using procedures defined by the system designers.

    This requirement has been met; whole domains are persistent.

  11. Some example applications are developed in order to demonstrate system use. These applications could include:

    • some kind of a shell
    • electronic mail system between SCHEMESTATION users
    • distributed games
    • compiler running in the SCHEMESTATION system itself

    This requirement has been met. Some example applications exist, including shell and some games. However, the current cross-compiler is too big to be ported into the simulator using only a reasonable amount of effort, and besides, it would run quite slow.

4.2 Non-functional Requirements

The system also meets the non-functional requirements specified in Project requirements specification. Hundreds of actors can be run in one domain and tens of communicating domains can be run concurrently. Naturally, the performance of the underlying system is reflected in the performance of the simulator. Documentation has been also provided as required. Failure situations are handled correctly. Especially user programs that execute illegal instruction sequences are immediately terminated. The system is portable and has been successfully ported to a 64-bit Alpha/OSF architecture from a 32-bit Intel/Linux platform.

Extensive usability tests have not been performed, except that we have had one second-year CS student use the system for a couple of days. The following are some quotes from her:

Using the system does not seem to be difficult. It should be possible to learn to use it quite fast. Starting new agents and communicating with them has "succeeded" quite well. Naturally, I had difficulties at the beginning, but many things became clear just after the beginning.

It has been very interesting to use SCHEMESTATION, because it is something you don't see every day... So I cannot say it's hard to use, though it requires some time to get familiar with. But then it is fun!

The environment seems to be useful for several purposes. Scientific research --- why not. For an average student the environment is probably really nice if one wants an own sand-box where you can test all kinds of things, and you can learn quite a lot from that... I see no reasons why this system could not be used in some way for education purposes.

I think also that the project and the system can act as inspiration for others!

4.3 Quality

The quality plan (in Project requirements specification) gave the quality requirements that the project should met. The result system is able to fulfill all those requirements. The original quality plan was criticized of being a bit ambiguous --- but it is very difficult to state requirements for an operating system simulator. Here are the statements from Project requirements specification:

  1. That the implementation of the system is easily understandable for computer scientists, and for at least some computer science students.

    This requirement is assumedly met, though giving an exact measure is hard. There is an enforced coding policy followed throughout the system. The code is highly modularized; each code module consists of an implementation of a subsystem that cannot be considered too complex. The code is commented where necessary and documented.

  2. That the system is able to simulate actors running asynchronously, and that a user is able to observe the results of this simulation.

    This requirement has been certainly met. (This is the most visible part of the system.)

  3. That programming new actors and incorporating them into the system is moderately easy.

    This requirement has been met. This is, however, something quite hard to measure; we approached this from the perspective of comparing some of our agent implementations to similar programs in other environments, and found out that this statement holds. The only real complexity comes from the fact that we did not have time to implement a compiler (and an editor) inside the SchemeStation; using the cross-compiler and interacting with the object server is required.

  4. That the performance of the system is on a level that the system is practical to use.

    This requirement has been met. Particularly, on an Alpha platform it is very convenient to run multiple interactive agents interacting with a rudimentary windowing system, written completely in Scheme.

    It must be noted that the term "practical" is somewhat arbitrary, especially in case of a simulator environment. The barebone VM system is quite fast, but the message passing schema did introduce a somewhat unexpected slowness to the system, as did the output of our compiler (not too optimised bytecode). The system was developed on a standard PC with Intel P166 and 64MB of memory. This hardware configuration should be considered as the lowest-level system, as it yields a usable SchemeStation. As the Digital Unix port was completed, it was observed that the 433MHz Digital Alpha workstation ran the SchemeStation very well, with almost 10-fold increase in performance (due to the internal 64-bit architecture of both the SchemeStation and the Alpha processor).

  5. That the system design is well documented.

    This requirement has been met via extensive documentation. All project members participated in the documentation process and all documents have been cross-checked between project members. We have been able to communicate the system design to the client.

  6. That the system is portable to major UNIX systems.

    This requirement has been met; see above.

  7. That the system has some value as an educational tool.

    Naturally, as the project is just being finished, experience about educational use is not yet available. We believe that this quality requirement has been met, however.

  8. That during the project most people have fun for most of the time.

    This requirement was met, given a particular interpretation for the phrase "most".

4.4 Higher-level results

A higher-level aim of the project was to examine SCHEMESTATION concept as defined e.g. in Operating system specification. The following observations were made.

The concept itself works pretty well and could be very suitable as a basis of a real operating system. However, the current design has at least two problems that need to be addressed in future revisions.

The first problem is that every agent has only one address and that knowing an agent address is equal to having all access rights to the corresponding agent. This is not normally a problem due to the notion of using proxies. However, an anomalic situation follows when one considers messages that are used to request an agent to terminate. Naturally, also proxies need to respond to such messages, because otherwise proxies cannot be removed. But, if a proxy corresponds to a public service, then everyone is able to delete the proxy implementing the service, and thus deny the service from all users! This can be circumvented easily by using some secret information to identify "privileged" messages, but this is not necessary the best solution. Another way could be to have exactly two ports, a "standard" port and a "privileged" port, though it is hard to see why one could not then have actually more than two ports like in MACH and forget the proxies altogether.

The second problem is related to the semantics of message passing. In Operating system specification it is specified that the mutual ordering of messages sent by one agent to one address is preserved. This semantics does not work well with idea of dynamically changed the routes messages travel from one domain to another via address indirections, because changes in the indirections can break the ordering of messages. The cleanest and best solution is to remove the order-preserving semantics, which is a bit ad hoc anyway.

5 Project working methods

5.1 Project key issues

In the beginning of the project we adopted a ten-issue list that a good, successful project should follow.

The list introduces things that one should remember throughout the project -- it is not enough just to think them in the beginning.

Below, we have listed the issues. We have tried to explain how we understand the issue, and how we have managed to fullfil it in this project.

5.1.1 Objective

The objective is the reason why the project should be initiated in the first place. The objective of a project is not to implement an exciting system that can do a number of things. The objective of a system is to implement a system that has some kind of value; addresses a problem of a client --- in a word, does a task.

This was one of the most difficult issues to cherish. We had no commercial objectives. It was unclear (and still is) whether anybody will actually use this OS simulation for anything. The client appeared to have regrettably little interest in our project not only in the beginning of project, but throughout the project --- even though he had personally agreed to act as a client.

The intention was to provide something to the basic research of operating systems, distributed programming and the agent paradigm. Also, we hoped that the end product might be used for example in teaching agent programming using Scheme language in the CS laboratory of HUT.

Considering this, setting the objective and furthermore, reaching it, was hard. Still, we were able to set goals for the project as an instrument of learning project working methods, group work and programming. All of us have learnt tremendously on all of these areas during this project. After all, this was just another course. Having completed it certainly has a lot of value in the future. In this sense, we have definetely reached our objective.

5.1.2 Project outline

Outlining the project should be done as unambiguously as possible. This includes stating explicitly which tasks belong to the projects, but also which do not as well.

In the beginning this was not easy, since the system we aimed to implement was not defined on paper but just in the thoughts of the principal designer. We had the requirements definition, but still it soon got clear that we had to write these thoughts down in detail. This was done by the principal designer Antti Huima, and after this, we have had no problems with the project outline. The project outlining was also affected by the decision to use two-phased spiral development model, which allowed us to postpone some of the design issues; in both phases the outline was defined from the beginning, but as the second phase did not start until December 1997, the full project outline was not defined until January 1998. However, this proved to be an excellent choice of work decomposition.

5.1.3 Amount of work

The amount of work required to accomplish the project should be estimated as realistically as possible beforehand. This is not enough, though. The amount of work done and yet to be done should continously evaluated thoughout the project, and actions should immediately be taken, if the initial estimate is not met.

We knew from the very beginning that this project was going to take a lot of work. We knew, that it might well prove impossible to accomplish. It was doubtful, whether the members could find the time for it.

Judging afterwards from the used resource, the actual usage appears almost surprisingly modest. There have not been any major drawbacks or problems that would have needed considerable additional resources.

This is partly due to the tabula rasa situation the project originates from --- there existed nothing beforehand, that our product should comply to. Due to this, we faced no surprises from outside of our own artifacts. Still, it is incredible how little actual difficulties tampered our project.

The initial work amount estimates were based on the amount of hours the course is credited: 200 hours / person, which makes it a 800 hour project. However, this was considered way too low, and we increased it to 1000 hours and reserved funding for a 1200 hour project. This last estimate was quite accurate, we exceeded it only a few hours.

5.1.4 Schedule

In order to have the project ready at a given day, the project has to be portioned in sub-tasks small enough, each having their own deadlines. Moreover, the project schedule as a whole should be inspected with flow charts such as Boehm chart and Gant chart.

For this kind of project that is not mainly the only task of the worker, it is, if possible, even harder to estimate when certain modules get completed. This issue was addressed with two different approaches. First, we decided to put heavy early emphasis on the project workload, and the 2-round spiral model aided us in this. The framework, on which the whole project relied upon was finished before the 3rd phase deadline (december 1997). Second issue was to add internal milestones to each of the project's phases so that there was clear supervision of the progress of the project. These internal milestones would have enabled us to "press the panic button" in case of fatal delays.

However, the scheduling was a success; most milestones and deadlines were met with no or little difficulties. We had problems with the heap module almost throughout the project, but fortunately it did not affect the scheduling as the problems were fixed on the way to completing other things.

5.1.5 Project plan

There should be a project plan that is not only created beforehand, but also maintained and updated throughout the project.

We have made a project plan that has been followed quite strictly. We have had just minor changes to make in it, but they have nevertheless been made.

The project management in this project had to be minimized in order for the project to be successfully completed. The minimization proved to be fairly effective, and the completion of the project is also a proof of successful project management.

5.1.6 Risk control

The ability to identify and control risks and to beforehand decide on the actions to be taken in case of difficulties is the foundation of reasonably reactive project management.

During each phase, we tried to set our internal milestone so that action could have been taken in order to take control of a realized risk. We discussed the probable risks during our meetings and tried to identify the most threatening. Fortunately, it was not necessary to take any actions as there were no major realized risks during the project.

5.1.7 Control of changes in the plans

The basis of change control is laid out in the specification of the project. Agreeing on how the client can introduce changes and how the required changes from the upcoming difficulties can be communicated to the client are of great importance.

Change control was in an ambivalent state during the first round of our spiral mode development. There were lots of open questions, but there was no reason to address them before the start of the second round. Overall, there were surprisingly little change introduced to the plans and design that was originally made.

5.1.8 Metrics for measuring the completeness of the projects

The observation of the project progress is the ultimate requirement for project's metrics. Without reasonable measurements, the controlling a project is impossible.

Measuring the completeness of the project was something that was taken as a serious issue from the beginning. It is one of the reasons we used the 2-round spiral model in the development, as we could divide the work into two distinct pieces. A more fine-grained approach was used within the rounds; we had set five (5) internal milestones as measuring points and this level of accuracy proved to be detailed enough for our purposes.

5.1.9 Project acceptance

This is the final measure of the project. Has the project met its objective? Does it have the value for the customer it is was intended to fill?

Things being the way they are, we consider acceptance testing consisting more of the project reaching its goals as of the statement of the client. In this sense, the project should be fairly acceptable.

5.1.10 Finishing the projects

The project should not silently smoulder. It should have a clear point of ending, the members should gather together, and discuss the working habits and such in order to be able to apply the experience in future projects.

We have already had a post-mortem session for the project (it was held 17th April 1998). Many beneficial things came up, including some listed here. The project can be considered as having been gracefully finished.

5.2 Overall method policy

As the size of the project was known beforehand (and that there were only four members in the group), we made the decision to try to minimize the bureaucracy and try to reduce the working set of the project management methods to something practical. Things we decided to include were:

The things we intentionally left out:

Our feeling is that using a minimized project (and process) management method set is possible, but it does introduce new risks (which in our case did not materialize). The overall process becomes more dynamic and more unstable, so the control has to be much more immediate (short reaction time). One other thing that we discovered was that even if there is a special tool for doing something, the mere existance of the tool does not justify the function that the tool is for --- we had our own bug report tool and also could have used the bug report tool of the course - net result: no systematic bug reports were made.

5.3 The authority problem and its solutions

The question of authority (or the lack of authority) was truly an issue for this project. It is problematic due to the fact that the project members are individual students, and there is no way to make them do anything except by encouragement and motivation: this leads to the authority solution of lead-by-example. We had two crisis points which resulted from the fact that the task we were carrying out was huge, and did not always seem to progress no matter how hard we worked. These situations could have been handled more efficiently (read: sooner, faster) if there would have been some kind of real authority to appeal to.

5.4 Unambiguous and clear task assignment, with supervision

The significance of assigning exact tasks and supervising the progress was clearly evident. Weekly tasks are simply not done, if there is no direct control over the progress of the tasks. There was twice a situation (few months apart) where "relaxed" task definitions were given, with very unsatisfactory results.

The need for continuous supervision and project control clearly implies that given enough resources (we did not have any to spare), a dedicated project manager (with some additional secondary tasks) would be the right way to go.

5.5 One True Problem

The biggest obstacle we encountered during the project was how to communicate our status and progress to the management. And we partly failed, at least it is our impression. This communication problem was due to lack of human resources, there would have been need for a full-time process and documentation manager. The process manager could have laid out detailed plans for each phase for the management, and the documentation manager would have kept the structure of documentation in order. As we did not have these additional resources, the picture of the overall process might have been distorted so that the management was not enough convinced of our progress, at least from our perspective.

5.6 Encountered Minor Problems

There were some minor problems worth mentioning concerning the project management:

5.7 What did we learn?

Here are some comments extracted from above and our project's post-mortem session:

6 Future work

From the beginning, the SCHEMESTATION project has been looking forward and to the future. The biggest reason for implementing the simulator was to evaluate the SCHEMESTATION concept; this goal was met more than well. This being said, it is clear that possibilities for future work are plentiful. We discuss here some directions.

6.1 Stand-Alone Implementation

Next generation of a SCHEMESTATION system could be implemented as a stand-alone operating system on "bare hardware". A convenient way to do so could be to use existing parts of available free kernels, e.g. Linux, FreeBSD, NetBSD or Mach, or to use e.g. the Flux OSKit. This would be a very fascinating project, because several basic operating system components should be modified to work best for a SCHEMESTATION domain. For example, garbage collectors interacting with virtual memory systems exist. Moreover, efficiency gain with a JIT compiler would be probably tremendous.

6.2 JIT Compiler

Either the simulated system or a stand-alone implementation could be accompanied with a just-in-time compiler that transformed byte code instruction sequences to native instruction sequences prior to execution.

6.3 Alternative Byte Code Layout

The current byte code layout is very normal, mimicking the instruction sets found from real CPUs. However, other compact representations for compiled code exists that can be e.g. tree-based. Such representations can achieve better space utilization and include more information for a JIT compiler to gain also in efficiency.

6.4 Optimizing Compiler

The current SCHEMESTATION cross-compiler, distributed with the simulator, is not good at optimizing and produces quite inefficient code. A new compiler could be designed. However, this does not seem as interesting project as the previous ones as good Scheme compilers exist already and there exists a lot of experience with regard to optimizing compilers.

7 Final numbers

7.1 Resource usage

The resource estimates have not been too accurate at the second half of the course. This is a direct result of the usage of the 2-round spiral development model -- it was not possible to plan ahead the second round during the first round. The positive aspect of resource usage is that the results have been amazing: the average yield per a used hour is about 90 lines of code or documentation.

Considering the estimates per tasks reinforces the fact that we were quite accurate when the first resource estimates were made: all those tasks that were possible to estimate, were estimated correctly. The overruns are mainly in programming and documenting, and some of the unexpected programming has resulted in unexpected testing.

Overall, we consider the resource usage a success, despite of the 22% resource overrun.

7.2 Workload balancing

The workload has been fairly consistent, and it has been surprisingly equally divided between team members. In this perspective, the scheduling and resource allocation has worked very well.

The individual numbers can be seen from the progress reports. Here is a summary table of the resource usage:

SchemeStationPS+/-+/-SU+/-P1+/-P2+/-LU+/-Total+/-
Lectures1100-80000000011-8
Studying901346-100-8000028-14
Meetings32030-10260260304321617610
Project management1111309-36-4628353-1
Design0052821-102198-4001023
Programming0085550-107333111796626385133
Testing000026-6681323-9714018838
Documenting290914412744231-1692925683
Maintenance1703141300-32029-1
Total10912051186-2627185209682481051228234

PSSUP1P2LUTotal
Ville306149806163344
Petteri345146704965315
Antti325336985664339
Jari134055234356230
109205186271209248

7.3 Financial resources

The project plan was done with a 1000-hour schedule in mind, with an additional financial reserve for 200 hours more. We exceeded our budget by 28 hours, which is a cost of 28h*250mk/h = 7000mk. As the original budget was 300.000mk, this overrun is negligible. During the project our development machine's network card had to be replaced, introducing an expense of 150mk; the total sum is therefore 307.150mk, where the only real world cost is the 150mk for the new network card. We consider the project a success in this aspect as well.

ItemSum
Work250mk/h*1228h=307.000mk
Miscellaneous150mk
Total307.150mk

8 Course feedback

8.1 Negative Handicap

When the idea of implementing the SCHEMESTATION as the course project was considered, the fact arose that it was to be a research project (with its own compiler, virtual machine, networking subsystem, etc, which would all have qualified as individual projects) instead of an implementation project (GUI and database). This put us into a not too favorable position from the beginning, as the comparison to other projects was difficult.

However, we did some minor detours on the way just to make sure that we were taken seriously. One of them was surely in testing, where we had to promise (well, at least that was the impression we had) a little too extensive formal tests for pieces which would have been implicitly tested during integration. However, we did even those tests, and the product is that much more reliable due to that, even with the fact that no additional bugs were found.

8.2 Overall

The course itself can be considered to be good -- there is a template which can be followed, or the project teams can operate with their own methods. The auditing sessions force the projects to have milestones, but these do not necessarily fit very well to the projects' internal schedules. However, this can be considered something from the "real world", and in the end they provide means to encourage and motivate the team.

We experienced the importance of a good client communications from a somewhat reverse point from normal --- we consider normal as something where the client has always something to say to some seemingly unimportant issues and not being able to decide what is wanted in the end.

9 Last Words by the Project Manager

The effort of more than seven months is now over. During the project, every member of our development team has probably learned a lot. Working first time as a project manager, I myself gained lots of insights into practical management of software projects and could probably do better next time.

I think that the current project is yet another proof of the fact that the following guidelines can never be followed too strictly:

  1. Make as simple interfaces as possible.
  2. Do not begin to implement something that you do not fully understand yet.
  3. Do not code faster than your skill enables you to do. Otherwise quality degrades and a major collapse is near.

Nowadays people do not like to say a good word of themselves as it is considered boasting and a sign of self-exclamation. However, ancient Egyptians did that quite a lot, especially in tomb writings. At this point I would like to follow them and say: Yes, I did a lot of work. And, yes, it was worth of it --- SCHEMESTATION runs now! I am not sure that every member of our team can join me in these words. [Ville Herva didn't consider the results worth of the efforts.] Thanks for you all!


Antti Huima
Project Manager & Principal Designer

10 References

William J. Bolosky, Richard P. Draves, Robert P. Fitzgerald, Christopher W. Fraser, Michael B. Jones, Todd B. Knoblock, and Rick Rashid. Operating System Directions for the Next Millennium. Position paper, January 1997.

W. Clinger, J. Rees: Revised Report on the Algorithmic Language Scheme, November 1991

Abelsson, Sussman: The Structure and Interpretation of Computer Programs, 2nd ed. MIT-Press, 1996