Rob Kraft's Software Development Blog

Software Development Insights

Archive for January, 2011

Better Software Magazine and Dev Pro Connections New Issues

Posted by robkraft on January 28, 2011

The latest issue of Better Software magazine is now online at:

The latest issue of DevPro Connections magazine is online at:

These both may require an account to access the magazines, but they are both full of good articles and the price of the account is free!


Posted in Magazine Online | Leave a Comment »

Changes to your first paycheck to yourself in 2011

Posted by robkraft on January 15, 2011

I created my first paycheck of 2011 for myself today. The first paycheck is always the most difficult in a year because I need to identify the tax changes that affect it.

The first change for 2011 is that I had to reduce the amount of Social Security withheld from the employee portion of my paycheck from 6.2% of my base salary to 4.2%. This does not affect the amounts I withhold for federal withholding, medicare, or Missouri state withholding.

The second change for 2011 is to change the amount of unemployment insurance tax to withhold for the state of Missouri. My Missouri unemployment tax changes every year and I consider it to be a major nuisance for several reasons:

  1. It is complicated to calculate
  2. I never correctly guess how the state will round to the penny which results in a check for a one penny refund from the state.
  3. I can’t just pay it all at once for the year, I have to pay it for the first 3 to 6 months until the $7,000 gross wages limit is reached.
  4. It will never benefit me because I am self-employed and will never file an unemployment claim against myself.

I keep all the other factors of my paycheck the same for 2011 and as I have for every monthly paycheck for the last 3 years. By keeping my salary, withholding, and 401k deductions the same, my monthly, quarterly, and federal filings take less time to prepare because I can use the same numbers from previous filings. I highly recommend that you pay yourself the exact same amount with the same deductions on a regular basis just to reduce the time you need to spend making calculations and also because fewer calculations means fewer chances for errors.

Posted in Taxes and Fees | Leave a Comment »

Don’t allow Flash to be used as a cookie to track your activity

Posted by robkraft on January 11, 2011

I am less and less inclined to allow 3rd party web sites track my Internet activities for use in targeted ads or other reasons.  While dirty techniques like the evercookie ( make it very difficult to prevent tracking cookies (which is why I considered it dirty – it is intentionally trying to thwart my will to prevent cookies); a few steps can be taken against those who don’t resort to the evercookie to track your activities.

1) Don’t allow 3rd party vendors to use Flash to track your activities.  If you find the folder containing your “flash” cookies, which are stored separately from your browser cookies and thus not cleared when you delete files in your browser, you may be surprised to see the large number of sites already using Flash cookies to track you.  You can disable the storage by going to the global storage settings at this URL and unchecking “Allow third-party…”.

2) Another thing I suggest is that you don’t automatically accept browser cookies.  You may find this a little annoying the first few weeks as you are prompted for each cookie.  You will discover that some sites you visit have as many as ten different cookie providers on the site all tracking different (or the same) aspects of your activities.  In Internet Explorer, go to Tools, Internet Options, Privacy tab, click on the Advanced button, and choose to override automatic cookie handling; prompt for both 3rd party and first party cookies, and automatically allow session cookies.  When you go to a site such as and you see requests for cookies to other sites like, check the never ask again checkbox and select NO.

Posted in I.T., Web Sites | Leave a Comment »

Features are never complete! So stop tracking them like tasks!

Posted by robkraft on January 10, 2011

Have you ever participated on projects in which you implement partial features? I do, all the time. I understand why we do this:

  1. The feature is good enough for shipping and it is more valuable to work on other features rather than complete this one
  2. We overestimated the work involved in this feature and are going to release just a partial feature to meet the most immediate needs
  3. We lost resources during the sprint so we could only complete part of it.
  4. The product owner changed their mind about certain aspects of the feature.

The thing that bothers me about this is that we cannot mark the feature done. The feature lingers in the backlog partially completed; or we mark the feature completed and spawn a new feature to include the aspects of the feature left out of our original desire.

But today, a revelation! Features are never done! Just as a product continues forever and is never 100% complete, every feature continues for ever and is never 100% complete. We should not expect a feature to be “complete”. So we should stop using tracking systems to track features to completion and instead track features the way we manage products.

A feature tracking system needs to be able to support a hierarchy of features with infinite depth. We need to be able to track the status of each feature and subfeature of feature to know when it was released, the status of testing, documentation, coding, and etc.

