Blog

5 Ways Executive Leadership Can Affect the Success of an Agile Adoption

By: Mike Lepine | Apr 17, 2015 |  Agile Transformation,  Article,  Leadership

According to the 2015 State of Agile Survey, the top three benefits of an agile adoption are:

  1. The ability to manage changing priorities
  2. Improved team productivity
  3. Greater project visibility

We’ve found that executive leadership plays an integral role in the success of an agile adoption. Here are the top 5 things executive leadership can do to realize these benefits. (more…)

Blog

Agile Development: Developing the Right Way

By: Mike Lepine | Apr 01, 2015 |  Article

Man using post it notes for Agile Development

As you work your way through another morning commute, you take a sip of coffee and reflect on the software you’re building. You ask yourself, “Are we doing Agile Development the right way?” You realize you can’t answer the question. The only data you have measures the success or health of the organization as a whole: sales, revenue, customer count, etc. They don’t provide the insight to help you understand whether the core of your business is being done right. What is the right way? How do you know?

Getting Started 

So, how do you begin to answer these questions and more importantly, take action to ensure you’re developing the right way? You’ve started the process already—you’re asking questions. Improvements arise out of repeatedly questioning the status quo. Here are a few questions to discuss with your team:

  1. What development process are we using today?
  2. Does everyone understand and enjoy the process?
  3. Do we ever try to improve the process?
  4. Are teams (Development, QA, Operations, Support) working together?
  5. How difficult is it to deliver new functionality to clients?
  6. Who prioritizes work?
  7. Do priorities change regularly?
  8. Is a lot of time spent writing lengthy requirement and design documents?

It’s imperative these questions are asked and answered honestly and constructively so the data is valuable. For that to happen, everyone needs to feel their input will be appreciated. The answers to these questions will reveal a lot about your culture, process, and efficiency.

For instance, if there is no consistent answer to the first question, there is a structural problem. Regardless of what the process is called, it’s important for teams to work together within a process and also continually adapt that process so it’s effective for the way they work.

Agile Development – Developing the Right Way

The only way to ensure you’re developing the right way is to adopt a development methodology such as Agile, which embraces an approach rooted in continuous improvement based on constant, rapid feedback. No individual, team or organization is going to execute perfectly every day and every time. There’s always room for improvement. Agile was created by a handful of respected software engineers who understood the ultimate measure of success in software development is working software.

Scrum is the most prolific agile framework. It provides a structured approach to development by regularly prioritizing features, developing in short cycles and incorporating feedback frequently to ensure what is being developed aligns with client needs. There are regular meetings, or retrospectives, for the team(s) to assess how things are going and ways to improve.

Scrum provides the structure to ensure the right opportunities exist for prioritization and improvement. For software teams, combining Scrum with a set of technical practices or techniques to meet design and quality standards has proven to be effective, improve morale and even increase a company’s ROI on their software investment.1

Often referred to as Technical Practices, there are a number of popular practices recommended for teams to achieve the benefits identified above. Some of these include TDD (Test Driven Development), automated testing, pair programming, emergent design, refactoring and continuous integration. Taking it to the next level would mean leveraging metrics. That’s a topic for another post though.

Final Thoughts

By understanding there is no right approach to anything we do, you can answer the question, “Are we developing the right way?” Adopting an Agile development process heightens your ability to identify inefficiencies/issues quickly and act to address them. The constant balance of effort and improvement is what will provide confidence that you, your team and your organization are doing things the right way.

Related resource articles:
The Value of Developers Doing Acceptance TDD

Automated Testing

It’s Not Just About Process


1 David F. Rico, Hasan H. Sayani, Saya Sone, The Business Value of Agile Software Methods: Maximizing Roi With Just-in-time Processes and Documentation, 2009 (J. Ross Publishing)

Blog

Legacy Applications: Lessons in Coupling

By: Mike Lepine | Feb 09, 2015 |  Agile Technical Practices,  Article,  Technical Practices

2 ladybugs coupling - legacy applicationsI struggled with a number of potential topics for this blog before settling on this one. I understand this isn’t a flashy topic like a comparison of JavaScript MVC frameworks or centralized logging solutions; however, I’ve been working on-and-off with legacy applications throughout my career and have come to truly realize the constrictive nature of coupling logic. Avoiding coupled applications can save your sanity and possibly your business as well. In this post, I will discuss coupling in software applications, strategies for avoiding it and a plan to refactor a legacy application into a decoupled one to help your organization get more value from its product.

Coupling – What is it?

When software contains knowledge of the inner workings of other layers or modules, it is considered to be coupled. As an example, let’s take a hypothetical student registration system created for web users. Fundamentally, “the system” is comprised of registration (business) logic, student data, and a user interface – in this scenario, web pages. Coupling occurs when core application logic appears in one of the other tiers or the core application becomes aware of the specifics of the external modules. Using our example as a reference, if the core logic was programmed for web page presentation or worse, application logic seeped into the presentation tier, then it would be considered coupled. In this case, it would be coupled to a web-based scheme.

