Sunday, October 01, 2023

Different Software Worlds

We talk about best software development methodologies, best processes, practices, designs etc but have we ever wondered that there are entire different worlds in software development universe ? So much so that certain principles, guidelines, metrics have total different meanings and emphasis on each of these different worlds. 

Quality concerns, limitations and design constraints could be vastly different across these world that we simply can not discuss about one 'best' process or methodology at all.

A well thought of article on the subject can be found in here Joel Spolsky has written this more than 21 years ago. In that post he talks about 5 different worlds Shrinkwrap, Embedded, Internal, Throwaway and Games.

While the article is so good and eye opening, we could little redefine these worlds to match with the current landscape of software development. You may need to read that post before continue further..

I would get rid of Throwaway type since it's not a industrialised, large scale or collaborative type of software. Would also get rid of Embedded type for two reasons. One, most embedded software these days can be upgraded online, from our mobile device drivers to electric cars. This make embedded software also bit similar to mainstream, also this type of software is probably bit rare too. Certainly less than 1% of all software development.

That leaves us with Shrinkwrap, Internal and Games. For this set I would add SAAS/PAAS software and the fifth world, Apps. Now, shrink-wrap is more or less a readymade product to be used by many. How about enterprise software development targeting a particular organisation ? I mean by external service companies which are specialising in this kind of development so it does not cover under Internal type. For instance, a solution provider may get selected via a competitive tender/bidding process for that project which would then last few months or years involving maintenance and expansions. 

So I would say 6 worlds. Each of these have different demands, quality concerns, design needs and different constraints and limits, some architectural and platform related while some others could be financial, time and legal.

Now, to the important question : what development methedologies / process will work best in each of these worlds ?

Or even more important : Which of these worlds am I in ?

Open for discussion..