In addition to our feature tracking system, we need a separate list of tasks related to the feature. Tasks are all the actions that need to be performed to move the feature from concept to realization. The product manager should manage the features, the development team manages their tasks. Features are aspects of the software that you always want to keep track of like, “This is our reporting feature that saves to PDF or prints. We added it in version 7.0 of the software. It was coded by Joe and Jeff and was tested by Susan on 2/27/2009.” Tasks, are the list of actions used to implement the feature and you usually can discard the list of tasks used to move the feature from idea to implementation. The tasks for implementing a feature may include items like:

  1. Add columns to the database table
  2. Modify these 3 stored procedures
  3. Verify that the SQL Server stored procedure converted to Oracle correctly
  4. Confirm the sort order is correct
  5.  Write the unit tests for the feature
  6. Write the code for the feature
  7. Write the programmer documentation for the feature
  8. Write the user documentation for the feature
  9. Test the feature

Notice that Projects and Tasks are similar.  Both have start dates and end dates.  Also notice that Products and Features are similar.  They do not have completion dates. 

A lot of the challenge in developing good software is based on your ability to manage your to do list effectively.  One step in achieving that goal is to maintain a clear separation between tasks and features.  You may need two separate systems to track each well; but ideally you can find some software that tracks both.

Posted in Coding, Project Management | Leave a Comment »

A programmer’s pledge to Quality Assurance

Posted by robkraft on January 9, 2011

I recently took some time to review the list of bugs we completed in the last year. I noticed that the majority of bugs found during development and entered into our tracking system were similar to this list:

  • “Change the dropdown list to be sorted…”
  • “Change the fields on the form to have the correct tab order…”
  • “Change the fields on the form to move and resize appropriately if the form is resized”
  • “Change this to be spelled correctly…”
  • “Change … to be consistent…”

Each of these items takes time away from our development in many ways:

  • for a tester/QA to recognize it,
  • for a tester/QA person to record it,
  • for a development team member to confirm it,
  • for a development team member to assign it a priority,
  • for a development team member to assign it to a person to fix it,
  • for the assigned person to make the change,
  • for the assigned person to mark it complete in the tracking system,
  • for a tester/QA to retest it after the next build  for a tester/QA to mark the item as done.

That is a lot of Project Management for items that are just the result of sloppy programming.  We should strive to reduce these cosmetic “bugs” from ever being included in code that is “ready to test”.

Here is my idea.  Create a pledge that a programmer makes to QA because these are not the kind of “bugs” that QA should need to waste time on testing and tracking. I don’t think this pledge should be formalized and signed by each developer. I hope that it motivates programmers to pass code along to QA only after it is free of cosmetic bugs.

Our team held a meeting to discuss the items on this list. I was surprised that there was little agreement about any items, even items I thought would be non-controversial such as sorting listboxes alphabetically by default. I only led the discussion, I did not try to dictate or persuade, and in the end, after much arguing back and forth, most our of programmers did come to accept most of the items on the list as best practices. I provide our list as a starting point. I hope you can suggest other items to add to it. I realize that this list is very similar to coding standards, but by phrasing it as a pledge, I hope to increase the adoption of these tenets.

Expectations from developer (I pledge to):  (This is a pledge a programmer makes to QA because these are not the kind of “bugs” that QA should need to waste time on testing and tracking)

  1. The code will not error right away for all users when they try to run it
  2. The messages visible to users will not have any misspellings
  3. The tab order on forms will be correct (reasonable)
  4. The first field to receive focus on forms will make sense (be optimal)
  5. When a form is resized, controls should move or resize appropriately
  6. Form colors should be consistent across forms.
  7. Form elements (button captions and placement) should be consistent across forms.
  8. Keyboard shortcuts should be consistent per policy
  9. Form icons and captions, including popup messages should be consistent.
  10. Don’t ask testers to start testing until all these above items are correct.
  11. Captions will fit on buttons, text won’t get truncated on screen.
  12. Code runs fast
  13. When you run my code, I would be surprised if you can find any “syntax” errors such as cases where null values were not handled
  14. If an error does occur, it will be gracefully handled with a user friendly message and helpful debugging details will be logged.
  15. If there are any conditions/scenarios I have not tested, I will let you know what those are. (I didn’t test on Vista, or against Oracle db)
  16. Error messages will be complete sentences.
  17. All data in lists will be in alpha order

