And I want to conclude this lesson with three takeaway
messages. The first one is that having an effective architecture is
fundamental in a software project. Or as I say here,
a great architecture is a ticket to a successful project. To
put it in a different way, although a great architecture
does not guarantee that your project will be successful, having a
poor architecture will make it much more difficult for your project
to be successful. The second message is that an architecture cannot
come about in a vacuum. You need to understand
the domain of the problem that you're trying to solve
in order to define an architectural solution that fits the
characteristics of the problem. So a great architecture reflects a
deep understanding of the problem domain. And finally, a great
architecture is likely to combine aspects of several simpler architectures.
It is typical for engineers to see problems that are
new, but such that parts of the problems have already
been solved by someone else. An effective engineer should
therefore, first of all, know what is out there,
know the solution space. Second, an engineer should understand
what has worked well and what has failed miserably in
similar occasions in the past. And finally, an effective
engineer should be able to suitably combine existing solutions appropriately
to come up with an effective overall solution for
the specific problem at hand. And this is just as
true in the context of software architectures. When defining a software
architecture, you should innovate only as much as you need to and
reuse as much as you can. As we said early in the
lesson, by doing so, that is, by innovating only as much as
you need to and reusing as much as you can, you will
be able to avoid reinventing the wheel. You will be able to
choose the right solution to known problems. And identify suitable solutions for
new problems. So ultimately, you will be able to realize an effective
software architecture that will help the success of your project.