Posts made in 2009

« Older Posts   

Use Understood Methods Rule

Over the years I have refined the approach I use to write code. Recently I codified a key aspect of this approach as a practice I call the Use Understood Methods Rule. The basic formulation of the rule is quite simple: when coding a method only invoke other methods whose behavior you clearly understand and […]

Comparing Agile and Traditional Project Management

I just attended a great presentation about Agile project management by Mike Cottmeyer at Agile Edmonton’s monthly meeting. What stood out for me were two comparisons Mike made between Agile project management and traditional approaches (e.g. waterfall project, PMI/PMP). Dealing with Uncertainty Mike characterized traditional approaches as trying to manage out uncertainty in the effort […]

Test Driven Development – Benefits, Limitations, and Techniques

I wrote previously about the process I went through in adopting test driven development (TDD). In this article I discuss my experience with TDD: the benefits, the limitations, and the techniques I use when doing TDD. Benefits This section covers the benefits, as I see them, of doing TDD. This does not include the benefits […]

Lessons Learned Championing Continuous Improvement

For over one year now I have been championing continuous improvement across multiple teams. I have seen and struggled with various problems, some of which I have seen reoccur time and time again, and I have identified successful strategies for dealing with some of these issues. In this article I present my lessons learned in […]

Adopting Test Driven Development

I have always been keen on using automated unit tests since I first heard about them almost a decade ago. I have known about test driven development (TDD) for almost as long but the practice of writing tests first before writing production code never really clicked for me when I first tried it years ago. […]

My Definition of Done

I recently wrote about why you need a definition of done, and it only seems logical to follow this up by presenting what I use for a definition of done for developing software. I use two guiding principles as the basis for constructing my definition. Potentially releasable: Ideally the software can be released (or shipped) […]

Would You Trust Your Life To Your Code?

Would you trust your life to your code? It is a simple question that you might find extreme. But is it really? You might argue that the answer to this question depends on the criticality of the software you are producing. Software like the control software for the space shuttle or software to control medical […]

Why You Need a Definition of Done

Whether you are working on a small task or a large project, do you and your team have a clear understanding of what it takes to complete a piece of work? The Scrum method of software development calls this Definition of Done and touts this as a critical practice for high-performing teams. While I have […]

The Five Commandments of Version Control

Effective use of version control is a fundamental development practice, especially if there is more than one person working on the same code base. Below are the standard rules I use for the proper use of version control in the style of biblical old testament commandments. I like imagining an authoritative voice booming these commandments […]

Resolving PHP No Input File Specified Error for WordPress on IIS

My website was recently almost entirely non-functional for several days. I noticed the problem by the sharp drop in my traffic statistics, and a quick check of the site revealed that most of my pages were displaying a PHP message “No input file specified error” rather than the actual content. After a quick flurry of […]

Avoiding Distractions with Email

This article continues the theme of my previous article on avoiding being disturbed at work by looking at another source of distractions – email. Email is an important form of communication for me at work, but I as previously discussed I cannot afford to let the use of email distract me during my dedicated blocks […]

Boost Productivity Using a Do Not Disturb Policy

I have lately found myself busier than usual with meetings, project reviews, requests for assistance from team members, and the like. This caused me difficulties in finding time to do solo thinking-intensive work – specifically figuring out the architecture & design of a new software system. Books like Peopleware: Productive Projects and Teams and Flow: […]

Evolving my Vision and Mission

If you are a regular reader you may have noticed that I use guiding statements like a vision or mission to motivate and inspire myself and clarify my future direction. The following articles contain some of my past efforts: My Vision for IT Our Mission as Software Developers Becoming a Champion of Continuous Improvement I […]

Using Ivy to Manage Build Dependencies

Ivy is a tool for managing build dependencies within the Ant build tool. In this article I share my experiences using Ivy and provide recommendations on what to do and not do. This article is not a tutorial on using Ivy: for that see the Ivy documentation. Before getting into the specifics of Ivy, the […]

Java Code Examples Available

I have added a new project called Java Examples to my Software page. This project contains the source code used as examples in the following articles: Working with Java 5 Annotations Parsing and Generating XML with Java Advanced Uses of Java 5 Enums A Tale of Bad Exception Handling in Finally Blocks in Java Automatically […]

Java-Based Configuration of Spring Dependency Injection

At the heart of the Spring Framework is its dependency injection capabilities provided by its inversion-of-control container. Traditionally the configuration of dependencies has been done in one or more separate XML files. In these files you need to specify code-specific constructs such as the concrete classes to use as implementations of interfaces. It has always […]

Using Rotations to Develop Expertise

This article continues on from my prior article Improving Computer Science Degrees for Software Developers on the topic of better methods of developing expertise as software developers in the work place. The original inspiration for these articles is the post Master Craftsman Teams by Robert C. Martin in which he proposed a formalized development path […]

The Core Skills All Software Developers Need

Software development spans a wide gamut of technologies (e.g. C, Java, and Ruby) and environments (e.g. embedded, desktop, enterprise, web, computing infrastructure, and scientific). Despite all the variation, I believe there are core software development skills that you must possess in order to be an effective developer across most, if not all, of these different […]

Improving Computer Science Degrees for Software Developers

Two recent experiences prompted me to think deeply about how software developers start out in the field and develop their expertise. The first experience was reading an article by Uncle Bob titled Master Craftsman Teams. Bob’s main point is that the current model of developing expertise based on entering the field with a four year […]

How to Always Get Better: A Framework for Continuous Improvement

If you believe like I do that organizations must develop a culture of continuous improvement in order to flourish, then the question is how to achieve this. Throughout my career and especially in the last few years I have promoted effective software development practices and a philosophy of learning and growing as a professional. I […]

« Older Posts