Enough preaching. We see here that in a few hours, I found out a lot of things that would be good to know about, and I got a lot of ideas that would make the program better. How am I going to put them into effect? Heres my plan, my balance:
Im going to try a couple of quick experiments with the .NET XML classes, probably XMLTextReader. There seem to be a couple of quick-looking tutorials on it, so I should be able to do something in an hour or so, including the write- up. Ill do that by writing some tests, of course. The test classes will document what Ive learned, for later on when and if I want to put what Ive learned into the system.
The ideas about validating the XML, beefing up the TextModel to some tree structure, reading every character into the TextModel to keep it up to date, using a RichTextBox, protecting the tags...Im going to do none of that until the customer stories require it. The code we have is good enough for what it does now. Im sure it will need to evolve , and I suspect that some upcoming customer stories might even push it in some of the directions Im foreseeing. But Im not going to fall into the trap of saying it will be cheaper if we do it now. Sorry, wrong. The code isnt getting any harder to change while I leave it alone, and Ill make it better when the time comes to edit it. So even though Im very interested in trying some of these ideas, Im not going to invest customer time in putting them into the system until I have a customer story that justifies doing so.
There were some other ideas that Ill work on when I get there. The idea for a File object will probably show up in two efforts that I know are coming up. Chet and I have a hanging story to do file load and save, and it might show up there. If the forces so indicate , well refactor in the direction of a File object. And I have been doing a little experimentation with .NETs FileSystemWatcher class in conjunction with code manager ideas. The File object might come up there, if we get any more code manager stories.
Your choice might be different. You might choose to push on some of these ideas harder and to put them into the system. Thats OK. Im comfortable that I have a strong focus on learning, and Im not afraid that the ideas will get lost. Your comfort zone may be different. Just remember that the comfort zone of your customer, or your manager, might be different as well, and keep your eye on the ball, which is shipping well- factored , well- tested , high-quality software to your customer. To do that now and forever, you need to find the balance between completing stories and learning. In this book, youre getting a look at how I try to find my own balance. You get to find yours.