I’ve been so happy this year with my MacBook Pro and my iPhone X that I haven’t really missed having an iPad. But as soon as I got my new iPad last week all that changed and I wondered how I ever lived without it. Here are my top ten favorite apps for the iPad. …
Continue reading “My Ten Favorite iPad Apps”
Read MoreI’ve been a fan of iOS since I got an iPod Touch to manage my to do list and it ended up managing my life and my work with it. I’ve found several amazing apps for my iPad/iPhone/iPod over the years. Here are my top ten iPhone apps: 10. Phone Yes, I occasionally use my …
Continue reading “My Ten Favorite iPhone Apps”
Read MoreI’ve been a Windows developer since 1988. The version of Windows I started with was just called Windows. It was before Windows 286 and the popular Windows 3.1. Prior to that, I was an OS/2 developer and much of my code for the graphics system got consumed by Windows. So, when I switched from Windows …
Continue reading “My Ten Favorite macOS Apps”
Read MoreYes, it was on December 5th, 2008 that I wrote my first blog post. Over the next decade, I would write hundreds of posts on agile software development principles and practices. If you haven’t checked out this free resource, I encourage you to do so by visiting https://tobeagile.com/blog. I’ve recently recategorized my posts so it’s …
Continue reading “Announcing the Ten Year Anniversary of My Blog”
Read MoreWe refer to object-oriented programming as a paradigm or way of thinking because it’s more than just a set of techniques and practices. It’s a different way of modeling behaviors. It’s not necessarily as easy to learn as the syntax of a programming language. Object-oriented programming is subtly different than procedural programming and it’s easy …
Continue reading “Object Thinking”
Read MoreOk, I admit it. I am lazy. But laziness can be a virtue. I think it is humanity’s basic laziness that let us create computers in the first place. Computers take the drudge-work out of many tasks. My basic laziness has motivated me to find better ways to build software because I simply got tired …
Continue reading “The Virtues of Laziness”
Read MoreSometimes, when an important project is going poorly there’s a desire to start over. Sometimes this comes from management but often this comes from the developers themselves. They say if they only had a second chance and could start over then they can build the right system. But that almost never happens. Take it from …
Continue reading “Rebuild or Refactor”
Read MoreOne question that I hear a lot of people asking is whether they should buy or build the software that they need to run their enterprise. This is often a difficult question to answer. One thing I can say having lived through many major software purchases is that the main cost was understanding a system …
Continue reading “Buy or Build”
Read MoreOne of the most valuable development practice that has become popular recently is test-driven development. When done correctly, unit tests can dramatically drop the cost of maintaining software while increasing its value. All the things that management wants and needs from the processes that are built around software development are embodied in this simple practice …
Continue reading “More on Test-Driven Development”
Read MoreA lot of poor designs can be attributed to sticking with an existing design as changing requirements show us the need for a better one. Oftentimes, an initial design is just a stab in the dark. We might not know enough to make an informed decision but we have to get something done, so we …
Continue reading “Code Transformations”
Read MoreOne of the biggest challenges in building software is specifying what needs to be built. A blueprint captures all of the valuable information we need in order to build a building and details such as the tensile strength of the material and how to build a foundation are available through other sources. Blueprints have no …
Continue reading “Work Through Examples”
Read MoreI believe that testability is one of the key characteristics of good, maintainable software. But what do I mean by testability? Testable code is code that’s written in such a way that it is independently verifiable. It has a well-defined programmatic interface and it can be fully tested based on that interface. Testable code receives …
Continue reading “Making Code Testable”
Read MoreWhen I look at the systems around me I noticed three kinds. There are simple systems, there are complex systems, and there are complex adaptive systems. Most of us are familiar with simple systems. They have a direct cause and effect relationship that can be easily traced. Other systems are less direct. Complex systems are …
Continue reading “Complex Systems”
Read MoreOf course, we want the best of all worlds. We want our code to be clear and performant and extendable. But what happens when benefits are at odds with each other? What happens when, for example, in order to gain some clarity and improve maintainability we have to sacrifice some performance? Of course, the answer …
Read MorePair programming is the one Extreme Programming practice that I get the most pushback from both developers and managers. Most of us have experience programming as a solitary art form and we’ve done it alone. We figured out a bunch of things for ourselves and we don’t necessarily feel comfortable doing our work in the …
Continue reading “Pair Programming Pointers”
Read MoreRefactoring is a critically important concept in software. Anyone involved in the software industry should understand exactly what refactoring is and why it’s valuable. Refactoring is not just the redesign of code. The redesign must behave exactly in the same way as it did before. In many situations, this also means bug-for-bug compatibility as well …
Continue reading “The Stigma Around Refactoring”
Read MoreA couple of years ago I got to realize a lifelong dream when I became a published author. I was surprised to learn that many of the skills that I gained in becoming a good software developer were actually useful to me in becoming a good writer. Like code, prose should be well-encapsulated and cohesive, …
Continue reading “Read, Write, and Refactor”
Read MoreIn my last blog post, I shared with you my favorite refactoring and it might not have been what you were expecting. I can’t leave the topic without sharing with you my second favorite refactoring, as well. Like my favorite refactoring, my second favorite refactoring is also a safe refactoring, which means that if you …
Continue reading “My Second Favorite Refactoring”
Read MoreRefactoring code is an essential activity when working with existing systems, as well as building new ones. Refactoring techniques allow us to safely transform code into designs that are perhaps better suited for future extension. The techniques used to refactor code range from very simple to quite complex and there is a strong emphasis to …
Continue reading “My Favorite Refactoring”
Read MoreOne of my early blog posts that I wrote nearly 10 years ago that I called Sony Baloney discussed how the electronics giant cultivated some unusual, yet highly successful practices. One of the practices that Sony is known for is taking young and inexperienced engineers and putting them on new product development, while their senior …
Continue reading “Surgery on Legacy Code”
Read MoreIn my early days of computing back in the late 70s and early 80s, having an interest in microprocessor design was unusual. I remember getting almost monthly updates from Motorola and Intel on their latest chips and my shelves were filled with technical manuals. Information flowed freely and it felt that we were part of …
Continue reading “Sharing Knowledge”
Read MoreSoftware development is a unique human activity but it bears resemblance to other activities such as math, writing, and engineering. I think of writing software as a modeling process but unlike modeling physical things that occur in space, we’re modeling processes that occur in time. Therefore, writing software is a process of creating models that …
Continue reading “Encapsulate Change”
Read More