SlideShare a Scribd company logo
1 of 7
Very rough overview
Users need some type of software/you decide to build a piece of software
After they contact you, you investigate what problems they're having and how you can help the
   users to solve them

    If you develop software for potential users, then you should find them and ask them what
        features they need
After getting some ideas of what the users need, you start developing some solution (or provide
   an existing package), while periodically checking with the users to ensure that you're on the
   right path. Also, you should constantly check with deadlines and if there's not enough time to
   complete everything, then you should omit some non-important features to make completing
   the really critical ones on time possible

At some point the software will become stable, with no major and few minor bugs, and almost no
    features left to implement. Most projects end here.
If you're developing a product, then most likely you'll go back to point 2 to get some new ideas
    and missing pieces to develop and continue from there.
Basics of Software Development
Users

Development process

Tools

Features

Schedules

Existing packages
Users
You are designing for users, so they are the most important factor in software development
Users will tell you what they want, but don't trust their words – investigate how they work, what
   are the bottlenecks and what you can automate or improve in their workflow – what they
   currently do by hand that can be done by a computer
It's your fault if your software doesn't solve the users problems, not theirs

Users are stupid*, so make your user interface as simple and intuitive as possible
     Stupidity doesn't mean mental problems, it means having a lot of (better) things to do than
        learning to use your programs, so software that doesn't force you to think is better
Keep the users happy while developing – let them know you care

     Let them know you listen to their complaints
     Don't talk about technical details, and don't let them. Let them focus on their problems.
     If you keep them happy, they will go out of their way to help you




 * Stupid is a technical term
Tools
Technologies
    After understanding what the users need, you'll basically determine what technologies you
        will need to use – web technologies are better for multi-user online apps, or
        performance-critical apps where computations have to be performed on the server. For
        office applications (or specialized tools for daily use, e.g. bookkeeping), desktop apps
        are better. But these are general guidelines; you'd better decide what to use based on
        the problem description.
    No matter what technologies you choose, the user interface should still be familiar to the
       user. Sometimes innovation isn't a good thing. That's especially true in user interface.
         That being said, we've seen very innovative user interfaces that are easy to use. Being
           conservative doesn't mean you mechanically repeat what has been done before – it
           means you provide an user interface that is intuitive and usable like it has been
           before.
Programming languages

    The choice of programming languages has always been debated; choose what absolutely
       works for you and what you know well; you can read Joel Spolsky's Blog Entry about this
       (though the article is from 2006 and he disses Lisp and Ruby which are completely
       working alternatives).
    There really are programming languages which take productivity to unseen levels, but you
       will really need advanced hackers to write stuff, and for most projects they are an overkill
       (simple web-pages are the easiest, cheapest and fastest to do in PHP).
Features
Almost all software is judged by its features. Gmail is great because it has the “send email” (and
   other) features, Firefox is great because it has the “browse the web” and countless other
   features. Users will frequently decide which competing product to buy based on so-called
   “feature charts”, which is a side-by-side comparison of numerous products and their features.
   You've probably already seen one (example here).
You may find feature charts unusable, but many customers will still ask you questions like “Does
   your product have X?” and you may find that having X is almost always easier than explaining
   to customers that X is useless to them. Many easiest to implement features are the ones
   with most demand. So don't disappoint the users, implement what they are asking for and
   keep working on what they truly need.

With the above said, you should try to keep software as simple as possible, and sometimes it
   means omitting some features. Some things may seem simple (for example, iPod), but under
   the covers there can be a complex infrastructure. It's the designer's job to make the product
   seem simple. Software with countless features are sometimes harder to use, harder to
   maintain, and called bloatware (full with useless features). Elegance and simplicity are also
   features, and very important ones; don't trade them into a horde of other, less important
   features. I will also quote Joel Spolsky here.
Existing packages
All new code must be written, debugged, tested, shown to users, modified, tested again, and
    maintained. So, whenever applicable, it's better to use code written, tested, and maintained
    by better developers (e.g. use Wordpress instead of writing your own blogging software).


Maintaining costs are frequently the highest. The original author may have left, the code may be
   undocumented, low quality, etc. Maintaining low quality and obscure code may be orders of
   magnitudes higher than writing your own, or modifying an existing open-source code base.


