Thursday, October 30, 2008

Alan Stevens - Manage Complexity with Agility

This session rocked!

Alan started out by pointing out that he is not an expert, just an enthusiast. His enthusiasm was self-evident and contagious.

He said that this session is about what has worked for him and encouraged us to avoid dogma and take what works for each of us.

The following are my key take-aways from Alan's session:

Iterations are about putting a heartbeat to your practice and about creating a constant velocity. (Don’t push out a whole bunch of stuff one month and nothing the next. ) These are great things to keep in mind. Here I am writing this weeks later realizing just how much I need to put this into practice.

Alan's Law
“Heroism is Failure” If you have to be a hero on a regular basis, something else is broken.

Short Horizon
If you're working with regular 2 or 4 week iterations, you have an emotional advantage: You know what you’re dealing with. If you're coding for months on end with no iterations, you can feel lost. Also, it gives you the chance for Frequent Course Corrections. Two to four weeks worth of “wrong work” is easier to correct than 6-9 months.

User Stories
Alan emphasized two points. First, user stories are Users' Goals in Users' Terms. They are not technical requirements. They are not about software or technology. They are the essence of the value they need us to deliver.

For developers, it is a reminder of a future conversation – a to-do list.

Alan also suggested the following user stories template:
As a : (Role)
I want (something)
So that (benefit)

User stories allow us to avoid BDUF – Big Design Up Front.

The Last Responsible Moment
Defer decisions until the last responsible moment because that is when we have the most information. Don’t pretend you know things you don’t.

The next portion of Alan's session covered testing and dependency injection and he showed FoxUnit and FoxMock. I saw Alan cover these topics in very good detail last year at Southwest Fox and FoxForward.

Alan started his discussion of refactoring by asking "if" we refactor and what we do when we refactor. It seemed that the audience had a pretty good handle on refactoring. Alan reviewed some common elements of refactoring such as Code Smells. (a hint that something might be wrong in the code)

Alan made the point that you should Enable Change – if you’re afraid to change a piece of code, that’s a smell.

I jotted down a few additional quotes that I thought were worth sharing:

Work on your business not just in your business. - Michael Gerber
Value Developer Cycles over CPU cycles
Eliminate Waste
Prevention is the best cure.
Avoid Complacency

Finally Alan recommended a couple books that I need to add to my reading list:
The Pragmatic Programmer – Andrew Hunt and Dave Thomas
The Goal – Eliyahu M. Goldratt and Jeff Cox

This was one of the best sessions at Southwest Fox this year. I mentioned to Alan that I didn't think he needed to show any code and he countered that it is really important to show people how to test - that talking about it isn't enough. He's probably right about that.

What this session did for me was to help me focus on the bigger picture of best practices. There was a communal enthusiasm in this session - we all wanted to go out and code better, immediately.

Labels: ,

Full Story

Sunday, October 19, 2008

Toni Feltman - Square Peg, Round Hole - Retrofitting Client Server Data Access into Legacy FoxPro Applications

Toni started by letting us know that this session was for people working with VFP apps (not 2.x apps) that need to move from a VFP back end to some other back-end, such as SQL Server, Oracle or any other back-end.

Toni pointed out that it is important to set goals. Up front, the team needs to agree on why you're changing back-ends, what you hope to achieve, and a timeline - taking into account things that are likely to cause you trouble.

Toni suggested that once you pick your data source (And It think maybe even as part of the decision making process) you should become well versed in the tools that you'll be able to use to manage and manipulate your new data source.

Related to that, Toni strongly suggested hiring an expert to get your new database up, running and properly configured. I think this is good advice as even after working with SQL Server for six years I know next to nothing about proper configuration or performance tweaking.

Next, Toni discussed the issue of actually moving the data. She discussed the various approaches of moving or converting the data such as VFP's Upsizing Wizard. (This was mentioned twice this week as being a good tool for moving data from VFP to SQL Server. Toni mentioned that several of the third party tools can convert data much faster than a custom-written VFP app. I didn't realize this and I hope I remember it on my next conversation. We've had several in the past that were very time consuming.

Toni also pointed out that this is the time to decide whether or not to redesign the database. She correctly points out that we rarely design a database correctly the first time, nor is it likely that changes applied to our databases have been done according the best practices. If you have a reasonable timeline, this should be considered an opportunity to redesign your database. If you're on a short timeline, you're likely to need to create an identical design in the new back-end.

Toni reviewed the different approaches we can take to access our new back end such as Remote Views, Cursor Adapters, SPT, and Stored Procedures. She walked us through code examples all but Stored Procedures.

Toni suggested several approaches for getting reacquainted with our legacy code so that we can look for the things that will need to change for the new back end.

Perhaps one of the most important issues Toni raised was that you must have a reproducible process for data conversion. You're going to need to convert over and over as you retrofit your code. You'll need to be able to get clean, live, production data into your new back-end on a regular basis. This is something I also learned from working with Rick Schummer and Steve Sawyer and I couldn't agree more. Nearly every application we develop starts with writing a conversion routine.

