The Design of Software (CLOSED)

A public forum for discussing the design of software, from the user interface to the code architecture. Now closed.

The "Design of Software" discussion group has been merged with the main Joel on Software discussion group.

The archives will remain online indefinitely.

If you had to write SalesForce.com...

If you were the head of a start-up that had taken on the task of something the size and magnitude of SalesForce.com, what framework / platform would you commission your team to work with?

I'm not, btw, interested in making a SF clone, or anything like it - I AM, however, interested in what platform you'd use to write a server that handles over 1 billion transactions a month, delivers data to the web, e-mail, PDAs and Pocket platforms, has its own scripting language, and allows others to write apps for it.

Java? .NET? Ruby on Rails?

Spill thy thoughts!
Lucifer Send private email
Sunday, August 12, 2007
 
 
I believe current development projects involving web-sites and web-services are very complex and very distributed so you can always use a little tool here, another little tool there, and so on and so forth.

For example, for the people who deride PHP, Yahoo uses PHP for many of their sites. Yahoo also uses MySQL some.

So, for a toy site like Yahoo, such toy tools are put to the test, but Yahho uses many more languages, ranging from Bash scripts, to Perl/Python scripts, to C and C++ programs and libraries, to Java applets and Java applications and libraries...

So, this is the age of the one-size-does-not-fit-all in software projects, I am sorry to say.

For instance, one could use something different on the Web front-end, something different on the back-end, something else for RIA like Flex/Flash/Silverlight...

The problem nowadays is that one doesn't know where the architecture starts or ends, because things are so much more involved and live.

The end result is that you can start with any tool and keep adding more tools to it as you go. Sure, I'd say a good three years might be needed before your architecture starts solidifying, but it's risky to stick to your first architecture designs because it's not the way one learns with his mistakes. Generally, we should avoid persisting on the mistakes just because things didn't start well (as if perfection was easily achieved).

BTW, while Rails is cool, it's most popular server is Mongrel which can provide you with a low level approach to web-sites and web-services creation. There are other frameworks created in Ruby that try to provide a simpler solution than Rails when you don't need all the Rails features. So, Ruby is a greater platform than Rails and it could as sustain a large part of a large site.
Joao Pedrosa
Sunday, August 12, 2007
 
 
As long as the language/toolset is reasonably able to serve up active content, it doesn't matter which of them you use.  What *does* matter is the architecture you come up with that will allow it to scale out to handle the load.
xampl Send private email
Sunday, August 12, 2007
 
 
Take a look at this site. http://highscalability.com/

Here they profile several "big name" sites and what works for them. Pretty interesting...
TownDrunk
Sunday, August 12, 2007
 
 
Lucifer:
"what platform you'd use to write a server that handles over 1 billion transactions a month, delivers data to the web, e-mail, PDAs and Pocket platforms, has its own scripting language, and allows others to write apps for it."

I think anyone who plans for all those possibilities from day one is doomed to failure.

Don't spend so much effort planning for the billionth transaction that you never get the first transaction off the ground.

Sure, there are scalability concerns with a big website, but you'll NEVER correctly design the large-scale architecture until you've first implemented the small-scale architecture and understand its constraints.
BenjiSmith Send private email
Monday, August 13, 2007
 
 
Benji, thanks for your response - I know what you're saying, but I'm not sure it answers the question.

My question is, what framework/platform would you use if you knew, from day one, that you were building something the size and scope of SF.

Obviously, the majority of projects have no idea where they're headed - it'd be hard for YouTube to anticipate (and code for) the kind of size they grew to, and in the timeframe they had to work with.

I'm asking what you'd code it in if you KNEW for sure that your project would be the size and scope of SF.
Lucifer Send private email
Monday, August 13, 2007
 
 
It's funny, not a single person on this thread has actually answered the question yet.

Anyways, I'd vote for Java.
Greg Send private email
Monday, August 13, 2007
 
 
Greg - my sentiments exactly.

Whilst I appreciate the time and input from my fellow developers, it seems that coders are some of the most cynical and opinionated bunch of any group... ever!

Rather than give you a straight answer, they'll tell you why your approach is wrong, or why you shouldn't be doing something, or how you're a moron for thinking your question is even worth answering.

