In this series of posts I'm planning to cover on following topics:
1. Terms Used in Concurrency
2. Monitors And locks
3. Threads States
4. Concurrency Package
5. Thread Pools
6. Threads in Spring
A SOFTWARE ENGINEER FROM CHENNAI IS HERE TO WALK THROUGH THE EXPERIENCES... INCIDENTS... ACCIDENTS... ERRORS... SUCCESSES... IN AND AROUND HER.
Being worn-out with just project estimation and re-estimation alone for the past few months, why not write some thing about software estimation though its not a small topic for me write few lines and finish off. So, here goes a very small snap-shot...
As like the saying, 'Don't fail to plan unless you plan to fail', a crystal clear planning is the basic necessity for successful execution of a project and estimation forms of the one important basics of the plan.
By Software estimation what we estimate on:
1) Effort: Estimation of amount of work to be done. Eg: Number of Function Points involved or LOC to be developed.
2) Time & Cost: Time needed to get the work done. Usually expressed in work-months/man-months/Person-weeks.
3) Resource: Involves estimation of hardware (Well we can't develop a cloud management system with just 2 Desktop terminals!), software (Need to pay for MS products!), human resource (most important part: rightly skilled human resource availability), network infrastructure etc...
So, how are these estimations done and what are considered while estimating?
Input or factors to be considered:
1) Historical data (Experience matters!!!)- Historical data from prior project on similar domain/technology/
2) Complexity - Effort needed for developing a inventory management system and space shuttle monitoring system are not same. Complexity of the requirement matters!
3) Resource Skill level - A very important factor, which leads to include training cost. In some cases, this is a deciding factor for project implementation platform too!
4) Prior experience on similar projects - Lessons learned always helps in future!
5) Tools - Usage of which can ease the job to fasten the implementation/test phases. There is difference in writing code in Eclipse and EditPlus.
6) Process - Agile/XP/Waterfall too matters. (2hrs/day on Stand-up meetings will have impact on T&C!)
7) Development platform - They say, its faster and easier to develop using Java/JEE.
8) Of course Software requirement :) (We are not arrows with out target! But includes both FR and NFR)
So, how these estimated are done? There are lots and lots of estimations techniques: COCOMO, parametric model - Cost Driver based estimation, SDM, SLIM etc...
After doing all, should we rely on what was estimated during project initiation till project closure? A very important thing, estimate must be revised over the phases of the project at different stages. Requirement takes different image over the course of execution and as usual unexpected surprised welcomes every new day. Beyond everything, T&C requirements should be kept on track. Cost-over run project gets scrapped too! These mandates the revision of estimates at due intervals.
Reminds me of my S/W Engg Prof. iterating, "None of the Software projects completes on estimated cost and time".
After all, those are just estimates and not actuals! We need something under the term called, "Variance" too!
Can't stop again! Renewing my blogging habit after a long time, its been a long interval this time.
Can't imagine how I missed blogging while there were a lots happening around... Oracle Acquisition of SUN, Booming of Social Networks, UPA's second term, Introduction of CSAT, SCAM filled CWG.... in the personal front: moving back to Chennai, its unbearable climate ... a lot more.
But now, I pledge to continue non-stop over the hurdles.
Cloud Computing !!! Cloud Computing !!! Cloud Computing!!!! - Its Cloud everywhere. So, whats that? Something like grid computing? Is it providing Hardware as a Service along with SaaS ?
Some interesting short videos which explains this, really interesting: