﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Ayende @ Rahien</title><link>http://ayende.com</link><description>Ayende @ Rahien</description><copyright>Copyright (C) Ayende Rahien  2004 - 2021 (c) 2026</copyright><ttl>60</ttl><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>Foobar,
  
_is_ there a reason you are insulting?
  
You are allowed to expressed your own opinions here, but they _will_ be expressed in a polite manner of they will be removed.
  
  
Now, to the actual content in your post.
  
No, I make sure that I understand, at least in a superficial level, what is going on in the business level. 
  
  
And yes, I do believe that getting down and writing the simplest code possible to meet the requirement, and then expanding on that is the way to go.
  
After I have wrote the first task of this type, I can try to come up with a list of questions, and hopefully I'll also have some input from the customer about what those answers should be.
  
  
But no, I wouldn't try to think of those in advance, doing so is fruitless. What I think up ahead and what I end up with are very different animals, so there isn't much point to it.
  
  
And the key part here is _first task of type_. Go above and look at the scenario, this i s the first task that touched humans in a synchronous way, out of several dozens that do house keeping or send mails. 
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment21</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment21</guid><pubDate>Sun, 14 Oct 2007 06:24:08 GMT</pubDate></item><item><title>foobar commented on From demo to production: Handling the edge cases that aren't there</title><description>&gt; I wouldn't like to try and answer a whole lot of check list questions for each requirement, in advance.
  
I mostly wouldn't know what questions to ask, or how to answer them
  
  
Wow.  Just wow.  So basically you admit you have no expertise in your business domain, or perhaps you do, but you're too dumb to put two and two together and think that your knowledge of the real world could somehow impact your time in front of the keyboard.
  
  
Amazing.  Keep up with the Agile thing, and keep slagging the "Morts".  It seems to be the only way to keep yourself afloat and looking good!  God forbid you actually improve your analysis skills.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment20</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment20</guid><pubDate>Sun, 14 Oct 2007 05:23:30 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>I will probably use Castle.Scheduler, but right now I am running them off a web page manually. 
  
I didn't want to have to handle that right now.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment19</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment19</guid><pubDate>Fri, 12 Oct 2007 00:55:22 GMT</pubDate></item><item><title>Andrew Hallock commented on From demo to production: Handling the edge cases that aren't there</title><description> What are you using to schedule the tasks with?  I've been looking for a strong .NET scheduler.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment18</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment18</guid><pubDate>Fri, 12 Oct 2007 00:50:59 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>For that matter, sending SMS abroad cost a lot more, we need to check with the internal affairs office to see if he is out of the country.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment17</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment17</guid><pubDate>Wed, 10 Oct 2007 09:58:32 GMT</pubDate></item><item><title>Justin-Josef Angel [MVP] commented on From demo to production: Handling the edge cases that aren't there</title><description>I've got the extra bug - the guy/gal might no longer be alive.
  
We should check with the local citizen registry (hebrew: מרשם אוכלוסין).
  