Open source projects tend to be high quality, because they are usually reviewed by a number of
  developers, so bugs tend to be fixed more quickly.


Also open-source projects tend to have shorter release cycles than their proprietary counterparts,
   because the manufacturing costs associated with the latter. That way latest changes and
   updates are incorporated more quickly.
Schedules
Work takes time; great work takes a lot of time.


Users/customers don't understand that adding new features/fixing bugs takes time


As a result, sometimes when you say “it will take two weeks”, customers ask: “couldn't it be done
   in 10 days?” You may think that you'll squeeze the 14-day work in 10 days, but quality may
   suffer. Actually, in real world, managers think that they can make employees work faster by
   giving them unrealistic schedules. Experienced developers know how to sacrifice quality to
   meet short deadlines, but the final product is lacking in testing.

More Related Content

What's hot

Prototype model
Prototype modelPrototype model
Prototype modelsadhana8
 
7 stages of system Development life cycle ppt
7 stages of system Development life cycle ppt7 stages of system Development life cycle ppt
7 stages of system Development life cycle pptIphsTechnologies
 
INTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERINGINTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERINGPreeti Mishra
 
What is software development life cycle
What is software development life cycleWhat is software development life cycle
What is software development life cycleSoftware Testing Books
 
Software development life cycle
Software development life cycleSoftware development life cycle
Software development life cycleVaibhav యం.
 
SDLC- concept and models
SDLC- concept and modelsSDLC- concept and models
SDLC- concept and modelsAnjali Arora
 
Software engineering tutorial
Software engineering tutorial Software engineering tutorial
Software engineering tutorial Ahmed Elshal
 
Presentation of waterfall model
Presentation of waterfall modelPresentation of waterfall model
Presentation of waterfall modelRohitkumar3723
 
Prototype model and process
Prototype model  and processPrototype model  and process
Prototype model and processDanish Musthafa
 
RAD Model & Prototyping Of Software Engineering
RAD Model & Prototyping Of Software EngineeringRAD Model & Prototyping Of Software Engineering
RAD Model & Prototyping Of Software EngineeringUmeed Charity
 
Software Development Life Cycle-SDLC
Software Development Life Cycle-SDLCSoftware Development Life Cycle-SDLC
Software Development Life Cycle-SDLCAdeel Rasheed
 
software product and its characteristics
software product and its characteristicssoftware product and its characteristics
software product and its characteristicsPriyanka Pradhan
 

What's hot (19)

Waterfall Model
Waterfall ModelWaterfall Model
Waterfall Model
 
Prototype model
Prototype modelPrototype model
Prototype model
 
R Studio (Report)
R Studio (Report)R Studio (Report)
R Studio (Report)
 
7 stages of system Development life cycle ppt
7 stages of system Development life cycle ppt7 stages of system Development life cycle ppt
7 stages of system Development life cycle ppt
 
INTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERINGINTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERING
 
What is software development life cycle
What is software development life cycleWhat is software development life cycle
What is software development life cycle
 
Software development life cycle
Software development life cycleSoftware development life cycle
Software development life cycle
 
SDLC- concept and models
SDLC- concept and modelsSDLC- concept and models
SDLC- concept and models
 
Software engineering tutorial
Software engineering tutorial Software engineering tutorial
Software engineering tutorial
 
Unit1
Unit1Unit1
Unit1
 
Presentation of waterfall model
Presentation of waterfall modelPresentation of waterfall model
Presentation of waterfall model
 
Slides chapter 1
Slides chapter 1Slides chapter 1
Slides chapter 1
 
Prototype model and process
Prototype model  and processPrototype model  and process
Prototype model and process
 
RAD Model & Prototyping Of Software Engineering
RAD Model & Prototyping Of Software EngineeringRAD Model & Prototyping Of Software Engineering
RAD Model & Prototyping Of Software Engineering
 
Waterfall
WaterfallWaterfall
Waterfall
 
Software Development Life Cycle-SDLC
Software Development Life Cycle-SDLCSoftware Development Life Cycle-SDLC
Software Development Life Cycle-SDLC
 
The Waterfall Model
The Waterfall ModelThe Waterfall Model
The Waterfall Model
 
SDLC-Phases
SDLC-PhasesSDLC-Phases
SDLC-Phases
 
