Not Contracting Any More

February 26, 2008 at 8:34 AMmgordon
It's been a really busy last several weeks.  We've been working to get the application I'm currently working on into production and after considerable deliberation, I've decided to leave the ranks of the contractors and accepted the offer to become a full time employee of a local telco.  I'll be serving as IT manager and will be managing systems administration as well as software development.  Wish me luck as I endeavour to exceed expectations.

Posted in: General | Contracting

Tags: ,

Workflow Services and the DTC

February 7, 2008 at 4:56 AMmgordon

As noted in a former post, I implemented a change order system using Windows Workflow.  Recently, the system was deployed for User Acceptance Testing and odd things began to happen.  The system is using both tracking and persistence services and what we observed in the Sql Profiler was that the Sql to insert the persistence record was never making it to the database, but the tracking was working fine.

I implemented a handler for the ServicesExceptionNotHandled event on the WorkflowRuntime object, but nothing was being raised.  After a couple of hours poking and prodding, I finally linked the problem to the windows firewall.  If the firewall was turned off, everything worked as expected.  I spent some time researching the problem and found a couple of posts on the Microsoft Forums here and here that discuss the SharedConnectionWorkflowTransactionService.  Apparently, when the persistence and tracking data are in two different databases, the DTC gets involved any updates to the data and the firewall was blocking the DTC traffic. 

As mentioned in one of these posts, I combined the persistence and tracking databases into one, and added the SharedConnectionWorkflowTransactionService to runtime when I started up.  The combination of these actions removed the dependency on the DTC and all is working fine, now. 

Posted in: .Net | Sql Server 2005 | Workflow

Tags: , ,

Benefits of Interative Development

February 5, 2008 at 4:48 AMmgordon

Imagine being given a large project to complete and several months in which to do it.  You've been given a vision of the finished project and little else.  How do you make the best use of the time?  How to you keep every member of your team engaged for the full duration?  How do you measure your progress as the time slips past you?

Consider the ways in which iterative development can come to your rescue in this situation.

Productivity - When you want to write a system that needs great throughput, often you'll feed that system with some type of queue.  As a task is finished, the next is pulled from the queue and work continues.  No negotiation is requires, no prompting or polling.  The next work item is is there and just waiting to be done.  Many of the developers I've spoken with say they like working in a  similar manner.  Queue up the work so it's waiting for me to do it, and I can blow through the tasks at a much faster pace. 

An iterative development process works in much the same way.  While work is being done on the current iteration, any additional requirements ro issues are being queued up on a task list, prioritized and scheduled.  An important point, here, is that it isn't the developer who's having to deal with  finding the next task, negotiating with management about the length of time the task will require to complete or to hash out the specific requirements.  When the current iteration finishes, the tasks for the next are ready to be undertaken by the developer.  This means that several of the things that can steal time from those writing the code are eliminated.  There will always be the need to converse with users about specifics or to aid in providing estimates on the amount of effort required for a task, however.

Organization - I've worked in environments where requirements or issues could be brought in at any time and justified an immediate change in priorities and focus.  At the end of the day, much of your productivity goes down the drain as you take the time to switch contexts - unwind the task you're working on and dig into the one being presented.  With an iterative process in place, most of these issues can be placed on the queue and scheduled for a later iteration.  This forces an evaluation of how immediate a need really is and cuts down on context switches required which keeps the developer focused and productive.

Morale - No one like to feel they're spinning their wheels - making huge efforts with little progress to show for it.  The simple act of setting an obtainable, short-term goal both helps all involved to feel that progress is begin made and also allows for the easy gathering of metrics that establish what point in the scope of the entire project has been attained. 

Flexible Scheduling - There are almost always external factors such as outside vendors and the availability of resources that affect when certain parts of a project can be addressed.  With an iterative approach, the impact of these factors can be mitigated, to a degree, by putting off these parts of the application until they can be addressed.

 

Posted in: Productivity

Tags: