<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Centraldev Blog &#187; Development</title>
	<atom:link href="http://www.centraldev.net/en/blog/category/development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.centraldev.net/en/blog</link>
	<description>Thoughts and articles about technology, software development and company news</description>
	<lastBuildDate>Tue, 14 Jun 2011 17:38:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How software projects estimation works</title>
		<link>http://www.centraldev.net/en/blog/development/how-software-projects-estimation-works</link>
		<comments>http://www.centraldev.net/en/blog/development/how-software-projects-estimation-works#comments</comments>
		<pubDate>Tue, 14 Jun 2011 17:38:27 +0000</pubDate>
		<dc:creator>Marcelo Ruiz</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.centraldev.net/en/blog/?p=43</guid>
		<description><![CDATA[Many clients new to software development projects find it hard to understand how we estimate their projects. They think we make up numbers in the air with the objective to reach the amount we want to earn. However, it is your right, as a client, to demand a clear explanation on how estimations are made. [...]]]></description>
			<content:encoded><![CDATA[<p>Many clients new to software development projects find it hard to understand how we estimate their projects. They think we make up numbers in the air with the objective to reach the amount we want to earn. However, it is your right, as a client, to demand a clear explanation on how estimations are made. Here is how we do it at Centraldev.</p>
<p>Once we have a clear idea of what has to be done, we try to organize project requirements into a format that it is more usable for software developers. This can be in the format of <a href="http://en.wikipedia.org/wiki/Use_case" target="_blank">Use Cases</a> or <a href="http://en.wikipedia.org/wiki/User_story" target="_blank">User Stories</a>. The advantage we see in these formats is that they provide a clear guide to both the client and the developer of a valuable goal that can be accomplished with the system under design. So, the developer will work on a task until the goal can be completed with the software.</p>
<p>Each work item (either use case or user story) will receive a &#8220;weight&#8221; estimation from the development. This estimation is based in both the time needed to complete it and the complexity it may involve. Based in previous experience, we can then translate this weight into hours or days.</p>
<p>Apart from the development work items, there are other tasks that are often forgotten like, project, environment and team setup, meetings, planning, testing, project management and data transformation, among others. All these tasks also add up time to the estimation.</p>
<p>Predicting how long a project could take is very difficult and practically impossible. As humans the amount of work we can produce per hour varies very widely. There could be days when we get distracted easily and other days we are much more productive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.centraldev.net/en/blog/development/how-software-projects-estimation-works/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCRUM for clients</title>
		<link>http://www.centraldev.net/en/blog/development/scrum-for-clients</link>
		<comments>http://www.centraldev.net/en/blog/development/scrum-for-clients#comments</comments>
		<pubDate>Tue, 20 Oct 2009 21:56:52 +0000</pubDate>
		<dc:creator>Marcelo Ruiz</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.centraldev.net/en/blog/?p=34</guid>
		<description><![CDATA[UPDATE: this post has evolved into the About Our Work Methodology page in our website. This post is intended for customers to understand the implications of using this methodology and how we implement it in our daily work. Scrum is an agile development methodology based in the following principles: The customer or Product Owner has [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><strong>UPDATE: </strong>this post has evolved into the <a href="http://www.centraldev.net/en/methodology.html">About Our Work Methodology</a> page in our website.</p>
<p style="text-align: left;">This post is intended for customers to understand the implications of using this methodology and how we implement it in our daily work.</p>
<p>Scrum is an agile development methodology based in the following principles:</p>
<ul>
<li>The customer or 	Product Owner has an important involvement in the development 	process.</li>
<li>Product 	requirements are defined with the Product Owner (usually as User 	Stories) and put together as Product Backlog Items. It is a desired 	practice that Product Owner actually writes requirements.</li>
<li>Product Owner 	prioritizes the Product Backlog Items in accordance with its 	business value.</li>
<li>Product Backlog 	Items are estimated, whether by time or relative weight, only by the 	development team. This estimation is adjusted constantly, usually at 	the start of each Sprint.</li>
<li>The development 	cycle is divided into time-boxed Sprints of a fixed duration 	(typically 2 to 4 weeks). Each Sprint has a clear Sprint Goal and 	produces a working product increment.</li>
<li>Before each 	Sprint starts, a Sprint Planning meeting is done to choose which 	requirements are implemented and the details on each are discussed. 	The whole development team and Product Owner participate.</li>
<li>The 	requirements that are implemented in a Sprint constitutes the Sprint 	Backlog.</li>
<li>Once a Sprint 	starts, no changes are accepted for the Sprint (bugs could be an 	exception).</li>
<li>A Daily Scrum 	meeting is held every morning only between members of the dev team. 	This is a short-stand-up meeting where each member communicates: 	what he did yesterday, what he will be doing today and any 	impediment he is facing.</li>
<li>At the end of 	each Sprint a Sprint Review or demo is held where the team 	demonstrates the product increment to the Product Owner and any 	other involved stakeholder.</li>
<li>At the end of 	each Sprint, a Sprint Retrospective is held to discuss what it is 	working and what it is not.</li>
</ul>
<h2>How we define what to do</h2>
<p>It is important for us to clearly understand what you want to do. We usually like to put this on a <strong>Project Vision</strong> document. Customers often think that, as we developers we are not interested in the business background for a project. Well, not only we are very interested but we strongly need to know all the aspects of the business related to a project in order to understand the project and to make key decisions in the design and implementation stage of the development cycle.</p>
<p>A Project Vision document contains all available thinking about what a project will be. It defines the goals of a project, why they make sense and what the high-level features, requirements or dates for a project will be.</p>
<p>The most important points to cover in the Project vision are:</p>
<ul>
<li><strong>Vision 	Statement</strong>. This is usually a once 	sentence that describes this specific release of the project. This 	is also known as the problem statement because usually projects are 	planned to solve a specific problem.</li>
<li><strong>Project 	Goals</strong>. Describe how this project 	contributes to the goals of the organization, customer or final 	user.</li>
<li><strong>Business 	Opportunity.</strong><span style="font-weight: normal;"> Describe what is the current business situation, what users&#8217; or 	customers&#8217; needs are not being satisfayed, what competitors are 	doing or offering and how we can change the world with our solution.</span></li>
<li><strong>Users 	Description</strong><span style="font-weight: normal;">. 	Describe who are the customers, what problems does this software 	solve for them and why they would use or buy the software.</span></li>
<li><strong>Stakeholders 	Description</strong><span style="font-weight: normal;">. 	Who are the stakeholders (people with power on the project but not 	necessary the users/customers) and what role they have in the 	project.</span></li>
<li><strong>Product 	Features</strong><span style="font-weight: normal;">. 	This section describes the high-level features for the system. We 	prefer not to employ use cases here because they are too detailed 	and usually people reading the Project Vision just want a short 	overview identifying the key functions. User stories could be a list 	too long to describe in the Project Vision. That&#8217;s why prefer to 	write it as a list of features. It is important to differentiate 	between essential features (priority 1) and 	desired-but-not-essential (priority 2).</span></li>
<li>
<p style="font-weight: normal;">Other topics could be Risks and Assumptions being made and 	Dependencies on other projects, companies or organizations.</p>
</li>
</ul>
<h2>How we define requirements</h2>
<p>Requirements also define “what to do” in a project, although, with a deeper level of detail than what can be found in the Product Features of the Vision document.</p>
<p>There are several types of Requirements. We classify them as Functional and Non Functional (Usability, Reliability, Performance, Supportability, Implementation, Interface, Operations, Deployment and Legal).</p>
<p>Functional Requirements are among the most important because they define the core of the system, what the system must do, its features and capabilities. Functional Requirements are usually defined as <strong>User Stories or Use Cases</strong>.</p>
<p style="font-weight: normal;">We strongly think that requirements should be written by the customer with one or more members of the development team or, at least, participate actively in the requirements definition.</p>
<p style="font-weight: normal;">The best method to involve the client in the definition of the system requirements is by using User Stories because they are easier to conceive and because they are formulated in a more natural and spoken language.</p>
<p style="font-weight: normal;">
<h3><strong>User Stories</strong></h3>
<p>User Stories define a goal that a specific type of user has when using the system, in a natural language. Although it is not necessary to follow it, we use this format to describe the User Stories:</p>
<p><strong>As a [type of user], I want/can/need/etc. [goal or need], so I can [reason].</strong></p>
<p>An example of a User Story, for an e-learning web site could be:</p>
<p><em>As a Teacher,I want to create an online test, so I can measure the level of the students.</em></p>
<p>User Stories have a more important advantage. They are an easier method to have non technical involved people define requirements. For example, it is easier for a Product Owner to write a list of requirements in this format than in the format of a Use Case diagram or a list of Use Cases.</p>
<p>User Stories emphasize verbal communication, in comparison to written language. The use of the first person to describe the goal make them sound more natural and tend to avoid misunderstandings typical of a written document.</p>
<p>We strongly prefer to define Functional Requirements as User Stories or inspired by them (because sometimes they could be too long) because they are a lot much easier to discuss with clients and users.</p>
<p>All the User Stories (or Use Cases or Features, depending on what we decide to use), along with any other requirement that is expressed in any different way are put together in the Product Backlog. This constitutes all what has to be done to complete the product.</p>
<p>We define the Product Backlog in a <strong>System Requirements Specifications</strong> (SRS) document and we manage it (time and resources) using a spreadsheet. The SRS document could contain additional information about each User Story. The Non-Functional requirements are also described in the SRS.</p>
<h3><strong>Acceptance Criteria</strong></h3>
<p>While the Product Backlog defines all what has to be done, sometimes it is risky to give the customer a fixed estimate or quote based only in simple User Stories or Features.</p>
<p>To solve this we sit together with the customer  and go through each User Story and  define what we call the <strong>Acceptance Criteria</strong>. This describes the high level features a User Story has to meet and the Tests it has to pass in order to be accepted as complete either by the development team or by the customer.</p>
<p>Examples of Acceptance Criteria for the above User Story could be:</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<tbody>
<tr>
<td width="100%" valign="TOP"><em>As a Teacher,I want 				to create an online test, so I can measure the level of the 				students.</em></p>
<p><em><strong>Description</strong></em></p>
<ul>
<li><em>Multiple 					choice type test</em></li>
<li><em>Hints for 					wrong or good answers (not required).</em></li>
<li><em>Defaults to 3 					answer options.</em></li>
<li><em>Ability to add 					as many answer options as needed.</em></li>
<li><em>Ability to 					remove unwanted answer options (e.g. I may want only 2)</em></li>
</ul>
<p><em><strong>Acceptance Tests</strong></em></p>
<ul>
<li><em><span style="font-weight: normal;">Submit 					empty form should show a warning message to user, indicating 					required fields.</span></em></li>
<li><em><span style="font-weight: normal;">Created 					test is only visible in the class for which it was created.</span></em></li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2>Resources</h2>
<p>Scrum Video: http://www.youtube.com/watch?v=Q5k7a9YEoUI<br />
Scrum Presentation: <a href="http://www.mountaingoatsoftware.com/scrum-a-presentation">http://www.mountaingoatsoftware.com/scrum-a-presentation</a></p>
<h2>Bibliography</h2>
<p>The Art of Project Management – Scott Berkum</p>
<p>UML and Patterns – Craig Larman</p>
]]></content:encoded>
			<wfw:commentRss>http://www.centraldev.net/en/blog/development/scrum-for-clients/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