Posted in Coding | Leave a Comment »

Now is the time to pay those 4th Quarter Estimated Taxes (1040ES)

Posted by robkraft on January 8, 2011

I just finished writing a check to the Department of Revenue in Missouri to make a quarterly estimated personal tax payment (MO 1040ES).  I made a similar online at for a federal quarterly estimated tax payment (1040ES).  The first year I was in business for myself I didn’t make estimated personal tax payments, because I withheld extra taxes from each paycheck instead.  However, I made a filing error that first year and the penalty for errors is a percentage of the amount you are paying.  Had I been withholding less, and using estimated tax payments from my personal account the penalty would have been lower.  So I made the change the next year.

You may wonder why I even both to “withhold extra”, or make estimated tax payments.  I am doing this because I pay myself a salary, but my salary is less than my revenue as a business.  At the end of the year, if my salary and other business expenses is less than my total revenue, that total revenue will be converted to profit for the year (because my business is an “S” Corporation).  I will then owe taxes on that profit.  To reduce the amount of taxes you may have to pay in one large amount on this profit, you can do one of two things, withhold more throughout the year from each paycheck, or make estimated tax payments, usually quarterly.  I prefer the latter as I have learned, the hard way, that it can reduce penalties from filing errors.

Posted in Taxes and Fees | Leave a Comment »

Encourage your favorite free wifi hotspots to protect you from Firesheep

Posted by robkraft on January 7, 2011

Many of us are now aware how easily the other people sitting near you at the coffee shop can hijack your session with facebook and most other sites and see or change your information, read your emails, and possibly even do a little banking with your bank accounts. What is not getting as much publicity is the ease with which your free wifi hotspots can stop tools like Firesheep and make it much more difficult for those around you to monitor and hijack your activities.
The next time you visit a free wifi hotspot that is not using WPA encryption (and thus requiring a password) to their router, take a minute to explain to them that simply adding WPA security to their wireless router will provide a lot of additional security for their customers.

The password can be simple, and publicly known. I recommend that it shows up as part of the SSID broadcast name such as “Starbucks WiFi (Password is free)”.
As long as WPA encryption is used (not WEP), each person connecting to the WiFi will have an individually secretly encrypted connection to the WiFi router that is very difficult for those around them to spy upon.

For more info, check out this post from industry expert Steve Gibson:

Posted in I.T. | Leave a Comment »

Agile is simply the course requiring the least amount of work

Posted by robkraft on January 6, 2011

I spent time today planning the features to include in our next four releases over the next two years.  A small part of me kept telling myself that I was not being agile.  I did this planning because I am using the plan to determine how to design some code for the next release.  Am I right to believe that the capital “A” Agile purists would tell me I am doing something wrong?

My response to the purists is that I don’t care if I am an Agile purist or not, and I don’t care about Agile at all.  I just want to produce the best software I can, and I will adhere to Agile when that seems to be best, but I will deviate from Agile when the pure Agile approach does not seem to be best.

For our next release, I need to design a specific pattern for hundreds business objects to follow.  We will update our code generator to create all the business objects.  The objects will be read-only versions in the first release, then editable objects in the second release, then objects that support asychronous methods in the third release.  I had considered having all three versions inherit code from a single base class, but upon realizing that we would eliminate the read-only objects in the fourth release, I am chosing not to use this base class idea.

In short, I let an uncertain future determine my present design.  But I argue that doing so is the correct thing to do, and that it is neither Agile, or not Agile.  I must chose a design to implement, and the more information I have about the future the more likely I am to make a decision that minimizes the amount of work to be done.  By looking into the future I am choosing a design that will actually save us one month of work in the first release, and will provide residual savings in subsequent releases.  If I looked into the future and chose a design that ADDED months to the first release and provided no additional value my actions would not be Agile.

My conclusion is that you are being Agile when you select the course of action that requires the least work in the early stages, but that over the long term an Agile approach runs the risk of being less efficient.

Posted in Code Design, Project Management | Leave a Comment »

Tax and Accounting checklist for the new year

Posted by robkraft on January 4, 2011

The first business task I perform each year is to copy my checklist from the previous year and make the necessary modifications.  Here is my basic checklist for 2011.  I also have all of these items set up with reminders in Outlook.  Hopefully by having both the reminder and the checklist I won’t forget to do any of them.