It amazes me...  for a group so intelligent, there's an arrogance with developers that I don't see much from writers, marketers and other groups of people that I deal with as part of my business.

Geez, it's gonna be tough recruiting the kinda coders I want to work with...
Lucifer Send private email
Monday, August 13, 2007
 
 
Sorry, I thought the invitation to "Spill thy thoughts!" was an invitation to spill my thoughts.

As for the actual answer to the question:

By the time you're scaling to a billion transactions, you're already working on version 10 of the software. So, I'd probably choose, as my platform, whatever version 9 was written in.

Java? .Net? PHP? Doesn't matter.

The biggest scalability problems come from application architecture, not platform. You can write a scalable web application architecture (or a dog of an architecture) in any modern web platform.
BenjiSmith Send private email
Monday, August 13, 2007
 
 
>> It's funny, not a single person on this thread has actually answered the question yet. <<

Because there is no one right answer.
xampl Send private email
Monday, August 13, 2007
 
 
I'll give a deliberately wrong answer.

I'd write the very first alpha version zero point zero version of SalesForce.com in ColdFusion because...

1) the overhead of writing a basic "hello world" in ColdFusion is a lot less than in ASP.NET,

2) I know ColdFusion well enough that I can crank out an extremely rough prototype in days rather than months,

and 3) it comes bundled with a basic webserver, search engine, libraries and report generator in the default download.

Having said that, ColdFusion does have its flaws such that I'd eventually...

a) switch to RoR for prototyping the user interface in front of the client (think separate product),

and b) eventually rewrite the production code to ASP.NET so that I can use Microsoft's tools to manage it.

Once I've gotten some real world useage out of it and I'm at the point where I'm chasing customer requests as opposed to my own list of desired features, I'd...

a) refactor the production code into Java so that I can modularize it more while reducing my dependency on third party libraries,

b) increase my potential worldwide developer pool,

c) increase my market by supporting more platforms,

and d) contemplate building dedicated Linux/Solaris appliances so that I can optimize everything from the bare metal to the application user interface.

From a timeline perspective:

- proof of concept to mISV stage
  ColdFusion/Postgres or MySQL

- mISV stage to mid-sized company
  ASP.NET, some side projects in RoR, SQL Server

- mid-sized company to worldwide conglomerate
  Java, SQL Server, Oracle or DB2.

Does that help?
TheDavid
Monday, August 13, 2007
 
 
Yes it does, thanks TheDavid...

You mention a re-write in Java at the latter stage... curious whether you think Java performs better than .NET, large-scale?
Lucifer Send private email
Monday, August 13, 2007
 
 
"...think Java performs better than .NET, large-scale?"

I honestly don't know.

More to the point, I think the application would need to be very compute intensive before you see any significant differences between Java bytecode and the .NET equivalent. If it normally takes eight hours to pull data together and assemble a report, switching platforms might shave off a few minutes. Optimizing the database and improving the efficiency of your algorithms are equally likely to result in substantial performance imrpovements, if not more so.

Having said that, I'm not yet convinced that Visual Studio and similar .NET centric tools make it easier to maintain and refactor extremely large code bases. (Obviously, they can do so to some extent but I think it speaks more to the talent of the developers than the tools themselves.) I am a bit concerned that once I reach a certain level of complexity, I will have to move a lot of the code into DLLs and modify the build scripts to account for them. Java tools already support jars and beans quite robustly.

I'm guessing when you get to very large scale development, you will want to be able to throw some requirements over the fence to off-shore programmers, get the resulting jars back and smoothly integrate them into your application. In a hypothetical scenario where I have millions of lines of code and I want to make what's essentially a three line change, I'm more confident that I can compartmentalize that change within a jar, resulting in faster development.

I emphasize that I could be wrong. Microsoft obviously has a solution and they're eating their own dogfood. Right now I'm just not confident in it but I reserve the right to change my mind after Vista SP1 and VS2008 have been out long enough to demonstrate how robust their new tools are.
TheDavid
Monday, August 13, 2007
 
 
Cheers, that makes a lot of sense.
Lucifer Send private email
Monday, August 13, 2007
 
 
BenjiSmith: "Don't spend so much effort planning for the billionth transaction that you never get the first transaction off the ground."

