Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

So, we are starting a new project soon, and there are a lot of decisions that must be made. The one I am most interested in is: What all do you have to take into consideration when deciding what technologies to use?

There is always something that you miss and only half-way through the project do you realise, "O yeah... I should have thought about that...", and usually it's something that would have made you go with a different technology.

I would like to hear what you guys think. Maybe get a nice comprehensive list up to help the architects everywhere to make more informed decisions.

share|improve this question

1 Answer 1

up vote 4 down vote accepted

Off the top of my head:

  • market knowledge: will you find enough people fluent in the technology? At what cost?
  • scalability: will it still work when your system will be used in production, with volume of data/requests that can go much higher than anticipated?
  • modularity: is this technology easy to replaced should the need to do so arises? or will you be "hard-linked" to it? Is there some component mechanism included in it (like OSGi)?
  • administration: what does it mean to deploy that technology (in term of servers, backups, DRP - Data Recovery Plan -, ...)
  • deployment: is it easy to deploy? Will you be able to make staging environment easily enough?
  • parametrization: how do you change its behavior? only at startup through property files? During runtime?

Matthew Read suggests "speed of development", which opens this answer to more "programming language" type of criteria as mentioned in this Microsoft technote.
Here they are, still presented in a "technology agnostic" way (i.e. not necessary limited to "programming language"):

  • Ease of learning: how steep is the learning curve?
  • Ease of understanding: how well will anyone maintain a legacy system based on that technology?
  • Speed of development: how long it takes you to write code, but also how long it takes you to find a solution to the problem at hand and find the bugs?
  • Help with enforcement of correct code: is there any tool around that technology helping you to make sure it is applied correctly?
  • Performance of compiled code: what are the performance criteria?
  • Supported platform environments: is your development platform the same than your integration one? your production one?
  • Portability: do you need to recompile everything each time you change and deploy in a new platform?
  • Fit-for-purpose: is there any criteria (real time, ...) which would validate/invalidate your technology choice?
share|improve this answer
    
Don't forget speed of development. You can make a great-looking simple app in Ruby on Rails in a couple hours, which might take a week in PHP. This is to be balanced with the efficiency of the language/interpreter itself, of course; you don't want to write Google.com in RoR, for example. –  Matthew Read Dec 14 '10 at 6:55
1  
@Matthew: good point. That leads actually to several more criteria. I have updated my answer. –  VonC Dec 14 '10 at 7:12
    
Very good answer. I was coming here today to see if this question was asked and this provided me with a pretty solid basis to start to make a decision with. Thanks. –  Corv1nus Jul 17 '12 at 13:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.