We released Lattix 7.0 last month and its been a hectic time.
Let's take a quick glance at history. Lattix 6.0 was released last year and was followed up by a point release every month, each adding significant new features and usability.
We now have the platform for the next round of improvements. I will discuss various new features of Lattix in my upcoming blog postings. Today we will talk about the concept of a Profile, new in Lattix 7.0.
Lattix 7.0 sports 4 different profiles:
What is Profile?
A profile is a configuration of Lattix that comprises of related modules, tools, scripts, and default settings to support a common usage pattern.
Consider just a few examples (these are just examples, each profile has many more capabilities):
- You are doing C/C++ development. If you are working on a mobile device, you may also have an interest in understanding how your Java application uses JNI to call into C/C++ based services. If your code is strongly object oriented, you may be interested in combining source(cpp) and header(hpp) into a single abstraction.
- You are applying Lattix to Java applications. It is highly probable that you also care about Spring, Hibernate, EJBs, Hibernate and other frameworks. You may even have an interest in databases.
- Your primary environment is a .NET based enterprise. You want to understand how managed code interacts with unmanaged code. You may also want to understand how the schemas, tables, stored procedures of your SQL Server are organized.
- You are an expert in DSMs. You use Lattix for its powerful restructuring and impact analysis capabilities. Your data is in Excel. You are used to different conventions for dependencies and ordering.
A profile makes Lattix easier to use and gives visibility to a host of related capabilities that are built into Lattix.
What if your use of Lattix does not correspond to one of these profiles? In that case, you always have the ALL profile, which makes all the modules, tools and scripts available. In fact, the intrepid users can create their own profile or alter an existing profile.
How much "architecture" is good for agile development? How should you think about the future implications of design as you write code to meet immediate requirements? A recent article in CrossTalk, tackles this subject head on. The authors - Nanette Brown, Robert Nord and Ipek Ozkaya are from Software Engineering Institute (SEI) and well known for their prior contributions to the study of software architecture.
In their own words: Our mantra for Architectural Agility is “informed anticipation.” The architecture should not over-anticipate emergent needs, delaying delivery of user value and risking development of overly complex and unneeded architectural constructs. At the same time, it should not under-anticipate future needs, risking feature development in the absence of architectural guidance and support. Architectural Agility requires “just enough” anticipation.
According to them, tools such as dependency management, real options analysis and technical debt management can help you strike the right balance. Check out this thought provoking article: Enabling Agility Through Architecture.
Lattix 6.0 was released earlier this year. We have continued our tradition by adding a slew of new features and improvements to the new platform through successive releases. Lattix now includes support for additional languages, improvements to the database parsers, sports several new reports, and has a host of usability and performance improvements. However, none is more important than the new Repository and LattixWeb Application. Built with Tomcat, GWT and Flex, the web application is the platform for new capabilities and further improvements in the future.
The Lattix Repository supports continuous integration with the ability to populate the repository from both the LDM and the LDC command line utilities. Users can now use the web application to graph metrics, compare builds and examine the architecture - all from the browser. Most importantly, it brings architectural visibility to the entire team.
Traditionally, when a new developer joins the team, they start out with a small project or by fixing a bug. It helps them to understand their new development environment and how the project is organized. Most of the time there are no architectural rules or pictures to guide them in the process. Every new developer creates their own mental image of the project, which gets progressively refined over time as the developer’s understanding improves. This is a process that is repeated over and over with every new developer. Over time, every developer generates a view of the architecture that reflects their individual expertise and experience. Unfortunately, there is no way to ensure that these private views are consistent with each other. The net result is that the architecture erodes over time and architectural boundaries become defuse. Changes are difficult; it is hard to estimate the effort needed to support new requirements; and it takes a long time to test changes to the system.
The Repository and LattixWeb Application provides a way for developers to continuously refine and publish the architecture so that the entire team shares a consistent vision and the architecture reflects the actual implementation. Architectural violations are caught and fixed early and during development. Architectural evolution now becomes explicit. New developers understand the current architecture right at the start and team productivity improves significantly. Many of our customers have now started the process of publishing the architecture and monitoring its changes.

DSM with Context Sensitive Dependency Cells

Conceptual Architecture with Context Sensitive Boxes

Metrics: Graph of Number of Types

Metrics: Trend Intercomponent Cyclicality
If you too would like architecture to be explicit and clear, please contact us. With the broadest support for languages, frameworks and databases, we will be happy to work with you to implement a system of architecture management that dovetails with continuous integration and brings visibility that is beneficial to every stakeholder.
