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.

Do you consider your platform when you do high level design?

I have met several people who say if you consider what language, database, OS, you will be using while doing design that it will constrain your thinking.

What is your opinion?
Monday, September 11, 2006
It depends on what you are designing.  ;) 

You can get 90% of the way there without thinking about the platform. But the last 10% will always elude you. It's like Java. It works for 90% of what you want to accomplish on all platforms. But the differences between each platform make up the remaining 10% and it is that remaining 10% that consumes 50% of your time.
Johnny Bravado
Monday, September 11, 2006
The question sort of makes the assumption that you're just as likely to write your next application in C on Unix with Oracle as you are to use C# on Windows with SQL Server.  The vast majority of shops aren't going to make such a radical shift based on the specific project they're taking on. 

Given that each platform has it's strengths and weaknesses, isn't is better to take those into account when designing your system?  Yes, knowing the platform may constrain your design, but you will need to deal with those constraints even if you haven't planned for them.
Charlie Williams Send private email
Monday, September 11, 2006
Great question. I recently disagreed with someone on this specific point during an interview. The interviewer swore that choice of platform was *NEVER* considered during design. Never is a string word. Needless to say I didn't get the job :-).

If you are a Java shop you wouldn't be agnostic to platform choices. Your design would reflect the platform choices your company has made. It just makes sense from a time and materials perspective. Now, you can always choose differently (say .NET) but be prepared to justify your reasoning (and added expense) to management.
Ken Brittain Send private email
Monday, September 11, 2006
Well, duh!  Of course it will.

But sometimes, if you're doing shrink-wrap office software, your choices are "Windows" or "Windows plus a few minor players" so spending time pretending you won't do a Windows version is stupid.

Generally you'ld be foolish to commit to a platform "too early", though noone ever seems to know when it's no longer "too early" but a devotion to fantasy is often unhelpful as well.

Monday, September 11, 2006
There are several contributing factors to determining the correct platform for any design work. I look at it this way, ask these simple 5 questions to really see where the project is going, and what it needs.

One, who is my target audience? Are the professionals or average users? Are they executives, IT staff, sales people or even home users?

Two, what environment is your audience in? The environment obviously relates to the Operating Systems, Hardware and Physical/Non-Physical Layout of the company, its processes and more.

Three, what is the flexibility of the audience? Some customers may be unwilling to move to a newer technology or platform, others are willing to do so, even at a restrictive level.

Four, what is the complexity that the audience requires? Some technologies are suited for much more complex tasks, as where others are not. Matching the complexity to the platform and language feature sets is important.

Five, what will the costs and time involved be? Some platform and language choices can be more expensive and time consuming than others. Depending on how much the audience is willing to spend and wait for it, will help you decide much easier.

I hope that this didn't waver too far from the original question, but in my mind it will hopefully help. ^_^
Inari Send private email
Tuesday, September 12, 2006
Yes, it will constrain your thinking, but there are a myriad of factors to consider (as others pointed out).  Every project has *some* constraints, usually falling in the magic triangle of Resources vs. Time vs. Budget.

If you have a fixed set of Resources, then you must consider their skills against the time to complete the project and your budget, and so on.

The only place that there are "constraint-less" projects are schools.

Matt Lavallee Send private email
Tuesday, September 12, 2006
Yes. There are a lot of different ways to solve a problem, but working against the platform (normal patterns in the product) is just plain wrong. Platforms try to guide you in how to best solve a problem based on its capabilities. Examples: Java vs. C, Windows vs. Unix, standalone versus Enterprise Service Bus.

That's not to say you don't often have a somewhat similar design in the end, but you shouldn't disregard what you can leverage. You should also consider the havoc of having 10 different paths in a system has on maintanence and ability to add features, versus one or two golden ones that the whole development team knows and continously enhances.
Manes Send private email
Tuesday, September 12, 2006
The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities. —Edsger Dijkstra
Tuesday, September 12, 2006
> What is your opinion?

I've been trying to design a product recently: and I've been havering between implementing it as a desktop application or as a run-in-the-browser web application.

I've certainly found it interesting to consider the product requirements without pre-judging what the solution will be.

I've tried to be careful to define the requirements independently of the solution.

Neither platform is perfect, and so the implementation must involve effort to work around platform-specific constraints; but, at least I have a vision of what I want the product to be, and the vision at least (if not the implementation) is unconstrained by the platform.

But considering the requirements is all about analysis, if you accept the distinction between 'analysis' and 'design' as stated at ... when you consider the design (the solution), then I think that you must at least to some extent consider the platform, because the platform is part of or integral to the design.
Christopher Wells Send private email
Tuesday, September 12, 2006
I'd have to generally agree with all the previous responses in favor of considering the platform during the overall design process.  Certainly all this (resources, platforms, etc..) needs to be taken into account when making a business decision of whether or not to take on the project (if you consider that part of design).

However, I would point out that in terms of the actual design of the software, consideration of the platform comes at a later stage.  Initially, the design should be done entirely in the problem domain, with no mention of what platform the solution will be run on, what language it will be written in, what type of database will be used, etc.  Everything should initially be expressed in terms of objects and actions found in the problem domain.

Once a general model has been constructed in terms of the problem domain and all the basic objects/classes are identified, it is time to move on to the next step.  Now the platform, language, database, etc should be taken into account in order to determine more specifically how to implement the model depending on whatever choices have been made (Desktop app vs Browser app, Windows vs Unix, Java vs C++ vs C#, etc).
Tuesday, September 12, 2006
Yes, absolutely. Deployment plans are crucial to high level product design, and deployment options are often affected by platform. I'd be hard-pressed to think of a project where you would want to ignore platform options, but of course it depends on the project.
Ben Bryant
Tuesday, September 12, 2006
>> However, I would point out that in terms of the actual design of the software, consideration of the platform comes at a later stage. <<

Eh.  I think there's a modicum of influence on the design depending on whether it's a client/server app or browser app, whether it's going to run on a set-top box or handheld with limited options, memory, etc.  You can't design all willy-nilly exclusive of the actual requirements.

Matt Lavallee Send private email
Tuesday, September 12, 2006
The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities. —Edsger Dijkstra

If you're trying to solve a problem that 50 million people have and you want to sell lots and lots of copies, then no amount of whinging changes the fact that "cray supercomputer" simply is not a viable platform. - Me

You can spend all the time being a whiny abstract crybaby that you want - as soon as you have even a vague idea what you actually want to do there's still a huge amount of analysis and thinking to do, but you've already eliminated many options for platform.

Deal with it.

Tuesday, September 12, 2006
"do you consider your platform?"

Ya, you betcha.

Of course, the hardware platform is usually being designed in the next office(s) over and has a bunch of goofy processors/busses/peripherals/etc.

The important thing in this world is to get the SW lead into the HW design process as early as possible.  Hardware engineers will do some serious PITA things if given the opportunity.
old.fart Send private email
Wednesday, September 13, 2006

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

Other recent topics Other recent topics
Powered by FogBugz