About this blog

Welcome to Ha Le's Work and Research Blog. This page contains information and experience that I've collected during my college's years and other work experience. The topics included are Software development (C++ mainly), Robotics Technology and other related fields.

Search This Blog

Friday, February 12, 2010

How to start up a Software Project

Currently, I'm working as a program developer for COHESIVE project (UNL - NE, USA). My responsibility is to develop a CAD program customized to the project which involves analyzing viscoelastic material-based structure or object. The solver's already complete and my job is to create a user-friendly and integrated program implementing geometry, pre and post processing for the solver.


First step - Domain Vocabulary


This was totally brand new to me, I've been using CAD programs like SolidWorks for at least 2 years through my various projects at uni, but design one, never thought of that. So naturally, I jumped on Google and try to figure out all the concepts that need to be understood, and those are "Domain Vocabulary", this process might take you a day or two, sometime few days if it was something complicated or something you never done before. For me, the concept of how a FEA program works, how mesh are generated in code, how data is structured and how the output of the solver is manipulated were the main ambiguity that had to be addressed. Technical terms specific to the domain like tractions, body force, local mesh, global mesh etc.. were also looked at.


This process might be irritating cos you got a feeling ya not actually doing any "real" work, but it's extremely important in term of how you communicate with your clients (in my case, my supervisor), your team and your technical advisor (the one shows you the math). Imaging how're you gonna develop your software if you don't understand fully what's the client's need when it was explained in  "foreign language". It also enable you to have the choices of prioritizing the features that are most significant to the project, to be done first, if you follow the popular incremental model in software development.


Second step - Determine Needs and Constraints


This step is understood and taken by almost all programmers, but that's exactly why we have so much confidence in ourselves when analysing need and constraints that we sometime oversee details, which is disastrous for the project.


One of the things that is quite frequently missed is "Priority of Needs". Normally, customer comes to you with a description of what he wants, sometime in the form of an idea, or a procedure, or even preferred method. But one thing sometime missed out, especially in a large project, is "How the needs prioritized?", what's the most painful thing that needs to be addressed? What are extras but preferred to have? What was requested only by the customer's own interpretation of the problem (with sometime not really necessary)? 


Why these info are usually missed out? Because even the customer doesn't think about it, unless asked. Why are they so important? Because of constraints! There's never a perfect software, there's so many things to considered, commercializablity, data integrity, security, adaptablilty, mobility, cross-platform ability, user-friendly interface etc... And customers always want ... all that....and within a small budget!!! without considering what's most important! Therefore, a programmer should take the first chat with the client away, think about all his requirements and those by the programmer's own experience and perspective. Then write them all out, come to the client again with a full understanding about what each ability means to the project (product) then prioritize them with the client, in regarding to the cost of the project.


Only after that, the development process involving potential solutions, estimated cost of each, further project's requirements etc can be executed. Depends on your application, you can choose the process models most appropriate. 









No comments:

Post a Comment