Toni wisely instructed us to make sure you can completely disconnect from Production Data – hard coded paths and things like that can really bite you. Toni suggested setting up a virtual machine without a connection to the network drives.

Then, Toni suggesting reviewing you code for commands that are specific to you old style of data access such as USE and SET ORDER. (Using Andrew MacNeill's Code Analyst from VFPX will probably make this a breeze.)

Toni also discussed the very important issues relating to how different back-ends store data differently than VFP, particularly when dealing with NULLs, empty strings, logical, (and I'd offer dates, too.) I have to admit, that I've changed code to handle these issues instead of taking Toni's much smarter approach of creating a library of methods to handle this data once instead of each time you come across it in your code. (I think her approach would also make it easier for you to retrofit a vertical market app for multiple back-ends.)

Toni also mentioned that you should start testing right-away - as soon as you have something to test. This will help to uncover problems earlier in the process instead of later when it will be more costly to address.

She also suggested that you should really try to avoid new development during this process. Adding new features should be pushed off until after the migration is successful.

As usual, Toni gave a well prepared and well presented session with great ideas.

Southwest Fox 2008, Mesa, AZ, October 16 - 19, 2008

Labels: ,

Full Story

Friday, October 17, 2008

Soutwest Fox - Day 1

I've been taking detailed notes in each session and will be blogging soon about the sessions I've attended today. Overall, they have been top notch. I had hoped to have a little more of a live stream of posts, but the content has been pretty think so I've only had time to take notes, not make them web-ready.

So far the highlight for me has been Alan Stevens' session, Manage Complexity with Agility.

One overall positive comment: Each room has giant screens and each projector is set to use the full screen. I've been sitting in the back row for some sessions (to get power) and I've been able to see every line of code shown. This conference is doing this better than any conference I can remember in recent history. Because the screens are so large, some of the slides and windows have been down below the horizon of people in chairs. Usually the speakers remember to move thing up to the top.

Two more sessions to go and then perhaps some time to post some content-filled updates.

Labels: ,

Full Story

Thursday, October 16, 2008

On the way to Southwest Fox

I’m on a plane heading to Phoenix for Southwest Fox and I can’t wait to get there. I’ve been so busy lately that I haven’t even really had time to look at the session schedule let alone the downloadable materials.

There are so many promising sessions it will be hard to decide which session to see during some of the time slots.

I’m particularly interested in Doug Hennig’s session, Creating Exlporer Interfaces in Visual FoxPro. I had just starting playing with the DBI controls that came with Sedna the day before Doug posted his excellent teaser video for this session.. The video convinced me to stop playing around and wait for Doug’s session. This could be one of the many sessions that “pays for the conference” for me.

I’m also interested in several sessions that have received great reviews at DAFUG. Perhaps the thing I miss most from Michigan is DAFUG. I’ve missed rehearsals of at least three sessions that I want to see in Mesa.

Cathy Pountney’s Customizing your vertical market Application got great reviews and although I don’t currently have a vertical market app, there is potential and I’m really anxious to see this session.

I’ve also heard great things about Toni Feltman’s Square Peg, Round Hole – Retrofitting Client Server Data Access into Legacy FoxPro Applications. All the VFP apps I’m working on now have a SQL Server back end, but I’m expecting that there will be an increasing number of opportunities to retrofit legacy apps and I’d like to get as many tips and tricks into my arsenal to better prepare me for such opportunities.

I also want to see the session that Rick Schummer just rehearsed at DAFUG last week.

After seeing Alan Steven’s great session on TDD last year, I’m really looking forward to both Ignorance is Bliss: Why you don’t need to know where your data is stored and Manage Complexity with Agility. Following him on his blog and twitter over the last year has certainly shown that he is passionate about these issues.

There are also sessions by Rick Strahl, Rick Borup and Barbara Peisch, Craig Boyd, Andrew MacNeil and Mike Feltman.

There are also several sessions which are aimed at beginners and others that I’ve seen before (or seen something similar before) that I’d attend this time if I could squeeze them in. Watching Andy Kramek talk about Working with Objects in Visual FoxPro would certainly yield something new or clarifying for me. Barbara’s session on Understanding scope and Mike Feltman's session on Collections Arrays and Iteration would do the same.

I’m not sure how I’ll squeeze them all in, but I’m really looking forward to trying.
As a side note, this is the first flight I’ve taken with an MP3 player full of music. What a difference that makes! I downloaded several podcasts from and have listened to the first 3 (from 2004/2005) and have really enjoyed most of the music included.) I haven’t listened to a flight full of music since my walkman days in the 80’s. What a difference it makes on a longer flight!

I’m looking forward to getting on the ground and getting set up to stream the keynote tonight.
I’ll be posting here more as I work my way through the conference and I’ll likely be hitting twitter a bit throughout the conference as well.

Labels: , ,

Full Story