<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.bespoke.com.my/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">agile</title><subtitle type="html" /><id>http://blogs.bespoke.com.my/blogs/agile/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.bespoke.com.my/blogs/agile/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2006-10-04T06:57:00Z</updated><entry><title>Agile charts</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/11/03/Agile-charts.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/11/03/Agile-charts.aspx</id><published>2006-11-02T05:29:00Z</published><updated>2006-11-02T05:29:00Z</updated><content type="html">&lt;p&gt;Conventional software project management uses Gantt Chart to plan task activities and estimate how long it will take to complete a project. However, it is hard to maintain and overshadow the the big picture with details. The most 2 important things to know in developing a project are &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Are we on time?&lt;/li&gt;&lt;li&gt;Are we on budget?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By using the burn down chart or budget chart, we will get a clearer picture on our current project state. From there, we can estimate the works to be completed with reasonable budget. Look at the example below:&lt;/p&gt;&lt;p&gt;&lt;img height="375" src="http://www.agilekiwi.com/1745f770.jpg" width="607" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The dotted gray line is the target. In this example, the project is 10 weeks long. Each week, we expect to complete 10% of work and use up 10 % of budget.&lt;/p&gt;&lt;p&gt;That&amp;#39;s the ideal scenario and of course real worls is different. That&amp;#39;s why we need another 2 lines. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;The orange line shows how much budget has been &amp;quot;burned&amp;quot;. It is based on actual hours worked by the team. in this example, we are 3 weeks into the project and we&amp;#39;ve burned 40% of the budget. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The green line shows percent complete. It is based on features-completed so far. In this example only 20% of work completed at the end of week3.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The project is in trouble. We&amp;#39;ve spent 40% of the budget to complete only 20% of work. According to plan, we should have use 30% of budget to complete 30% of work. At least, we noticed the bad&amp;nbsp;progressing early and we still have times to fix it.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a href="http://www.agilekiwi.com/1745f770.jpg"&gt;&lt;/a&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=21" width="1" height="1"&gt;</content><author><name>nazura</name><uri>http://blogs.bespoke.com.my/members/nazura.aspx</uri></author></entry><entry><title>Event Publication and Subscription on SCFC or CAB</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/11/02/Event-Publication-and-Subcription-on-SCFC-or-CAB.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/11/02/Event-Publication-and-Subcription-on-SCFC-or-CAB.aspx</id><published>2006-11-01T07:48:00Z</published><updated>2006-11-01T07:48:00Z</updated><content type="html">&lt;p&gt;On SCSF and CAB there two things that for me is new. First is Event Publication. Event Publication is the publisher of event where the event if fire. As example i have this kind of code:&lt;br /&gt;&amp;nbsp;&lt;br /&gt;public void item_clicked(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Clicked();&lt;br /&gt;}&amp;nbsp;&lt;/p&gt;&lt;p&gt;and i want publish this event so the other WorkItem can subscribe it. So what i do is i create an Event publication&lt;br /&gt;&lt;br /&gt;[EventPublication(EventTopicNames.ItemClicked, PublicationScope.Global)]&lt;br /&gt;public event EventHandler&amp;lt;EventArgs&amp;gt; ItemIsClicked&lt;/p&gt;&lt;p&gt;this is for publish the event and we have to create one protected virtual method to invoke that event as example:&lt;/p&gt;&lt;p&gt;protected virtual void OnItemIsClicked(object item)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(null != ItemIsClicked)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  ItemIsClicked(this, new EventArgs())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;but at the item_clicked method we have to put CommandHandler so the CAB know which event have involve. What we have to do is &lt;br /&gt;&lt;br /&gt;[CommandHandler(CommandNames.ItemClickedCommand)]&lt;br /&gt;public void item_clicked(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Clicked();&lt;br /&gt;
}&amp;nbsp;&lt;/p&gt;&lt;p&gt;that on event publication... on other presenter or Module Controller we can subscribe event as example like below;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;[EventSubscription(EventTopicNames.ItemClicked, ThreadOption.UserInterface)]&lt;br /&gt;public void ItemClicked(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.Clicked();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; panel.Text = &amp;quot;Clicked&amp;quot;;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;thats what i&amp;#39;ve trying to familiar with CAB od SCSF and if there is some thing wrong... please comment it and fix the wrong... i still in learning on this kind of CAB and SCSF&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=19" width="1" height="1"&gt;</content><author><name>hakimin</name><uri>http://blogs.bespoke.com.my/members/hakimin.aspx</uri></author><category term="Smart Client" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/Smart+Client/default.aspx" /></entry><entry><title>Smart Client Software Factory and CAB</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/07/Smart-Client-Software-Factory-and-CAB.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/07/Smart-Client-Software-Factory-and-CAB.aspx</id><published>2006-10-06T08:19:00Z</published><updated>2006-10-06T08:19:00Z</updated><content type="html">&lt;p&gt;What CAB? CAB is short term for Composite UI Application Block. This is realase by Microsoft to solve proble of many developer face when try to copy cat on wincontainer like Outlook. Using CAb, all proble of share state, transfering data and so on we face when using a wincontainer is solve. In CAB, its contains a part as&amp;nbsp; major item. Work Item, SmartPart, ShellProgram, Presenter and so on. WorkItem is working as a module which can contain few smartpart. SmartPart is a user control or a view for user to look. A presenter is a place we put event handler, methods and rule or whatever. This part will communicate together and will be inject into shellProgram and run on it.&lt;/p&gt;&lt;p&gt;&amp;nbsp;So if we have 4 or more workItem, we can combine it in ShellProgram and the data between workitem can be transfer to each other and we do not need to press our brain to work hard to think about it. All of ot will be done and will be help by using CAB.&lt;/p&gt;&lt;p&gt;But, ofurtunately, Smart Client Software factory came and more on helping us on developing. Using SCSF is very greatfull to me. Because, by using it, we simplu can reduce a time to think about on develop system on CAB. &lt;/p&gt;&lt;p&gt;It is realy easy. Very easy, even i who just very new in this programming arena can understand it. Create Smart Client solution when open VS and you just only have to follow the order and it is have guidance to. All help document is there. And to accomplish this, download all this from Microsoft. Refer to gotDotNet and find more about SCSF and CAB.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;Happy trying dude.&lt;/p&gt;&lt;p&gt;adios&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=18" width="1" height="1"&gt;</content><author><name>hakimin</name><uri>http://blogs.bespoke.com.my/members/hakimin.aspx</uri></author><category term="Smart Client" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/Smart+Client/default.aspx" /></entry><entry><title>Estimating point size on User Stories</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/07/Estimating-point-size-on-User-Stories.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/07/Estimating-point-size-on-User-Stories.aspx</id><published>2006-10-06T08:13:00Z</published><updated>2006-10-06T08:13:00Z</updated><content type="html">&lt;p&gt;Why it is important to clearly estimate point size of user stories. It is important because if we are over estimate the user stories point it will give a bad result on velocity and burdown chart. Over estimate is have to but if we are over2 estimate, that have to avoid. When we over estimate to some of user stories then it will cost of free time and this will cause of increasing of budget.&lt;/p&gt;&lt;p&gt;Under estimate is also bad on estimating user stories point... because if we under estimate a user story point... it will make delivery delay and this will dissapointed user because its not follow the schedule and this will make corporate to think about your position of Project Manager and Developer. under estimate user story point have to be avoid.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Estimating a user story point is okey if you over estimate it a little but avoid under estimate a point. As an example, you have a user story about &amp;quot;As a user i could search an item in the system&amp;quot;. And you have estimate it that it will cause about 4 point however the actual point is 3. It is okey if you over estimate a little but if you estimate the user story is 2 point... it can cause delay and developer have to give a very high commitment to the user story because you have under estimate the user story.&lt;/p&gt;&lt;p&gt;Estimating actually is quite easy. On all user story you have create... chose the easiest one which cause 1 point. and choose other user story. If the user story is twice difficult to the first one, so multiply it. so the second user story will be 2 and so on. And on estimating user story point, you have sit down with all you developer and pruduct owner and project manager. So estimating point to user story will be accurate.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Adios&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=17" width="1" height="1"&gt;</content><author><name>hakimin</name><uri>http://blogs.bespoke.com.my/members/hakimin.aspx</uri></author><category term="User Stories" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/User+Stories/default.aspx" /></entry><entry><title>Dealing with user proxies</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/06/Dealing-with-user-proxies.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/06/Dealing-with-user-proxies.aspx</id><published>2006-10-05T06:48:00Z</published><updated>2006-10-05T06:48:00Z</updated><content type="html">&lt;p&gt;User proxies are representative of the real user. It needs careful consideration to pick appropriate user proxies&amp;nbsp;that really understands the goal of the project and &amp;nbsp;view the the system similarly to domain experts. Although user proxy will be the decision maker, try to establish connection with the real-users. The best way for doing this is to request permission to start a &lt;em&gt;user task force&lt;/em&gt;. It can consists any number of real users to gather their ideas on how they want the&amp;nbsp;application to be developed. You can do this by conduct a series of discussion by taking top-level direction from user proxy. Show them the prototypes and generate feedback during task force meeting. &lt;/p&gt;&lt;p&gt;What if there really no user available and you must resort to user proxy, be sure to use more than one user proxy with different background. .&amp;nbsp;This helps reduce the likelihood of building a system that meets exactly one person&amp;#39;s needs. For example, combine marketing people with domain experts rather than using two domain experts. You can also use&amp;nbsp;the competing product&amp;nbsp;feature as a guide and source for your user stories. Get an idea and insert the new feature that they don&amp;#39;t have. Try to find their features that&amp;nbsp;are always discussed in online user group&amp;nbsp;and are the features discussed because they are complex to use?&amp;nbsp;This will be the advantage and value-add to your application.&lt;/p&gt;&lt;p&gt;Another technique to deal with user proxy rather than real users is to release the beta version of product soonest possible. Getting the real users use it early so that it can help to identify inconsistencies between the thinking of user proxy and real users. &lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=16" width="1" height="1"&gt;</content><author><name>nazura</name><uri>http://blogs.bespoke.com.my/members/nazura.aspx</uri></author></entry><entry><title>Principles behind the Agile Manifesto</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/06/Principles-behind-the-Agile-Manifesto.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/06/Principles-behind-the-Agile-Manifesto.aspx</id><published>2006-10-05T01:45:00Z</published><updated>2006-10-05T01:45:00Z</updated><content type="html">&lt;ul&gt;&lt;li&gt;


We follow these principles:

Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.&lt;/li&gt;&lt;li&gt;

Welcome changing requirements, even late in
development. Agile processes harness change for
the customer&amp;#39;s competitive advantage.

&lt;/li&gt;&lt;li&gt;Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.

&lt;/li&gt;&lt;li&gt;Business people and developers must work
together daily throughout the project.

&lt;/li&gt;&lt;li&gt;Build projects around motivated individuals.Give them the environment and support they need,
and trust them to get the job done.

&lt;/li&gt;&lt;li&gt;The most efficient and effective method of
conveying information to and within a development
team is face-to-face conversation.

&lt;/li&gt;&lt;li&gt;Working software is the primary measure of progress.

&lt;/li&gt;&lt;li&gt;Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.

&lt;/li&gt;&lt;li&gt;Continuous attention to technical excellence
and good design enhances agility.

&lt;/li&gt;&lt;li&gt;Simplicity--the art of maximizing the amount
of work not done--is essential.

&lt;/li&gt;&lt;li&gt;The best architectures, requirements, and designs
emerge from self-organizing teams.

&lt;/li&gt;&lt;li&gt;At regular intervals, the team reflects on how
to become more effective, then tunes and adjusts
its behavior accordingly.&lt;/li&gt;&lt;/ul&gt;get it from ==&amp;gt;&lt;a href="http://www.agilemanifesto.org/" title="AgileManifesto" target="_blank"&gt;AgileManifesto&lt;/a&gt;&lt;br /&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=15" width="1" height="1"&gt;</content><author><name>m_sahrizal</name><uri>http://blogs.bespoke.com.my/members/m_sahrizal.aspx</uri></author></entry><entry><title>Prioritize the User Story</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/05/Prioritize-the-User-Story.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/05/Prioritize-the-User-Story.aspx</id><published>2006-10-04T06:36:00Z</published><updated>2006-10-04T06:36:00Z</updated><content type="html">&lt;p&gt;Now you have a list of user stories to be implemented. Before you could assigns all the stories to iteration, you need to identify the risk and value of stories to customers so that you can prioritize which story to be done first. A risk is any probable event or condition that have a potentially negative outcome on the project while value is how much&amp;nbsp;the story benefits the user. After identifying the risks and value, plot it to form a quadrant graph. Form there, you can prioritize which to be done first or assign to early iteration&amp;nbsp;and which will be done later.&lt;/p&gt;&lt;p&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td style="background-color:transparent;border:#ece9d8;"&gt;&lt;div&gt;&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=14" width="1" height="1"&gt;</content><author><name>nazura</name><uri>http://blogs.bespoke.com.my/members/nazura.aspx</uri></author></entry><entry><title>5 factor why planning a projects fail</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/05/5-factor-why-planning-a-projects-fail.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/05/5-factor-why-planning-a-projects-fail.aspx</id><published>2006-10-04T05:18:00Z</published><updated>2006-10-04T05:18:00Z</updated><content type="html">&lt;p&gt;After i read about Planning and Estimates in Agile there a 5 factors why planning a projects is fail. And i thinking about it.. Is it true.. Is it happen if i&amp;#39;m apply it into my development of products... Ermmmm... it maybe happen.. So here i want to share what i have exprienced and know with all of you. Hope you all can avoid this to happen in your project development.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. Planning always on activities rather than feutures.&lt;/strong&gt;&lt;br /&gt;In almost traditional approaches in planning a project, they are always give an avtivities status to the user rather than in Agile, we give a functional system to the user to keep up the status by an iteration. The traditional approach, by each of priod time, they will be give a status of an activities they have been doing on some priod of time reffering on Gant&amp;#39;s chart. On traditional approaches, activities is pass after the others activities is finished. But if the first one activities is still not finish the second activities will be not doing. Because it&amp;#39;s have to be pass down the activities. And because of this lateness, the delivery of the product will be delay from expected time. And also, the unindependent activities will make this traditional approaches will be dependent on other activities to be done.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. Multitasking on employee&lt;br /&gt;&lt;/strong&gt;When we assign a multiple task on a developer, the productivity of the developer will drop down. This is happen when the developer cannot do the all task which have been assign to him because of big responsibilities he have to carried. Because on this presure to meet a deadline with a lots of task, moral will down and productivity will drop. as example which in Mike Cohn book, as he said &amp;quot;Loading everyone to 100% of capacity has the same effect as loading a highway to 100% capacity: No one can make any progress&amp;quot;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. Features not developed on priority&lt;/strong&gt;&lt;br /&gt;The traditional planning approaches is always prioritized the work by value to the user and customer. In traditional planning, we will plan all activities to the success of a projects. Will will go through one by one all activities to meet the complete system. And all developer will consider that all activities which have been planned and put in Gant&amp;#39;s chart is mandatory and have to complete by the dateline. But at the end, the activities which have been complete is actualy no value to the customer. Customer not satisfy and have to reproduce. In agile this will not bee happen because user or customer will se a functional delivery by each iteration and any changes, the will find earlier.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. Ingoring of Uncertainty&lt;/strong&gt;&lt;br /&gt;Ignoring on uncertainty is very big mistakes on planning. Without assuming user will not change their requirement cann kill your project successness. The customer or user is first. That the slogan.We cannot hope to identify every activities that will be needed in the course of a project. Maybe later on suddenly customer found that some feuters which really greate to them. This can make late delivery and the planning is fail. To avoid this, we can work in shot iterate. We deliver functional system to user in every each iteration. Work in short iteration so user will alway can see a functional system that we will deliver to them. Some missing task we cann add into the system because user find it on functional delivery.&amp;nbsp;This will reduce uncertainty.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. Estimates become Commitments&lt;/strong&gt;&lt;br /&gt;Estimating is very important to a team because before the start working, the have to figure out what a risk they will face. If we as a planner estimates short of time but there a lot of risk a team will face, than the team will cannot deliver the product. So estimating have to equivalent to the commitments the team will give. Such as Phillip Armour (2002) said &amp;quot;An estimates is probability, and commitments cannot be made to probability&amp;quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Adios&lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=13" width="1" height="1"&gt;</content><author><name>hakimin</name><uri>http://blogs.bespoke.com.my/members/hakimin.aspx</uri></author><category term="Planning and Estimating" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/Planning+and+Estimating/default.aspx" /></entry><entry><title>Test Driven Development (TDD)</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/Test-Driven-Development-_2800_TDD_2900_.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/Test-Driven-Development-_2800_TDD_2900_.aspx</id><published>2006-10-03T07:39:00Z</published><updated>2006-10-03T07:39:00Z</updated><content type="html">&lt;p&gt;This TDD is the best development process i have been involved to.
The &amp;quot;Red, Green and Refactor&amp;quot; is the most esiest way i have ever
exprienced when develop a system. Before this, i majorly use Waterfall
model which get a bussines requirement from user first. It take a lot
of time and will make a uselees of time.&lt;/p&gt;&lt;p&gt;With this &amp;quot;Red, Green and Refactor&amp;quot;, i just doin the simplest , less bug and fastest way to develop a system.&lt;/p&gt;&lt;p&gt;First
of all, how to make use of this TDD. First, we must know about Unit
Test environment. U can get the environment by using NUnit or Unit Test
in .Net framework. And when doing a test, think it is for designing...
Not for doin a testing only.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is step2 tahat involve in thid TDD.&lt;/p&gt;&lt;p&gt;1. Fisrt things is, think as consumer when create a test. As example here :&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; I have a student and want to register to the system which whe call it StudentRegisSystem.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  example :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Student student = new Student();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp; student.Name = &amp;quot;Student Test&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp; student.ID = Guid.NewGuid();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  return student.Save();&lt;/p&gt;&lt;p&gt;2.
Compile after writing a code. We will be promt an error. Create a
domain class for student, create properties and Save() method just
simple as simple as.&lt;br /&gt;Just writing a code which to be need the code
can be compile only. After it can be compile, run a test to the
UnitTest. Like Example below:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; example: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  public partial class Student&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  private string m_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  private string m_id;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  public string Name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  get { return m_name; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  set { value = m_name; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp; public string ID&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  get { return m_id; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  set { value = m_id; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Save()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception(&amp;quot;The method or operation is not implemented.&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &amp;nbsp;&amp;nbsp;  &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3.
And Red signal will be display. The red signal will be displayed
marking thar there no implementation yet. So rewriting Save() method
just to make the test past. Rewrite like below as at Save() method.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  example:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  public string Save()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  return string.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.
Compile and run Unit Test again. This time Green light appear. Thats
meant the unit test have been pass. And the third factor in TDD is
Refactor. At this step refactor your code to be easy to maintain and be
read by other programmers which maybe make use of you code. Refactor
you code and run Unit Test everytime you make a change. This too make
sure thats is no bug after refactor.&lt;/p&gt;&lt;p&gt;The benefit of usinf thid
development process is, we will start small. Use this princip, &amp;quot;Think
Big, Start Small&amp;quot; . Using this TDD, we can detect a bug before we start
a real development. and also, we can design our system while testing
it. We have save our time and effort by using TDD. It is veryyy use
full of me and maybe for you. Try to make use of it.&lt;br /&gt;&lt;br /&gt;Adios.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=11" width="1" height="1"&gt;</content><author><name>hakimin</name><uri>http://blogs.bespoke.com.my/members/hakimin.aspx</uri></author><category term="Agile Development Process" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/Agile+Development+Process/default.aspx" /></entry><entry><title>Themes and Epic in User Stories</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/Themes-and-Epic-in-User-Stories.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/Themes-and-Epic-in-User-Stories.aspx</id><published>2006-10-03T07:35:00Z</published><updated>2006-10-03T07:35:00Z</updated><content type="html">What is themes and what is epic? Someday before, i dont know about these 2 kind of type in user stories.&lt;p&gt;First, i want to start with &lt;strong&gt;Epic&lt;/strong&gt;. &lt;strong&gt;Epic &lt;/strong&gt;is
actually a large user stories which we can break apart of it. We can
break it up into smallest user stories. As example here &amp;quot;Sarah want
send hers resume&amp;quot;. This is a large user stories. Because we can break
it apart into example below&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Sarah want to create hers resume&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Sarah want to select a company before send hers resume&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Sarah want find availabe position of work before send a resume&amp;quot;&lt;/p&gt;&lt;p&gt;Thats an example i can describe about an &lt;strong&gt;Epic&lt;/strong&gt;.
It is a large user stories thats can be break apart to smaller user
stories which the break aparrt one from epic can be done independency.&lt;/p&gt;&lt;p&gt;Now what is &lt;strong&gt;themes&lt;/strong&gt;. From Mike Cohn from Mountain Goat, he said that, &amp;quot;&lt;strong&gt;themes &lt;/strong&gt;is a colletion of related user stories.&amp;quot; And what i understand is, &lt;strong&gt;theme &lt;/strong&gt;is
colection of user stories that we have to done under one iteration
because they are related with each other, which meant dependency with
other user stories. Even though, in agile methodology, it is pressure
that create a not dependent user story which we can deliver an
freaquent functional feutures to users in every iteration. But we
cannot escape from dependencies. There will be some of user stories
dependent on others user stories to complete a iteration. But if we can
keep small on dependencies, it is quite better.&lt;/p&gt;Adios&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=10" width="1" height="1"&gt;</content><author><name>hakimin</name><uri>http://blogs.bespoke.com.my/members/hakimin.aspx</uri></author><category term="User Stories" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/User+Stories/default.aspx" /></entry><entry><title>User Story &quot;Epics&quot;</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/User-Story-_2200_Epics_2200_.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/User-Story-_2200_Epics_2200_.aspx</id><published>2006-10-03T07:14:00Z</published><updated>2006-10-03T07:14:00Z</updated><content type="html">&lt;p&gt;The word epic usually refers to the brave action or excitement or the films about the deeds of gods and great man. From it&amp;#39;s literal meaning, we can conclude that user story epics is&amp;nbsp;a great, large and complex set of user story. User role must be included in the epic user story description to picture the real scenario on how they will use the system. There are 2 types of epic user story; &lt;em&gt;compound&lt;/em&gt; and &lt;em&gt;complex.&amp;nbsp;&lt;/em&gt;Compound&amp;nbsp;user story&amp;nbsp;can be dissambled into smaller user stories within the same story&amp;nbsp;subject while complex user story is an extremely large and generic stories that cannot simply be broken down into smaller stories.&lt;/p&gt;&lt;p&gt;The &amp;quot;chunk&amp;quot; of splitted user stories shares the same&amp;nbsp;subject and is called a &lt;em&gt;theme. &lt;/em&gt;&lt;/p&gt;&lt;p&gt;To get clearer picture, look at these example:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Epic&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;User can cancel hotel reservation&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Theme&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Privilege&amp;nbsp;member can cancel reservation up to last minute&lt;/li&gt;&lt;li&gt;Normal&amp;nbsp;&amp;nbsp;customer can cancel not less than&amp;nbsp;48 hours&lt;/li&gt;&lt;li&gt;Customer can cancel reservation by phone&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=12" width="1" height="1"&gt;</content><author><name>nazura</name><uri>http://blogs.bespoke.com.my/members/nazura.aspx</uri></author></entry><entry><title>To fake it or not</title><link rel="alternate" type="text/html" href="http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/To-fake-it-or-not.aspx" /><id>http://blogs.bespoke.com.my/blogs/agile/archive/2006/10/04/To-fake-it-or-not.aspx</id><published>2006-10-03T06:57:00Z</published><updated>2006-10-03T06:57:00Z</updated><content type="html">&lt;p&gt;Continuation from my 1st blog about Fake/Mock object. With the availbility of Dependency Injection framework(Microsoft Pattern and Practice ObjectBuilder, Spring Framewrok and StructureMap). We could easily swicth the implemetation of our interface. In my opinion creating a Mock just for the sake of it, just going to make your code less readable i.e. it&amp;#39;s going to cost more on the maintanance. &lt;/p&gt;&lt;p&gt;&amp;nbsp;This is how we would normally work when dealing with a dependency that we didn&amp;#39;t really care about. Just as exmple we have a domain object called Patient, it has one operation , Save() returs void, the idea is when we call Save on the Patient instance, it must do some validation, then if the patientID is not null , it&amp;#39;s new item and we want to add a new item to our persintance, if PatientID is not null, is mean we&amp;#39;re updating existing patient.&lt;/p&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="rem"&gt;// our test case&lt;/span&gt;
        [Test]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SavePatient()
        {

            Patient p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Patient();
            p.Save();

            Assert.AreEqual(p.PatientID, 30);

        }



        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Patient
        {

            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; PatientID { set; get;}

            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Save()
            {

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.Validator.Validate(&lt;span class="kwrd"&gt;this&lt;/span&gt;)) &lt;span class="kwrd"&gt;
               throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(&lt;span class="str"&gt;&amp;quot;Validation error&amp;quot;&lt;/span&gt;);
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (PatientID &amp;gt; 0)
                {
                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Persistance.Update(&lt;span class="kwrd"&gt;this&lt;/span&gt;);

                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.PatientID = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Persistance.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;);

                }
            }
        }&lt;/pre&gt;&lt;p&gt;So there are a couple of dependecies that we have here in order to make this method works , the Persistace and Validator, so what do we want to do is to test the domain Save method , not the Persistance or Validator. So the instinct is to do some refactoring , the first one is &amp;quot;Extract Interface&amp;quot; ( please refer to Martin Fowler -Refactoring for more refactoring details, I also a bif fan of Refactoring to Pattern by Joshue Krienvesky).&amp;nbsp; Instead of having a concrete class for Validator and Persistance we now rever it to their interface&lt;/p&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IValidator
        {
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; Validate(Patient patient);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IPersistance
        {
            &lt;span class="kwrd"&gt;int&lt;/span&gt; Save(Patient patient);
        }
        &lt;span class="rem"&gt;// thus our patient object&lt;/span&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; IValidator m_validator;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; IPersistance m_persistance;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; IPersistance Persistance
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; m_persistance; }
            set { m_persistance = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; IValidator Validator
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; m_validator; }
            set { m_validator = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
&lt;/pre&gt;&lt;img src="http://blogs.bespoke.com.my/aggbug.aspx?PostID=8" width="1" height="1"&gt;</content><author><name>erymuzuan</name><uri>http://blogs.bespoke.com.my/members/erymuzuan.aspx</uri></author><category term="TDD" scheme="http://blogs.bespoke.com.my/blogs/agile/archive/tags/TDD/default.aspx" /></entry></feed>