Also, he might had a child born in the last week or a 1st degree relative killed - we should check for that too.
  
  
(What? That's a real concern where I'm from... I've actually got that code written somewhere) 
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment16</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment16</guid><pubDate>Wed, 10 Oct 2007 09:05:03 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>Bil,
  
Holidays are usually maintained in a BusinessDays table, {Date (PK), DayType { Normal, HolidayEvening, Holiday }, Remark {Name, if a Holiday} }. I don't have it yet, and I am going to find what sources exists that can give it to me automatically, but that is the basic idea.
  
  
I tend to use real use cases, but not the real scenario, so we did have a case that we needed to send an SMS in two days, but it is not about events, for example.
  
  
What would you like to see?
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment15</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment15</guid><pubDate>Wed, 10 Oct 2007 04:15:43 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>Bob,
  
&gt; you refined your user story
  
  
Yes, absolutely. Except that  some common questions will not really help. This is the first scheduled task that will actually interact with humans in a synchronous way. There isn't any meaning to all the rest of the tasks, because most of those do internal house keeping stuff, and the other send email, which is perfectly fine to do.
  
  
I wouldn't like to try and answer a whole lot of check list questions for each requirement, in advance.
  
I mostly wouldn't know what questions to ask, or how to answer them
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment14</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment14</guid><pubDate>Wed, 10 Oct 2007 04:08:07 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>Chad,
  
The scheduling options and the action itself are two different things, and I want them in two different ways.
  
And I want it declarative. I am scanning all tasks in assemblies and show them to the user, that is easier to do as attributes than code.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment13</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment13</guid><pubDate>Wed, 10 Oct 2007 03:54:32 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>Adam,
  
This is Rhino Commons repository + NHibernate Query Generator code.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment12</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment12</guid><pubDate>Wed, 10 Oct 2007 03:53:03 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>Mats,
  
&gt; wouldn't you be sending multiple SMSs whenever InTwoDays &amp;gt; InTwoCalenderDays ?
  
  
Yes, that is the next problem.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment11</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment11</guid><pubDate>Wed, 10 Oct 2007 03:42:47 GMT</pubDate></item><item><title>Ayende Rahien commented on From demo to production: Handling the edge cases that aren't there</title><description>No, between is inclusive. It is at least two real days ahead, and at most two business days ahead. Often enough, those those would be the same, so I don't care about that.
  
Note that ScheduledDate is a date only, not date time.
  
  
The last code doesn't need to check for Saturdays. I am afraid that this is using the Saturday and Holidays  convention around here, where Saturday is considered a Holiday.
  
  
With the if(!Saturday) check, you will get the SMS for Monday on Friday.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment10</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment10</guid><pubDate>Wed, 10 Oct 2007 03:41:35 GMT</pubDate></item><item><title>Bil Simser commented on From demo to production: Handling the edge cases that aren't there</title><description>Oren,
  
  
I think this is a cool example of a typical problem. I personally would actually like to see more of the solution (for example how/where do you get/maintain the information about what is a holiday or not). I feel the intial problem/solution(s) are great but bordering on academic as they don't give the full picture. Like someone mentioned about the user story, this would be a great full blown user story -&gt; specs -&gt; tdd code sample (although if you're like me you use real-world examples in your code so maybe you can't go further with this because of client IP which I would understand).
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment9</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment9</guid><pubDate>Wed, 10 Oct 2007 03:22:07 GMT</pubDate></item><item><title>Lothan commented on From demo to production: Handling the edge cases that aren't there</title><description>Are you sure we don't work for the same company? This story is amazingly similar to the stories I run into in which one of the business managers pops into my office with the infamous intro: "I've got a project I need you do and it's really simple..."
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment8</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment8</guid><pubDate>Wed, 10 Oct 2007 01:37:34 GMT</pubDate></item><item><title>Nicholas Piasecki commented on From demo to production: Handling the edge cases that aren't there</title><description>I found the bug! It should be "Occurrences", not "Occurrances". =)
  
  
Really, though, I have to admire your attention to detail. I'd say a lot of people wouldn't consider these bugs and just say "Eh, that's how the system works. Tough patooties." 
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment7</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment7</guid><pubDate>Wed, 10 Oct 2007 01:26:16 GMT</pubDate></item><item><title>Chad Myers commented on From demo to production: Handling the edge cases that aren't there</title><description>Why use attributes? It seems weird to have two styles in the same class.  Why not have a method to override which specifies the schedule (and maybe could even be injected or something)
  
  
public Occurances GetOccurances()
  
{
  
    return Occurs.EveryDay.At("08:00").ExceptOnHolidays();
  
}
  
  
or maybe:
  
  
public Occurances GetOccurances()
  
{
  
   return Occurs.EveryDay.AtConfiguredTime().ExceptOnHolidays()
  
}
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment6</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment6</guid><pubDate>Wed, 10 Oct 2007 00:46:11 GMT</pubDate></item><item><title>Adam Esterline commented on From demo to production: Handling the edge cases that aren't there</title><description>Is this custom code or is it apart of a framework?
  
  
ICollection&lt;Event&gt; eventsInTwoDays = Repository&lt;Event&gt;.FindAll(
  
			Where.Event.ScheduledDate.Between(InTwoCalendarDays, InTwoDays) &amp;&amp; 
  
			Where.Event.Participants.With(FetchMode.Join)
  
		);
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment5</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment5</guid><pubDate>Wed, 10 Oct 2007 00:34:52 GMT</pubDate></item><item><title>Mats Helander commented on From demo to production: Handling the edge cases that aren't there</title><description>Oh, and wouldn't you be sending multiple SMSs whenever InTwoDays &gt; InTwoCalenderDays ?
  
  
/Mats
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment4</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment4</guid><pubDate>Tue, 09 Oct 2007 22:38:18 GMT</pubDate></item><item><title>Mats Helander commented on From demo to production: Handling the edge cases that aren't there</title><description>In the last query, if you use between, wouldn't you get only hits that were /more/ than two (real) days ahead, but less than two business days ?
  
  
Also, the last code doesn't check for Saturdays, does it?
  
  
And with the "if (!Saturday)" check, wouldn't that mean that the SMS for any event on a Monday would never be sent?
  
  
/Mats
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment3</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment3</guid><pubDate>Tue, 09 Oct 2007 22:34:21 GMT</pubDate></item><item><title>Bob Archer commented on From demo to production: Handling the edge cases that aren't there</title><description>I hate to say this, but you didn't fix "bugs" you refined your user story. If this had been done up front you would have written easily been able to write the code. 
  
  
BTW: The "edge case that weren't there" were there.... you just didn't know about them. 
  
  
I know you can't think about everything up front, but I think some common questions that apply to refining all users storys would help here.. espesially for agent like tasks:
  
  
When should this be done? Everyday...
  
What time everyday? Oh, how about 8AM
  
Will you ever want to change that?
  
What about people in other time zones?
  
Ok, really everyday? What about weekends and holidays?
  
What if the message fails, bad phone number or is bounced?
  
How much after 8AM is ok?
  
etc.
  
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment2</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment2</guid><pubDate>Tue, 09 Oct 2007 22:03:30 GMT</pubDate></item><item><title>jdn commented on From demo to production: Handling the edge cases that aren't there</title><description>This post also explains why functional requirements documents are almost always woefully inadequate.
</description><link>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment1</link><guid>http://ayende.com/2853/from-demo-to-production-handling-the-edge-cases-that-arent-there#comment1</guid><pubDate>Tue, 09 Oct 2007 20:57:35 GMT</pubDate></item></channel></rss>