tagged by: ieeeSoftware

From 2001-2005 I edited a column on design for IEEE Software. As well as writing several columns myself, I was able to rope in a very distinguished group of contributors.

Enterprise Architects Join the Team

Enterprise Architecture groups often get separated from day to day development. This can lead to their knowledge of development work getting out of date and development teams not taking a broad company-wide perspective. Having seen this happen frequently my colleague (Thoughtworks CTO) Rebecca argues that enterprise architects can be much more effective by joining development teams.

by Rebecca Parsons

Sep 2005

Read more…

ieeeSoftware enterprise architecture

Design to Accommodate Change

Table driven techniques to allow systems to change without major code changes.

by Dave Thomas

May 2005

Read more…

ieeeSoftware

Your Coffee Shop Does Not Use Two-Phase Commit

Baristas don't do synchronous processing - their reasons may be reasons for you to go asynchronous too.

by Gregor Hohpe

Mar 2005

Read more…

ieeeSoftware

Before Clarity

Clear code is good, but should you sacrifice clarity for testability?

by Michael Feathers

Nov 2004

Read more…

ieeeSoftware

Fail Fast

If software's going to go south, Jim explains in this column why it should collapse as fast as possible.

by Jim Shore

Sep 2004

Read more…

ieeeSoftware

The Most Important Design Guideline?

Everyone has their own list of important design guidelines. Scott concentrates on interfaces and how to design them so they are easy to use correctly and hard to use incorrectly.

by Scott Meyers

Jul 2004

Read more…

ieeeSoftware

MDA: Revenge of the Modelers or UML Utopia?

At OOPSLA 2003 Dave Thomas (the founder of OTI) gave a thoughtful and powerful critique of Model Driven Architecture. In this column he explains why he thinks a universal model-driven approach is likely to fail, and points out that the UML and Domain Specific Languages still have value.

by Dave Thomas

May 2004

Read more…

ieeeSoftware

Continuous Design

The rising popularity of refactoring, tools such as JUnit, and agile methodologies such as Extreme Programming (XP) has brought a new style of design into view. Continuous design is the process of using refactoring to continuously improve a program's design. In this column Jim discusses his experiences with continuous design, in particular with design issues that seem tricky such as internationalization and transactions.

by Jim Shore

Jan 2004

Read more…

ieeeSoftware

Data Access Routines

A common part of encapsulation, particularly with object-oriented systems, is hiding data structures. Yet it's also common to expose much of this data behind data access routines. In this column I cover some guidelines for writing data access routines. However don't forget that if you can leave the data hidden, that's usually better.

by Martin Fowler

Nov 2003

Read more…

ieeeSoftware

Who Needs an Architect?

What is architecture, and who exactly is an architect? These are questions that seem to get everyone very heated. So in this IEEE Software column, I let Ralph Johnson explain about architecture: with a definition that matches all others in a way that nobody agrees with. I also talk about two sub-species of architect: Architectus Reloadus and Architectus Oryzus.

by Martin Fowler

Jul 2003

Read more…

ieeeSoftware

The Difference between Marketecture and Tarchitecture

When we think about software architecture, we usually think about its technical architecture. But there's also another important architecture - the one we use to communicate with the customers of the software: the marketing architecture. Neglecting this “marketecture”, and its relationship with the “tarchitecture”, can get development projects into a lot of trouble.

by Luke Hohmann

Jul 2003

Read more…

ieeeSoftware

Components and the World of Chaos

Why chaos theory suggests that component assembly may not be as easy as it's cracked up to be.

by Rebecca Parsons

May 2003

Read more…

ieeeSoftware

Patterns

My IEEE column on the valuable contributions that patterns can make to understanding software design.

by Martin Fowler

Mar 2003

Read more…

ieeeSoftware writing

When to Make a Type

Guidelines on when to make a new user defined type (or class) for values.

by Martin Fowler

Jan 2003

Read more…

ieeeSoftware programming style

Using Metadata

You can use metadata based approaches to remove the pain from tedious data oriented tasks.

by Martin Fowler

Nov 2002

Read more…

ieeeSoftware programming style

How .NET's Custom Attributes Affect Design

Jim and Alexei took a leading role in developing a new version of NUnit. From this they reflected on how design is affected by the new .NET language feature of attributes.

by James Newkirk and Alexei Vorontsov

Sep 2002

Read more…

ieeeSoftware

Yet Another Optimization Article

It always surprises me that many well-established principles about performance optimization aren't very well known. This article is yet another attempt to cover these.

by Martin Fowler

May 2002

Read more…

ieeeSoftware

Public versus Published Interfaces

Many modern languages make a distinction between public and private features in a module. A distinction that doesn't get made so often is between public and published features: and that may be a more important distinction.

by Martin Fowler

Mar 2002

Read more…

ieeeSoftware API design

Avoiding Repetition

It's sometimes quite remarkable how the simple rule of avoiding repetition in software can lead into good design

by Martin Fowler

Jan 2001

Read more…

ieeeSoftware

Separating User Interface Code

One of the first lessons I learned was to always keep user interface code separate from anything else. Not just is this still good advice, it's surprising how often it's forgotten.

by Martin Fowler

Mar 2001

Read more…

ieeeSoftware

Protected Variation: The Importance of Being Closed

Craig's spot in the column looks at the importance of the Open-Closed principle and Protected Variation, and why Parnas's information hiding is more than encapsulation. He also gives some tips on ways to implement a protected variation.

by Craig Larman

May 2001

Read more…

ieeeSoftware

Reducing Coupling

Thinking about how to visualize and reduce coupling.

by Martin Fowler

Jul 2001

Read more…

ieeeSoftware

To Be Explicit

Often designs techniques are used to make a system more flexible, but end up being harder to work with. One of the reasons is that explicitness is a property that often gets forgotten in design.

by Martin Fowler

Nov 2001

Read more…

ieeeSoftware programming style

The Test Bus Imperative

Testability is such an important virtue that you should make architectural decisions to improve the testability of a system.

by Robert Martin

Jul 2005

Read more…

ieeeSoftware

Module Assembly

Modular programming is not just about programming to interfaces, it's also about assembling modules together without the various modules knowing which concrete modules they are talking to.

by Martin Fowler

Mar 2004

Read more…

ieeeSoftware

Modeling with a Sense of Purpose

The kinds of model you draw depends on the purpose that you want to put them to. John describes a useful distinction between conceptual, specification, and implementation models.

by John Daniels

Jan 2002

Read more…

ieeeSoftware


All 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 · data mesh · 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 · generative AI · ieeeSoftware · infodecks · internet culture · interviews · language feature · language workbench · lean · legacy modernization · legal · metrics · microservices · mobile · noSQL · object collaboration design · parser generators · photography · platforms · podcast · popular · presentation technique · privacy · process theory · productivity · programming environments · 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

2024 · 2023 · 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