Amen to that.
Entries of Confusion Send private email
Tuesday, August 14, 2007
 
 
"I AM, however, interested in what platform you'd use to write a server that handles over 1 billion transactions a month, delivers data to the web, e-mail, PDAs and Pocket platforms, has its own scripting language, and allows others to write apps for it."

Interestingly, our new CEO is the ex-COO of SalesForce.com...

And he wants us to be the same sort of sized company.

So... What do we have?

Well. We have a LAMP stack. Alas, it's using Catalyst, which is pants and we'll be removing that. It might make developing simple webstuff simpler, but now we're into a scalability/reliability world, it's in the way.

We have a lot of C++ running on custom rolled RH Linux. We have the odd Windows box running things, but the bare minimum.

To be honest, I have to say, the platforms and languages and toolkits and things aren't important in this scale. It really, really doesn't matter if you use C or C++ or Perl to write things.

You absolutely have to write things to scale by adding resources and at that point, if a perl server isn't fast enough, you just add another couple of boxes. It's not worth worrying about things like "is this bit written in perl or C++"; your worries about "if this rack of gear falls off the internet, will things still work?".

I mean, it HELPS if you have expert C++ people around who can suddenly at the drop of a hat rewrite something to be an order of magnitude faster, but it's not as important as you'd think.

Far, far, far more important is the design upfront which means you don't ever have to have exactly one of something.
Katie Lucas
Tuesday, August 14, 2007
 
 
Myspace is a good example of how an 'architecture' evolves over time in response to demand.
your space
Tuesday, August 14, 2007
 
 
your space
Tuesday, August 14, 2007
 
 
the summary is

500,000 Users: A Simple Architecture Stumbles
- 1 Million Users:Vertical Partitioning Solves Scalability Woes
- 3 Million Users: Scale-Out Wins Over Scale-Up
- 9 Million Users: Site Migrates to ASP.NET, Adds Virtual Storage
- 26 Million Users: MySpace Embraces 64-Bit Technology
your space
Tuesday, August 14, 2007
 
 
"Visual Studio and similar .NET centric tools make it easier to maintain and refactor extremely large code bases"

I'm not sure what you define as a "extremely large code base" but I've found that Eclipse seemed nicer to work with for very complex projects than Visual Studio.
Arethuza Send private email
Wednesday, August 15, 2007
 
 
Yes, that was my impression too.

I'm thinking of separate, distinct systems that are designed to work together, and total well over the cliche'd millions of lines of code. I particularly doubt SalesForce likewise consists of a single suite of ASP files; it's more likely they've got libraries, DLLs, COM objects, web services, some written in C#, some written in VB, a few in C++, and may actually call out to external programs written in Perl, Java, Python or whatever.

Granted, the Java philosophy doesn't make software systems immune to this kind of chaotic developement but Eclipse, Ant and similar tools do make it a lot easier to manage and refactor it.
TheDavid
Wednesday, August 15, 2007
 
 
Well, we kind of our at my employer (http://reardencommerce.com/). While AppExchange is oriented towards business management suites, we lean towards e-commerce. Whereas one of Salesforce's application is sales sorcasting, one of ours is travel.

We have a platform consisting of common services, user preferences, company policies, widgets, etc. We've then built store fronts that integrate supplier feeds, provide the user experience, and wire the services together. Since this is targetting corporate spend, the major driver is to allow companies to manage costs in a way that employees find convenient (and hopefully enjoyable).

If you maintain a core value of being distributed, the architecture pretty much stays in line. You use stateless processing servers, messaging, remote caching, service contracts, etc. The challenge really isn't concieving it, but consistantly following through on it. You need to keep chipping away and construct standard, clean components. And you need to always watch out for people who do one-offs and either get them on-board early or find out why they created an ad-hoc process rather than using the standard frameworks (meaning, enhance accordingly based on the new requirements).

Basically just keep a vision towards horizontal scaling and keep the hacks towards a minimum, and probably what you're imagining is what we ended up with.
Benjamin Manes Send private email
Thursday, August 16, 2007
 
 
The technology choice is less important than the architecture and code.

I've seen poor developers churn out slow, bloated c++ and good developers write fast and responsive VB6.

Worry about your staff first.  If the best people you can find like PHP, go with that, if they are ASP.NET types, go with that.
It's the people
Thursday, August 16, 2007
 
 

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
 
Powered by FogBugz