High level architecture

Even if you use Agile, you will need a high-level architecture before you can start a project.

By high-level architecture, I mean to divide the project into small parts, infrastructure, distributed / web interface / thick client, etc.

Are there any books / articles on this topic?

+4
source share
5 answers

I have had this argument with Kent Beck more than once, and he would say that you are simply mistaken, that you do not need to make these architectural decisions, or rather, you should choose Simplest Thing. It can work and work from there.

The problem that I see is that you can go a long way along the tracks before you find that STTCPW, in fact, will not work, and will leave you with a lot of refinement. Now, if you are doing something right in stages or even better with a risk model, so first you research the most risky decisions, so I hope you notice these things relatively early, but there is certainly no guarantee.

The other side is that many Agile projects are in contexts where most of the architecture is predefined, such as Ruby on Rails or J2EE. These systems significantly reduce risk because you have a specific environment.

I do not know any specific books on this subject, although I am thinking of writing; this is still largely discussed in the Agile Community.

Perhaps my favorite forums are Martin Fowler blik i, and InfoQ , with the caveat that I am going to start posting on infoQ, and therefore may be biased.

+4
source

Good article on the topic "Who needs an architect?" from Martin Fowler.

My personal business is that you probably need to make far fewer architectural decisions ahead than you think. If you just do enough to come up with reasonable estimates, you should behave yourself.

You will need to pay close attention to design forces and, nevertheless, receive refactoring. You will want to start practicing it as soon as possible. Without coming up with architecture in front, you have to give you many possibilities .;)

Will you make the wrong decision? Yes. It will take time to change the architecture. Sure.

But you also saved a lot of time by not trying to come up with the architecture ahead. And, since you have the least amount of information at the beginning of the project, the architecture at first would not really be “right,” anyway. With some luck, this will be “just” redundant, more likely to be made decisions that you better change later.

Regarding risk, remember that you must first start developing the most important functions. Thus, your architecture will essentially be built to support the most important functions, which is exactly what it should be.

A good book you can read on this topic is Robert Martin "Agile Software Development - Principles, Patterns, Practices."

+3
source

In general architecture, you, for example:

And you have platform specific books, for example for java:

  • Certified Sun Architect for the JEE Study Guide.
  • Brommer: J2EE Best Practices

Wikipedia has a fairly complete list of pointers to software architecture .

+1
source

This is a key issue with Agile, and I don't think anyone has solved it. Initial architectural decisions are critical to success, and as Kent Beck says, you would put them off until you have enough information.

What he can say is, of course, largely because he can choose his clients and demand this degree of freedom. Three months for a project that changes the language of implementation may be fine, but for most of us this is not an option. We must make some decisions quite early, and they must be right. We must work with insufficient information and make the best use of our experience and capabilities.

Most architectural texts have a process starting with English sentences expressing the required functionality and then decomposing nouns and, ultimately, verbs into semantic representations of classifiers, which ultimately turn into real lines of code.

We cannot do this too easily: user stories cannot be decomposed because they are not detailed enough and we have no other sources of functional requirements.

I would suggest avoiding something like UML (for something other than storing your own notes) until you at least write your release plan and you have some idea of ​​which stories are likely to be implemented in Iteration. At this stage, you can begin a detailed work with architecture.

Before that, you have to make some decisions, and the best way to manage them, I think, is to try to determine which part you can:

  • what non-functional requirements may be
  • what standards you must follow
  • what existing systems should you interact with and their APIs,
  • what will the deployment platform be
  • what skills does the target operating group have,

That kind of thing. Often these restrictions can be short enough in the expected delivery so that you can be sure of the high-level components and where they will be located.

Something that I highly recommend makes Information Architecture work on user interfaces. User interfaces are fragile and expensive to change, and the presentation of the wireframe is close enough to the finished article so that you can discuss with interested parties and get valuable answers.

You need a good information architect, and you need to regularly make changes to IA for user stories to ensure that everyone in them gets a proper rating.

To work with the non-user interface, think about some basic concepts in the solution - often things such as transaction boundaries and transaction security requirements can be clearly defined and indicated, even if you do not know what is specifically contained in each type of transaction. Make a few statements about limitations and success criteria specifically for transactions and data security and get their consent from the parties concerned.

Finally, at the beginning of each iteration, you can perform some detailed modeling and work with the architecture, since there is a real functional decomposition. I highly recommend inserting a preliminary iteration at this time for this work. At the beginning of the actual iteration coding, you should have a clear idea of ​​each class that you intend to create, where it will live and what it will talk to. If you do not have this, it is not possible to agree on a development team.

+1
source

It looks like you are discussing functional decomposition.

There are approaches from bottom to top and top to bottom. I like to think about the project from both sides. This is especially important because when you start from the bottom, you can think of classes and their methods. When you start from above, you can think about how the program will flow.

Try:

Large-scale C ++ software development (Addison-Wesley Professional Computing Series) by John Lacos (Paperback - July 20, 1996)

0
source

All Articles