A lot of readers will recognize our strategy for the student registration system as an MVC (Model-View-Controller) architecture. This is probably the most pervasive strategy leveraged by software organizations building web-based solutions over the last 15 years. You may not necessarily hear MVC being touted as frequently these days, but it feels just as relevant (and possibly more poignant) now than it was years ago. One of the main goals of the MVC pattern is to prevent coupling typically in a 3-tier architecture. If implemented as designed, then interchanging the endpoints or tiers is not only possible but should require minimal effort. With a decoupled design, a new requirement to support native mobile apps or to switch from a traditional RDBMS to a NoSQL data store should be doable without rewriting the core application logic. The MVC design strategy isolates and identifies the responsibilities of each tier but doesn’t discuss how communication should be handled between the tiers to avoid coupling. This brings me to another design approach that emphasizes a decoupled solution – Hexagonal Architecture.

Decoupling Strategies – Designing for Decoupled Solutions

Alistair Cockburn wrote an article on Hexagonal Architecture in which he explains the motivation for decoupled solutions. The design is known by two common names (and possibly others as well). The first name, Hexagonal Architecture (see diagram on the right), comes from the fact that the figure used to describe the architecture is comprised of two hexagons, an inner one representing the application (logic) and an outer one representing the boundary between it and other systems. Alistair said he used hexagons not because the number 6 (hexagons have 6 sides) is important, but to provide room for illustrating multiple ports and adapters.

This brings us to the second common name which is the Ports & Adapters Strategy. Going back to the two hexagons representing the architecture, the inner hexagon contains the application logic and represents the boundary for ports (connections to it). The area between the inner hexagon and the outer one represents adapters which manage communication between external devices/systems and the ports.

Now that we understand the origin of the name, let’s focus on the strategy itself. As emphasized by the MVC strategy, a fundamental principle is to avoid coupling and keep the application logic from leaking into other tiers. A Hexagonal Architecture surrounds the application with ports that allow interaction with it. These ports can be thought of as APIs. The term port is used to evoke thoughts of a standard port on a network. If I have an application that supports the FTP protocol, I should be able to connect to servers/networks that expose FTP, typically on port 21. The thought here is the same. From our application, we don’t need to know what is communicating with a port, and it can communicate as long as it conforms to the interface (API). The adapters are the layer between ports and other devices/systems. They are responsible for managing and translating the communication between the ports and other systems. Using this strategy, the level of effort to allow the application to interact with other systems is directly related to the creation of the adapter.

This was a very brief overview of the architectural approach and more can be read by using the links in the References section; however, my goal was to introduce the strategy and bring an emphasis to decoupled architectures. Leveraging these strategies, separate the core application/domain logic from the delivery mechanisms such as web, mobile, data store, etc. It decouples and separates each of those concerns so they can be tested independently and adapted over time as needs change without disruption to the rest of the system.

Decoupling Legacy Applications

This sounds great, right? I’m sure anyone reading this and working on a legacy application that suffers from coupling is thinking it’s impossible to get here without rewriting the application entirely. Depending on the size of the application, that may be the case; however, using an agile approach, it can be accomplished iteratively. All is not lost but it will take discipline and buy-in from not only the team but possibly the organization. First, there has to be a business need. What value can be gained by transitioning to a decoupled solution? Obviously there are numerous technical reasons, but the business must benefit to provide justification. For instance, quality has been an issue and it is difficult and time-consuming to write/maintain tests for the application due to coupling (logic cannot fully be tested without the UI because logic exists there as well). Or, the business is losing opportunities in the mobile space because the application only works properly when rendered in a web browser.

Once the business justification has been adequately identified and the team is in agreement, the strategy should be identified and communicated. Most likely this will require significant refactoring so you’ll need to know how the application functions before you start and be able to verify functionality after refactoring. Do this through automated testing. If unit and integration tests do not already exist, then be sure to include this as part of the effort. Another point to keep in mind is functional and non-functional testing. It is important that the functionality of the system logic is verified before, during and after changes, but it is also important to monitor the non-functional behavior as well. For instance, if performance and security are important to your application, having automated approaches to monitor these during the refactoring process (and beyond) is a good idea. It’s important to know quickly when a change has been made that negatively impacts one of the thresholds critical to your application and business.

With the safety net of automated tests in place, use small, targeted iterations to progressively work through the changes. You will learn more and more as you proceed and it may take a few iterations to determine the right approach. Once again, with the business justification validated upfront, it is understood that this will take time, needs to be done right and not rushed. I believe the single biggest threat to decoupled systems is artificial deadlines and upper management pressure.

Final Points

Finally, I have obviously only skimmed the surface here and could go on a few more pages on this topic. (I’m lucky if you have stuck with me this long.) It requires discipline to avoid coupled solutions. The benefits far outweigh the individual effort to keep systems clean. One final thing–once you’ve encountered a system that suffers from coupling issues and you’ve understood the negative impact it has on the business and even the development team, please use that knowledge as a tool to help future initiatives and teams you interact with to avoid the pitfalls. A favorite quote of mine to drive this home:

“Those who cannot remember the past are condemned to repeat it.”

– George Santayana.

References

MVC Design Pattern

3-Tier Architecture (simple explanation)

Alistair Cockburn’s article on Hexagonal Architecture