martinfowler.com
Open in
urlscan Pro
198.101.146.21
Public Scan
Submitted URL: http://martinfowler.com/
Effective URL: https://martinfowler.com/
Submission: On April 27 via api from GB — Scanned from GB
Effective URL: https://martinfowler.com/
Submission: On April 27 via api from GB — Scanned from GB
Form analysis
3 forms found in the DOMGET https://www.google.com/search
<form method="GET" action="https://www.google.com/search">
<input type="hidden" name="ie" value="UTF-8">
<input type="hidden" name="oe" value="UTF-8">
<input class="field" type="text" name="q" size="15" maxlength="255" value="">
<button class="button" type="submit" name="btnG" value=" " title="Search">
<input type="hidden" name="domains" value="martinfowler.com">
<input type="hidden" name="sitesearch" value="">
<input type="hidden" name="sitesearch" value="martinfowler.com">
</button>
</form>
GET https://www.google.com/search
<form method="GET" action="https://www.google.com/search">
<input type="hidden" name="ie" value="UTF-8">
<input type="hidden" name="oe" value="UTF-8">
<input class="field" type="text" name="q" size="15" maxlength="255" value="">
<button class="button" type="submit" name="btnG" value=" " title="Search">
<input type="hidden" name="domains" value="martinfowler.com">
<input type="hidden" name="sitesearch" value="">
<input type="hidden" name="sitesearch" value="martinfowler.com">
</button>
</form>
GET https://www.google.com/search
<form method="GET" action="https://www.google.com/search">
<input type="hidden" name="ie" value="UTF-8">
<input type="hidden" name="oe" value="UTF-8">
<input class="field" type="text" name="q" size="15" maxlength="255" value="">
<button class="button" type="submit" name="btnG" value=" " title="Search">
<input type="hidden" name="domains" value="martinfowler.com">
<input type="hidden" name="sitesearch" value="">
<input type="hidden" name="sitesearch" value="martinfowler.com">
</button>
</form>
Text Content
* Refactoring * Agile * Architecture * About * Thoughtworks * * TOPICS Architecture Refactoring Agile Delivery Microservices Data Testing DSL ABOUT ME About Books FAQ CONTENT Videos Content Index Board Games Photography THOUGHTWORKS Insights Careers Products FOLLOW Twitter RSS Software development is a young profession, and we are still learning the techniques and building the tools to do it effectively. I've been involved in this activity for over three decades and in the last two I've been writing on this website about patterns and practices that make it easier to build useful software. The site began as a place to put my own writing, but I also use it to publish articles by my colleagues. In 2000, I joined Thoughtworks, where my role is to learn about the techniques that we've learned to deliver software for our clients, and pass these techniques on to the wider software industry. As this site has developed into a respected platform on software development, I've edited and published articles by my colleagues, both ThoughtWorkers and others, to help useful writing reach a wider audience. photo: Christopher Ferguson Martin Fowler A WEBSITE ON BUILDING SOFTWARE EFFECTIVELY If there's a theme that runs through my work and writing on this site, it's the interplay between the shift towards agile thinking and the technical patterns and practices that make agile software development practical. While specifics of technology change rapidly in our profession, fundamental practices and patterns are more stable. So writing about these allows me to have articles on this site that are several years old but still as relevant as when they were written. As software becomes more critical to modern business, software needs to be able to react quickly to changes, allowing new features to be be conceived, developed and put into production rapidly. The techniques of agile software development began in the 1990s and became steadily more popular in the last decade. They focus on a flexible approach to planning, which allows software products to change direction as the users' needs change and as product managers learn more about how to make their users effective. While widely accepted now, agile approaches are not easy, requiring significant skills for a team, but more importantly a culture of open collaboration both within the team and with a team's partners. This need to respond fluently to changes has an important impact upon the architecture of a software system. The software needs to be built in such a way that it is able to adapt to unexpected changes in features. One of the most important ways to do this is to write clear code, making it easy to understand what the program is supposed to do. This code should be divided into modules which allow developers to understand only the parts of the system they need to make a change. This production code should be supported with automated tests that can detect any errors made when making a change while providing examples of how internal structures are used. Large and complex software efforts may find the microservices architectural style helps teams deploy software with less entangling dependencies. Creating software that has a good architecture isn't something that can be done first time. Like good prose, it needs regular revisions as programmers learn more about what the product needs to do and how best to design the product to achieve its goals. Refactoring is an essential technique to allow a program to be changed safely. It consists of making small changes that don't alter the observable behavior of the software. By combining lots of small changes, developers can revise the software's structure supporting significant modifications that weren't planned when the system was first conceived. Software that runs only on a developer's machine isn't providing value to the customers of the software. Traditionally releasing software has been a long and complicated process, one that hinders the need to evolve software quickly. Continuous Delivery uses automation and collaborative workflows to remove this bottleneck, allowing teams to release software as often as the customers demand. For Continuous Delivery to be possible, we need to build in a solid foundation of Testing, with a range of automated tests that can give us confidence that our changes haven't introduced any bugs. This leads us to integrate testing into programming, which can act to improve our architecture. PHOTOSTREAM Heian-jingu Shrine Kyoto, Japan (2004) DATA MANAGEMENT There are many kinds of software out there, the kind I'm primarily engaged is Enterprise Applications. One of the enduring problems we need to tackle in this world is data management. The aspects of data managment I've focused on here are how to migrate data stores as their applications respond to changing needs, coping with different contexts across a large enterprise, the role of NoSQL databases, and the broader issues of coping with data that is both Big and Messy. DOMAIN-SPECIFIC LANGUAGES A common problem in complex software systems is how to capture complicated domain logic in a way that programmers can both easily manipulate and also easily communicate to domain experts. Domain-Specific Languages (DSLs) create a custom language for a particular problem, either with custom parsers or by conventions within a host language. BOOKS I've written seven books on software development, including Refactoring, Patterns of Enterprise Application Architecture, and UML Distilled. I'm also the editor of a signature series for Addison-Wesley that includes five jolt award winners. My Books Page... CONFERENCE TALKS I'm often asked to give talks at conferences, from which I've inferred that I'm a pretty good speaker - which is ironic since I really hate giving talks. You can form your own opinion of my talks by watching videos of some my conference talks. My Videos Page... BOARD GAMES I've long been a fan of board games, I enjoy a game that fully occupies my mind, clearing out all the serious thoughts for a bit, while enjoying the company of good friends. Modern board games saw dramatic improvement in the 1990's with the rise of Eurogames, and I expect many people would be surprised if they haven't tried any of this new generation. I also appear regularly on Heavy Cardboard. My Board Games page... TAGS API design · agile · agile adoption · analysis patterns · application architecture · application integration · bad things · board games · build scripting · certification · collaboration · computer history · conference panels · conferences · continuous delivery · covid-19 · data analytics · database · design · dictionary · distributed computing magazine · diversions · diversity · documentation · domain driven design · domain specific language · domestic · encapsulation · enterprise architecture · estimation · event architectures · evolutionary design · experience reports · expositional architectures · extreme programming · front-end · gadgets · ieeeSoftware · infodecks · internet culture · interviews · language feature · language workbench · lean · legacy rehab · legal · metrics · microservices · mobile · noSQL · object collaboration design · parser generators · photography · podcast · popular · presentation technique · privacy · process theory · productivity · programming platforms · programming style · project planning · recruiting · refactoring · refactoring boundary · requirements analysis · ruby · security · talk videos · team environment · team organization · technical debt · technical leadership · test categories · testing · thoughtworks · tools · travel · uml · version control · web development · web services · website · writing 2022 · 2021 · 2020 · 2019 · 2018 · 2017 · 2016 · 2015 · 2014 · 2013 · 2012 · 2011 · 2010 · 2009 · 2008 · 2007 · 2006 · 2005 · 2004 · 2003 · 2002 · 2001 · 2000 · 1999 · 1998 · 1997 · 1996 All Content RECENT CHANGES If you'd like to be notified when I post new material, subcribe to my RSS or Twitter feeds. I also have a page dedicated to recent changes. -------------------------------------------------------------------------------- HOW I USE TWITTER Tue 26 Apr 2022 08:50 EDT A couple of recent conversations about Twitter were nudging me into writing about how I use Twitter even before The Muskover developed. Twitter has become an important part of my online life, and my online life is a big part of what I do. But like any tool, Twitter can be used in many different ways, and how you use it affects how useful it can be. more… -------------------------------------------------------------------------------- TRANSITIONAL ARCHITECTURE Mon 28 Mar 2022 14:49 EDT The core to a successful legacy displacement is the gradual replacement of legacy with new software, as this allows benefits to delivered early and circumvents the risks of a Big Bang. During displacement the legacy and new system will have to operate simultaneously allowing behavior to be split between old and new. Ian Cartwright, Rob Horn, and James Lewis explain how to build and evolve a Transitional Architecture that supports this collaboration as it changes over time. For this to work, intermediate configurations may require integrations that have no place in the target architecture of the new system. Or to put this more directly - you will have to invest in work that will be thrown away. more… -------------------------------------------------------------------------------- HOW SCALEUPS GET CONSTRAINED BY TALENT Thu 10 Mar 2022 10:31 EST The second bottleneck in the series looks at talent, and how scaleups struggle to hire enough good people. Tim Cochran and Roni Smith explain how the small network and informal processes that allow early stage startups to grow begin to fail during the scaleup phase, and what signs indicate a new approach is needed. more… -------------------------------------------------------------------------------- BOTTLENECKS OF SCALEUPS: HOW DID YOU GET TECH DEBT? Tue 08 Mar 2022 09:40 EST In its early days, a startup searches for a good product-market fit. When it finds one it looks to grow rapidly, a phase known as a scaleup. At this time it's growing rapidly along many dimensions: revenues, customer, headcount. At Thoughtworks, we've worked with many such scaleups, and our work has focused on how to help them overcome various bottlenecks that impede this growth. As we've done this work, my colleagues have noticed common bottlenecks, and learned approaches to deal with them. This article, by Tim Cochran and Carl Nygard, is the first in a series that examines these bottlenecks, in this case looking at the problem of a startup accumulating technical debt. This bottleneck is a common one, and like most bottlenecks it isn't necessarily due to bad work so far, but more due to the change of context that rapid growth imposes on a company. We begin the article by explaining how this bottleneck appears and what the key signs are the bottleneck is slowing progress. more… -------------------------------------------------------------------------------- BUILDING INFRASTRUCTURE PLATFORMS Tue 01 Feb 2022 09:52 EST A lot of organizations are looking to improve the way their teams build on top of clouds by assembling their own preferred set of cloud components into an infrastructure platform. This allows product teams work with a consistent and curated set of services, rather than having to figure it out on their own. Poppy Rowse and Chris Shepherd have worked with several of these teams and put together some guidelines on how to do this successfully. They begin by outlining how to create a strategy for such a platform. more… -------------------------------------------------------------------------------- DIVERT THE FLOW Thu 20 Jan 2022 10:50 EST Yesterday Ian Cartwright, Rob Horn, and James Lewis described the Critical Aggregator and how it can metastasize into an invasive form. When a legacy system has such an Invasive Critical Aggregator it's often best, if a little counter-intuitive, to Divert the Flow of data by building a new critical aggregator first. Once this is done, we have far more freedom to change or relocate the various upstream data sources. more… TOPICS Architecture Refactoring Agile Delivery Microservices Data Testing DSL ABOUT ME About Books FAQ CONTENT Videos Content Index Board Games Photography THOUGHTWORKS Insights Careers Products FOLLOW Twitter RSS © Martin Fowler | Privacy Policy | Disclosures