Begin Date Due Date Done Tax Authority Freq. Action
1/1/2011 1/15/2011   Federal Monthly WH, MD, and SSN Tax payments for DEC Last Year
1/1/2011 1/31/2011   Federal Annual Federal W2 to employee (me)
1/1/2011 1/15/2011   Missouri Quarterly Individual Estimated Income Tax (MO1040-ES)
1/1/2011 1/15/2011   Federal Quarterly Individual Estimated Q4 last year  (1040-ES)
1/1/2011     Lee’s Summit Annual Register Business Section 28-30
1/1/2011 1/31/2011   Federal Quarterly Tax Report for Q4 last year (941)
1/1/2011 1/31/2011   Missouri Quarterly Q4 Last Year WH Report (MO941) and payment (combined online)
1/1/2011 1/31/2011   Missouri Quarterly File and Pay MO Unemployment ($0) Q4 last year
1/1/2011 1/31/2011   Federal Annual FUTA “FORM” 940 for last year
2/1/2011 2/15/2011   Federal Monthly WH, MD, and SSN Tax payments
2/1/2011 2/28/2011   Federal Annual W3 to SSA
2/1/2011 2/28/2011   Missouri Annual MO-W3
1/1/2011 3/1/2011   Missouri Annual File Annual Report (online)
2/1/2011 3/15/2011   Federal Annual Business Taxes Year last year (1120s).  K-1 to me
1/1/2011 3/15/2011   Missouri Annual MO1120s
3/1/2011 3/15/2011   Federal Monthly WH, MD, and SSN Tax payments
4/1/2011 4/15/2011   Federal Quarterly Individual Estimated Q1 This year (1040-ES)
4/1/2011 4/15/2011   Missouri Quarterly Individual Estimated Income Tax (MO1040-ES)
4/1/2011 4/15/2011   Federal Monthly WH, MD, and SSN Tax payments
1/1/2011 4/15/2011   Federal Annual Individual 1040
1/1/2011 4/15/2011   Missouri Annual Missouri 1040
1/1/2011 4/15/2011   Kansas Annual Kansas 1040
4/1/2011 4/30/2011   Federal Quarterly Tax Report for Q1 (941)
4/1/2011 4/30/2011   Federal Annual FUTA (940) – $56
4/1/2011 4/?/2011   Missouri Quarterly File and Pay MO Unemployment
4/1/2011 4/30/2011   Missouri Quarterly Q1 WH Report (MO941) and payment (combined online)
5/1/2011 5/15/2011   Federal Monthly WH, MD, and SSN Tax payments
6/1/2011 6/15/2011   Federal Monthly WH, MD, and SSN Tax payments
6/1/2011 6/15/2011   Missouri Quarterly Individual Estimated Income Tax (MO1040-ES)
6/1/2011 6/16/2011   Federal Quarterly Individual Estimated Q2 (1040-ES)
7/1/2011 7/15/2011   Federal Monthly WH, MD, and SSN Tax payments
7/1/2011 7/31/2011   Federal Quarterly Tax Report for Q2 (941)
7/1/2011 7/31/2011   Missouri Quarterly Q2 WH Report (MO941) and payment (combined online)
7/1/2011 7/?/2011   Missouri Quarterly File and Pay MO Unemployment
8/1/2011 8/15/2011   Federal Monthly WH, MD, and SSN Tax payments
9/1/2011 9/15/2011   Federal Monthly WH, MD, and SSN Tax payments
9/1/2011 9/15/2011   Missouri Quarterly Individual Estimated Income Tax (MO1040-ES)
9/1/2011 9/15/2011   Federal Quarterly Individual Estimated Q3 (1040-ES)
10/1/2011 10/15/2011   Federal Monthly WH, MD, and SSN Tax payments
10/1/2011 10/31/2011   Federal Quarterly Tax Report for Q3 (941)
10/1/2011 10/31/2011   Missouri Quarterly Q3 WH Report (MO941) and payment (combined online)
10/1/2011 10/?/2011   Missouri Quarterly File and Pay MO Unemployment ($0)
11/1/2011 11/15/2011   Federal Monthly WH, MD, and SSN Tax payments
12/1/2011 12/15/2011   Federal Monthly WH, MD, and SSN Tax payments
12/1/2011 1/15/2011   All Annually Identify tax and reporting changes for next year.

Posted in Taxes and Fees | 1 Comment »