software product and its characteristics
software product and its characteristicssoftware product and its characteristics
software product and its characteristics
 

Similar to Basics of-software-development

Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)FarjanaAhmed3
 
COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON Jitender Suryavansh
 
Usability principles 1
Usability principles 1Usability principles 1
Usability principles 1Sameer Chavan
 
Targeted documentation
Targeted documentationTargeted documentation
Targeted documentationAlyssa Fox
 
Role of an Architect in Software Usability Engineering
Role of an Architect in Software Usability EngineeringRole of an Architect in Software Usability Engineering
Role of an Architect in Software Usability Engineeringthinakes
 
A simple test paper from Chen
A simple test paper from ChenA simple test paper from Chen
A simple test paper from Chentechweb08
 
Chen's second test slides
Chen's second test slidesChen's second test slides
Chen's second test slidesHima Challa
 
A simple test paper from Chen
A simple test paper from ChenA simple test paper from Chen
A simple test paper from Chentechweb08
 
A simple test paper from Chen
A simple test paper from ChenA simple test paper from Chen
A simple test paper from Chentechweb08
 
Chen's second test slides again
Chen's second test slides againChen's second test slides again
Chen's second test slides againHima Challa
 
Quick win ways to mitigate feature creep
Quick win ways to mitigate feature creepQuick win ways to mitigate feature creep
Quick win ways to mitigate feature creepEnov8
 
2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptx2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptxDevangGentyal
 
Uxpin web ui design patterns 2014
Uxpin web ui design patterns 2014Uxpin web ui design patterns 2014
Uxpin web ui design patterns 2014MoodLabs
 
Open Source Project Management
Open Source Project ManagementOpen Source Project Management
Open Source Project ManagementSemen Arslan
 
Software engineering
Software engineeringSoftware engineering
Software engineeringsweetysweety8
 
Professional project writing
Professional project writingProfessional project writing
Professional project writingjkmaster
 

Similar to Basics of-software-development (20)

Quality Software Development
Quality Software DevelopmentQuality Software Development
Quality Software Development
 
Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)
 
Usability for all budgets
Usability for all budgetsUsability for all budgets
Usability for all budgets
 
COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON
 
Usability principles 1
Usability principles 1Usability principles 1
Usability principles 1
 
Targeted documentation
Targeted documentationTargeted documentation
Targeted documentation
 
Mobile app project
Mobile app projectMobile app project
Mobile app project
 
Testing User Manual
Testing User ManualTesting User Manual
Testing User Manual
 
Role of an Architect in Software Usability Engineering
Role of an Architect in Software Usability EngineeringRole of an Architect in Software Usability Engineering
Role of an Architect in Software Usability Engineering
 
A simple test paper from Chen
A simple test paper from ChenA simple test paper from Chen
A simple test paper from Chen
 
Chen's second test slides
Chen's second test slidesChen's second test slides
Chen's second test slides
 
A simple test paper from Chen
A simple test paper from ChenA simple test paper from Chen
A simple test paper from Chen
 
A simple test paper from Chen
A simple test paper from ChenA simple test paper from Chen
A simple test paper from Chen
 
Chen's second test slides again
Chen's second test slides againChen's second test slides again
Chen's second test slides again
 
Quick win ways to mitigate feature creep
Quick win ways to mitigate feature creepQuick win ways to mitigate feature creep
Quick win ways to mitigate feature creep
 
2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptx2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptx
 
Uxpin web ui design patterns 2014
Uxpin web ui design patterns 2014Uxpin web ui design patterns 2014
Uxpin web ui design patterns 2014
 
Open Source Project Management
Open Source Project ManagementOpen Source Project Management
Open Source Project Management
 
Software engineering
Software engineeringSoftware engineering
Software engineering
 
Professional project writing
Professional project writingProfessional project writing
Professional project writing
 

Recently uploaded

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 

