Announcement

Wednesday, September 08, 2010

Rereading Mythical Man month

Recently I started rereading Mythical Man Month by Fred Brooks. The book is a collection of essays about programming and software development in general. First edition was published in 1974. I am reading the 20th Anniversary edition published in 1994. So the one I am reading is also 16 years old.

First time I read this book sometime in year 2000. At that time, I was a just a somewhat experienced developer. In last 10 years, I have handled teams, worked in project leader roles, taught software development, design, architecture.  Now when I started rereading the book, its a very interesting and educational experience. Some things which I did not completely understand or believe at that time, now those ideas make sense. Though the ideas and advice in the book are still very sound advice even after 35 years. Still this book  is known as a book 'that is quoted often but followed rarely'. I agree to that.

I am going to review some ideas on the book which stuck a cord.

I found a following gem in Chapter 13, The Whole and The Part. Here Author is talking about the 'System Debugging'. 
Build Plenty of Scaffolding
By scaffolding I mean all programs and data built for debugging purposes but never intended to be in the final product. It is not unreasonable for there to be half as much code in scaffolding as there is in product.

One form of scaffolding is the dummy component, which consists only of interfaces and perhaps some faked data or some small test cases. For example, a system may include a sort program which isn't finished yet. Its neighbors can be tested by using a dummy program that merely reads and tests the format of input data, and spews out a set of well-formatted meaningless but ordered data.

Another form is the miniature file. A very common form of system bug is misunderstanding of formats for tape and disk files. So it is worthwhile to build some little files that have only a few typical records, but all the descriptions, pointers, etc.
I suddenly realized that the description is very similar to description in Agile books/articles about Test Driven Development. (with some minor change in terminology). 'dummy component' is Mock Objects. The estimate of proportion of 'test code' to 'production code' is also very similar('It is not unreasonable for there to be half as much code in scaffolding as there is in product' )

I found few more such gems. Later I will write about them.

Saturday, July 03, 2010

Students and Professional Software Development

In May 2010, I conducted a workshop on 'Introduction to Profession Software Development' in Sir Padmapat Singhania University, Udaipur (SPSU). Previously I have conducted various introductory sessions for new joinees in Geometric Ltd (my previous employer). In all the projects that I worked on, usually 50% team members were 'freshers'. While working with these fresher/new joinees, I realized that even computer science students have no clue about 'professional software development'. Most of them have not even heard of 'version control'  so there was no question of using any version control system.

Obviously when they join a software company, it is a 'culture shock'. Also when these students try to work on some short internships with the industry, they spend more time learning such tools/practices rather than  development of their project. Hence industry mentors are not very happy with the output of such internship programs. 

The objective of this five day workshop was to reduce the intensity of this culture shock and help students to with internships, last year projects and also prepare them to work on programs like 'Google Summer of Code'.

Participants were divided into teams 4-5 students each. A SPSU professor was assigned as 'mentor' to each team. The daily program was divided into 
  • class room sessions of about 2 hrs every morning, 
  • 15-20 min presentation about yesterdays work by the teams 
  • working a 'mini-project' during remaining time.
I conducted following sessions during the 5 day program along with reviewing the design/code. The team of SPSU professors worked with me to mentor the students, answer their queries, review the code/design etc.

Day 1 : Difference between amateur and professional software development. And the tools of professional software development (e.g. Version Control, Bugbase, Build systems etc).
Day 2 : Writing specification document
Day 3 : Key Principles of Software Design and how to write design document.
Day 4 : Principles of User Interface Design
Day 5 : Bad coding practices and how to avoid them.

The workshop was very interesting experience. 
  • Most of material I prepared before hand has to heavily modified based on interaction with students. 
  • As usual some student groups were not at all interested while some groups did fabulous job. 
  • The professors were serious about mentoring the students and took a keen interest in their teams work. However, many professor didn't have any experience of working in a industry and it showed.
  • Many students had done a basic java course. But most of them did not have any idea on developing a GUI in Java. Same was true for students working on C# or C/C++. 
  • Some teams worked on Turbo C compiler. Obviously that experience with Turbo C and developing GUI with TurboC is not going to be very useful today.

The Program was organized by Industry Readiness Center (IRC) and Sir Padmapat Singhania University, Udaipur (SPSU) in collaboration with Poorvanchal Systems Pvt Ltd.

What do you think about such workshop ? Will they be useful to students and industry ? I am interested in hearing about your experiences.

Friday, June 11, 2010

Why ALM softwares with SaaS model are good for Startups ?

Many software developers express doubts when I tell them that hosted ALM softwares with SaaS model are good for startups.  Typically the arguments are two.

  1. I am software developer, I can setup my own Trac, Subversion (or some other version control), bugzilla (or some other bugbase). Why should I pay for something I can do on my own ?

  2. I don't want to put my code on some other companies server.  What if it gets stolen ?

Lets examine these arguments in more detail starting with first argument, 'I can do it on my own'.


Why should I pay for something I can do on my own ?


If you are experienced software developer, you can definitely 'do it on your own'. However, if you are startup founder where will you like to spend your time ?  Do you want to spend time working on your own idea or you want to spend time on setting up version control, bugbase, taking backup etc.  You can spend some initial time in deploying the basic infrastructure, what about maintaining it?  Someone has to regularly spend time in keeping these infrastructure running.  Someone has to spend time on taking regular backup, applying security patches to servers, upgrade to newer versions of software, etc etc. The time spent on all such 'non-value added but necessary'' activities is significant.

When you go to a hosted ALM provider like 'BootstrapToday',  activities like taking regular backups, server maintainance, upgrade to newer versions, any data migration are handled by ALM service provider. Hence startup developers are free to spend more time on developing their own ideas.  Usually these are 'integrated' ALM applications which provide at-least version control, issue trackers in one package. BootstrapToday also provides Wiki and some very basic project management and time tracking capabilities.


I don't want to put my code on some other companies server.  What if it gets stolen ?


This is a very legitimate and sincere concern.  However, many time its seriousness is exaggerated.  What are the 'threats or risk'' to your IPR if you host your IPR on ALM providers server.

  1. Someone may hack your ALM providers servers and steal the source code.
    This risk exists even if you are hosting source on your server especially if server is accessible from outside the company network. If source code hosted on a server accessible only inside the company network, then this risk is less. However, it also means that your developers have to work from company premises. In case of startups, sometimes the founders are in two different cities and still want to access the source, then you want to spend time/resources to create a VPN, make sure the server is up 24/7, etc.

  2. An employee may steal the source.
    Again this risk exists even if source code is hosted on your own server. Still you may want to make sure that employees cannot access source code from their homes to minimize this risk. Typically ALM providers have additional security features like IP address based access restrictions.

  3. ALM provider may look at the source and sell it to the competitor.
    ALM providers like us (BootstrapToday) are not stupid. We know that if we do this even by mistake, we are finished. No one will trust us after that. Hence we have contracts that specifically ensure that we cannot do this. We have additional restrictions on which employees can directly access the data on our servers.

As ALM service provider , we have to to be extremely serious about the security of data of our customers. We have to take special care in design, deployment of our software, security of our servers, backups.

So if you are hosting the code on ALM providers server, the risk to your IPR does not really increase in any significant way.  Still sometimes startups have their own (many times imaginary) fears about their protection and security of IPR.  Unfortunately rational arguments do not work on such 'fears'.


Are there any situations where SaaS model is not appropriate for a startup ?


Yes there are situations where SaaS model is not appropriate.  For example, lets assume that you are working on project for US government (or Indian government).  In such cases, your contract may not allow hosting the source on servers outside your company.

(NOTE : This article is imported from BootStrapToday blog)