Recently uploaded (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 

Basics of-software-development

  • 1. Very rough overview Users need some type of software/you decide to build a piece of software After they contact you, you investigate what problems they're having and how you can help the users to solve them If you develop software for potential users, then you should find them and ask them what features they need After getting some ideas of what the users need, you start developing some solution (or provide an existing package), while periodically checking with the users to ensure that you're on the right path. Also, you should constantly check with deadlines and if there's not enough time to complete everything, then you should omit some non-important features to make completing the really critical ones on time possible At some point the software will become stable, with no major and few minor bugs, and almost no features left to implement. Most projects end here. If you're developing a product, then most likely you'll go back to point 2 to get some new ideas and missing pieces to develop and continue from there.
  • 2. Basics of Software Development Users Development process Tools Features Schedules Existing packages
  • 3. Users You are designing for users, so they are the most important factor in software development Users will tell you what they want, but don't trust their words – investigate how they work, what are the bottlenecks and what you can automate or improve in their workflow – what they currently do by hand that can be done by a computer It's your fault if your software doesn't solve the users problems, not theirs Users are stupid*, so make your user interface as simple and intuitive as possible Stupidity doesn't mean mental problems, it means having a lot of (better) things to do than learning to use your programs, so software that doesn't force you to think is better Keep the users happy while developing – let them know you care Let them know you listen to their complaints Don't talk about technical details, and don't let them. Let them focus on their problems. If you keep them happy, they will go out of their way to help you * Stupid is a technical term
  • 4. Tools Technologies After understanding what the users need, you'll basically determine what technologies you will need to use – web technologies are better for multi-user online apps, or performance-critical apps where computations have to be performed on the server. For office applications (or specialized tools for daily use, e.g. bookkeeping), desktop apps are better. But these are general guidelines; you'd better decide what to use based on the problem description. No matter what technologies you choose, the user interface should still be familiar to the user. Sometimes innovation isn't a good thing. That's especially true in user interface. That being said, we've seen very innovative user interfaces that are easy to use. Being conservative doesn't mean you mechanically repeat what has been done before – it means you provide an user interface that is intuitive and usable like it has been before. Programming languages The choice of programming languages has always been debated; choose what absolutely works for you and what you know well; you can read Joel Spolsky's Blog Entry about this (though the article is from 2006 and he disses Lisp and Ruby which are completely working alternatives). There really are programming languages which take productivity to unseen levels, but you will really need advanced hackers to write stuff, and for most projects they are an overkill (simple web-pages are the easiest, cheapest and fastest to do in PHP).
  • 5. Features Almost all software is judged by its features. Gmail is great because it has the “send email” (and other) features, Firefox is great because it has the “browse the web” and countless other features. Users will frequently decide which competing product to buy based on so-called “feature charts”, which is a side-by-side comparison of numerous products and their features. You've probably already seen one (example here). You may find feature charts unusable, but many customers will still ask you questions like “Does your product have X?” and you may find that having X is almost always easier than explaining to customers that X is useless to them. Many easiest to implement features are the ones with most demand. So don't disappoint the users, implement what they are asking for and keep working on what they truly need. With the above said, you should try to keep software as simple as possible, and sometimes it means omitting some features. Some things may seem simple (for example, iPod), but under the covers there can be a complex infrastructure. It's the designer's job to make the product seem simple. Software with countless features are sometimes harder to use, harder to maintain, and called bloatware (full with useless features). Elegance and simplicity are also features, and very important ones; don't trade them into a horde of other, less important features. I will also quote Joel Spolsky here.
  • 6. Existing packages All new code must be written, debugged, tested, shown to users, modified, tested again, and maintained. So, whenever applicable, it's better to use code written, tested, and maintained by better developers (e.g. use Wordpress instead of writing your own blogging software). Maintaining costs are frequently the highest. The original author may have left, the code may be undocumented, low quality, etc. Maintaining low quality and obscure code may be orders of magnitudes higher than writing your own, or modifying an existing open-source code base. Open source projects tend to be high quality, because they are usually reviewed by a number of developers, so bugs tend to be fixed more quickly. Also open-source projects tend to have shorter release cycles than their proprietary counterparts, because the manufacturing costs associated with the latter. That way latest changes and updates are incorporated more quickly.
  • 7. Schedules Work takes time; great work takes a lot of time. Users/customers don't understand that adding new features/fixing bugs takes time As a result, sometimes when you say “it will take two weeks”, customers ask: “couldn't it be done in 10 days?” You may think that you'll squeeze the 14-day work in 10 days, but quality may suffer. Actually, in real world, managers think that they can make employees work faster by giving them unrealistic schedules. Experienced developers know how to sacrifice quality to meet short deadlines, but the final product is lacking in testing.