SlideShare a Scribd company logo
1 of 10
Download to read offline
Tech challenges In a Large-Scale Agile Project

                        Harald Søvik and Morten Forfang

              Computas AS, Lysaker Torg 45, 1327 Lysaker, Norway
              {hso,mfo}@computas.com, http://www.computas.com


      Abstract. A five year, 25 man java project effort, that started with
      a waterfall-like methodology and that adopted Scrum after less than
      a year, has been concluded. We present three key technical challenges,
      briefly analyze their consequences and discuss the solutions we adopted.
      Firstly, we discuss how we modularized our architecture, module delin-
      eation principles, coupling and the trade-offs of abstraction. Then we
      discuss testing environments, their automation and relation to branches
      and the effect on customer involvement and feedback. Finally we discuss
      the benefits and disadvantages of representing domain knowledge declar-
      atively. For all three challenges we discuss how the project’s agility was
      affected.

      Key words: java, scrum, agile, modularization, coupling, technical chal-
      lenge, module bloat, dependency, applicaiton layer, pojo, ide, testing,
      branch, continuous integration, deploy, maven, database updates, do-
      main expert, footprint, declarative knowledge, business logic, domain
      knowledge, process



1 Introduction

A 5 year long Java and agile-project has recently come to a conclusion. It has
been conducted between Computas (a Norwegian consultancy firm) and a major
Norwegian governmental authority. As a rather large project (manning 20-30
developers throughout the project), it has faced a lot of challenges, but overall
the project is recognized as a major success.
    This experience reports focuses on three major technical challenges that arose
during the project. We believe those challenges partially can be attributed to
the SCRUM methodology. For each of them, we try to identify the consequence
and the cause, and then follow up with any solutions we tried, and an analysis
of whether the problem was successfully solved or not.

1.1 A brief history

The project started out using a crossover variant of the waterfall methodology
and long-term iterations, but turned towards agile after 8 months of develop-
ment. The customer and domain experts needed to see, touch and feel the system
2       Harald Søvik and Morten Forfang

being developed. A lot of them were previously not familiar with software de-
velopment. Being able to see results of their decisions quickly made them more
confident and eager.
    To support parallel development, the project was organized into 4 different
teams, whereas 3 were committing to the development branch, and one team
working maintenance on the production branch. The teams were ”self sufficient”
in technical expertise - meaning that multiple programmers could be working
simultaneously on the same module or layer of the system. The teams were also
assigned a pool of domain experts suitable for the tasks they had chosen for the
next iteration.
    The project were divided into 4 overall domain-centric periods, each support-
ing a specific business target. All of these focused on similar goals:
–   Enable self-service or more automated customer interaction
–   Reduce the number of internal databases and managed systems
–   Increase data quality
–   Unify business processes to ensure quality


2 Coupling and modularization
The dependency topology of a system and it’s relation to evolvability is a cur-
rent, active research field ([3]). It is predominantly argued that modularization,
low coupling and high cohesion are characteristics that enhance salient non-
functional characteristics of a system, like analyzability, integrity, changeability
and testability ([4], [7]). In this section, we explore some of the trade-offs we
have found between modularization and various forms of efficiency.
    We use the terms subsystem, cohesion, coupling and framework as defined by
[6] and component and collaboration as defined by [8].

2.1 Subsystems and frameworks

The project consists of a series of core subsystems and legacy systems. In this ar-
ticle we focus on the Mats subsystem. This subsystem depends crucially on the
Framesolutions framework. The Framesolutions framework is a fairly compre-
hensive set of customizable, proprietary components that many of our projects
use. It at the same time provides core functionality on all application layers and
it provides a fairly rigid set of programming patterns. The framework is centrally
maintained separately from the project source code.

2.2 The Mats subsystem

For the purposes of this article, the The Mats subsystem features four build-time
modules; the application server, the web server, the client and a common module.
The run-time and compile-time dependencies between these are illustrated in
figure˜1.
Tech challenges In a Large-Scale Agile Project    3




Fig. 1. The build time and runtime dependencies between important Mats subsystem
modules.


    Technologically, the two first are realized as Java enterprise archives running
on JBoss 4.2.3 servers, the client is a Java application and the common module
is a jar file included in all the other modules.
    Overall, this particular way of modularizing the Mats subsystem strikes a
good balance between having increased complexity through many modules, de-
creased intra-module coupling and increased module cohesion. There are however
a couple of major ill effects:
– The common module got bloated.
– New, distinct functional areas were not handled well enough as separate col-
  laborations with proper dependency management.

    Let’s first briefly discuss the module bloat. On the surface of it, there are
few reasons why one shouldn’t put a piece of code or resource in the common
module. It is always present and the developer doesn’t have to think about
possible reuse. As long as the entity in question is put in common, it can always
be reused by some other module. This idea were thought to be a very good one
in a large project, and were even more so thought of when we turned agile. We
believed that an large and agile project should have a lot of supportive means
to enhance reusability. When multiple teams were working on multiple tasks, it
could be difficult to spot a candidate for reusability. But if the code was put
in the very same module, we believed the programmers could hardly overlook
the ”reusabilityness”. The idea were not very successful, and while reuse inside
a specific sub-domain (read: team) sometimes has been possible, cross-domain
(read: cross-team) reuse is virtually non-existent.
    This leads to a bloated common module, lowers cohesion and heightens cou-
pling. In runtime we increase the overall footprint since the common module
is present with all the other modules. At build-time we increase the build time
4        Harald Søvik and Morten Forfang

since the common module is bloated. Finally, each of the non-common modules
become unnecessarily complex since there is much in the common module that
is unwanted and unneeded by the module in question.
    Now, let’s move onto dependency management for new collaborations. Given
some functionality you may choose to put this into one of the four mentioned
modules, but you cannot choose to put it in a module governed by functional
area. For example, if you are writing some web functionality from the farm
animal domain, you can choose to put the code in the web or the common
module, but there is no module that takes care of the farm animal domain.
This leads to modules being characterized by having general purpose and very
domain specific code side-by-side. Clearly this makes the modules lower their
cohesion and calls for sustained developer discipline to avoid increasing intra-
module coupling.
    With the comprehensive, automatic test approach and environment in the
Mats project, we categorize the tests according to test level and domain. Char-
acterizing tests by domain alleviates the problem of discerning which functional
area a particular piece of code belongs to. This doesn’t improve module coupling,
but it makes maintenance and refactoring easier. For example:

    @Test(groups = {"unit", "husdyr"},
      dependsOnMethods = {"validererNyIndivid"},
      expectedExceptions = IllegalArgumentException.class)
      public void kanIkkeMerkesSammeDagenEllerTilbakeITid() {}
(from Mats 4.0b-SNAPSHOT depending on testng version 5.8)
   Here “husdyr” (farm animal) is a category corresponding to a fairly large
functional subdomain.

2.3 Application Layer Separation

From a developer’s technical perspective we let the Mats subsystem (cf. section
2.2) be a single project. The Framesolutions framework and code pertaining to
the Integration Platform is kept apart. Modern IDE’s are getting quite good
at providing instant and global symbol search and dependency tracking1 . This
means that all the previously mentioned modules appear as one seamless whole.
    The FrameSolution framework (cf. section 2.1) provides two quite powerful
mechanisms that makes the Mats subsystem (cf. section 2.2) module boundaries
easier to handle.
    There is the concept of a FrameSolution Manager. Such a manager serves as
a “bridge” over a layer or between modules. The bridge may well cross physical
hosts and application servers. An example invocation from Mats is

    ImportMeldingManager.getInstance().
    getSisteFoerstemottakerAdresser(importoer, foersteMottaker)
1
    The Mats project is predominantly using IDEA IntelliJ version 8
Tech challenges In a Large-Scale Agile Project     5

    This code will look identical in all four Mats subsystem modules. For exam-
ple, if this code is run on the web server, it will remote call a server stub on
the application server. This code is easy for a developer to understand, quite
condensed and not far from the ideal of a POJO method invocation. There is
just this line needed, no annotation or other configuration.
    There is the concept of a soft pointer that transparently deals with persistent
objects that are not “owned”, i.e. that the association between a class A and
a class B is not such that CRUD operations on one is continued on the other.
The soft pointer mechanism is together with a cache, implemented such that no
matter where in a virtual machine an instance is soft referred to, it always points
to the same, single persisted instance. This removes the burden of keeping track
of multiple editions of the same object. It furthermore makes it possible to make
intelligent, automated decisions w.r.t. persistent cascading and lazy loading.
    Generally this particular configuration makes it very easy to create function-
ality covering the entire vertical stack from the GUI at the thick client or on the
web through business logic and down to the persistence or integration service
layer. The code looks surprisingly similar on all application layers. Developers
are overall very happy with this arrangement.
    One would perhaps think that this great freedom results in the inter-layer
APIs to be in too great flux and that the entire subsystem architecture would
over time loose necessary integrity. Due to the rigour of the FrameSolution frame-
work (cf. section 2.1) that enforces quite strong patterns on all layers, this does
in general not happen.
    There are however still some major unintended effects:
– Just looking at the code in the IDE, it is not always clear on what layer
  (client, web server, application server) one is coding. Due to the powerful
  Framesolution abstraction features, the code would work, but not surprisingly,
  it often leads to highly resource demanding code.
– Since the entire Mats subsystem source is editable and available in the IDE,
  the build time on the individual developer host becomes intolerable. The IDE’s
  automatic synchronization features also take an irritating amount of time.
     These unintended effects were partially handled by using a hierarchical mod-
ule structure, dividing all code into one of the Mats subsystem modules, cf.
section 2.2. However, this was not a very effective layering, since a lot of code
still resided in the common module.
     Other mitigating actions were to introduce faster developer hardware (par-
ticularly SSDs) and optimizing the build procedure.
     It remains a problem, and a fundamental trade-off, whether to let the devel-
oper use the powerful abstraction features of the Framesolution framework or
write more module dependent, efficient, lower level code.

2.4 Summary
Overall we’ve found that developers are quite happy with the productivity boost
they get from layer abstraction, having all the source in the IDE and the lack
6      Harald Søvik and Morten Forfang

of bureaucracy when dealing with a small number of ever-present modules. We
clearly could’ve introduced more modules, stronger barriers between them or dif-
ferent delineation principles. This could’ve bought us higher and better cohesion,
and lower intra-module coupling. Chances are, we also would’ve introduced more
overhead, increased inter-module coupling and increased demands on developer
discipline.


3 Testing environments
To support the idea of agile development with domain experts, several testing
environments were accessible for the experts throughout the project. This was
introduced as early as possible so that the experts could get comfortable with
the system and the quirks of using a system that is under development.
    We were working with two branches of the code (most of the time), and
both of these had a range of environments associated with them. First, the
development (”trunk”) branch was the target of all changes bound for the next
major release. Second, the maintenance branch was holding error fixes and small
changes that could be deployed to production very often.
    Each of these branches had three classes of testing environments: Continuous
build [2], nightly build and manual, full-scale build. Thus, there were six different
environments to maintain at all times. We did invest heavily in infrastructure
and build automation for these environments.

3.1 Effect

Because of the wide variety of testing environments, the experts always had
an appropriate environment to carry out their testing needs. At first, it proved
a little difficult to realize how to employ this diversity, and it was frequently
necessary to remind them of in which environment it would be advisable to test a
new feature or a bug fix. After the first major release, most people got acquainted
with the idea, and became very happy with the different environments. See Table
1 for the different applications.


                 Continuous             Nightly                Manual
Development Experimental features New, stable features Production ready features
Maintenance Experimental bug fixes Stable bug fixes          Regression tests
                      Table 1. Different testing environments



    A key feature in maintaining all of these environments, was to have com-
pletely automated build- and deploy processes. It proved incredibly valuable -
both for scheduled (nightly) builds, and whenever a new feature had to be tested
immediately (continuous). To be able to automate the deploy process, it was close
Tech challenges In a Large-Scale Agile Project    7

to necessary gather all build steps under a single command. This was success-
fully implemented with Maven. This helped assure similar builds on multiple
platforms, i.e. different integration environments and development platforms.

3.2 Difficulties

Database structured updates proved to be difficult to automate, and were thus
handled manually. It would have been possible to automate within the applica-
tion, but the customer technicians discouraged such an approach. It was believed
that an automated handling would weaken the exhibited control over database
schema.
    After spending a lot of time reimbursing the necessity of continuous testing,
many of the domain experts got used to the idea of having a environment at
hand all day and night. This notion was also backed by a stable production sys-
tem. Thus, whenever a testing environment failed to deploy correctly at night,
or a programming error lead to a critical failure of the application - the domain
experts would quickly let us know that they were inhibited from doing their work
efficiently. To counter this, the service monitoring tool used in production were
also employed to testing environments - with email and even SMS alerts. The
testing environments were subject to the same uptime requirements as produc-
tion. Of course - there were no really dramatic consequences when a fault lead
to unplanned downtime.

3.3 Conclusion

The biggest con of this approach was the impact on the development platform.
Whereas nightly deployment worked fine, frequent deployments by developers
or the continuous integration engine proved very time consuming. It is thus
our conclusion that a more flexible and dynamic approach should be available
for developers. This was partially implemented with hot code reloading tools,
like Java hotspot and JRebel. These approaches were partially successful: Many
changes were handled and deployed seamlessly, but changes to initialization code
and structurally modeled data had to be handled otherwise.
    Testing environments and infrastructure is at heart of an agile project. The
ability to quickly recognize new or altered features, and give feedback to appro-
priate developers or domain experts, is a stepping stone in enabling agility.


4 Declaratively represented knowledge
A key concept in this project was Business Process Modeling: Separation between
domain knowledge and implementation. From artificial intelligence, cognitive
architecture work and knowledge modeling, the distinction between declarative
and procedural knowledge has long been deemed important [1], [5]. This idea
could be paraphrased as separating what to do from how to do it. It allows the
8      Harald Søvik and Morten Forfang

domain programmers to work decoupled from the technical programmers. The
processes can be modeled and mocked and remodeled, until the ideal workflow
is reached.
    A few vendors offers systems implemented this way, and Computas is per-
haps the leading supplier in Norway. We believed that this technique would fit
quite well in an agile project. It would be possible to change the behaviour of
the system without altering the technical details, and visa versa: Altering the
technical implementation without altering the business processes.

4.1 Effect

This approach presents challenges to the way a customer (and developers) man-
age software. Since the knowledge is decoupled from the program logic, it is
possible to alter the behaviour of a running program.
    Thus, whenever the developers decided to refactor the business logic, or the
domain experts decided to alter the business processes, it would introduce no
overhead for the other party. And this proved to be a correct assumption. Even
though most of the business logic stayed the same once written, the business pro-
cess often changed in subsequent iterations. This made the domain experts rater
self sufficient in many questions, and made it possible to adapt to experiences
in a quick fashion.
    However, we underestimated the need of technical means to handle this dis-
tinction: It should not be necessary to rebuild and redeploy such a system when
developing and testing processes. Nevertheless, developers often did so to ”ensure
correctness and consistency”.

4.2 Difficulties

It might sound trivial, but postponing to figure out how to correctly reload pro-
cess definitions at runtime reduced the development turnaround significantly.
And not to mention the developers dissatisfaction of having to wait for changes
to deploy before testing. Thus, it became clear that the application had to be de-
signed for ”hot knowledge reloading”. This challenge was solved by implementing
a re-initialization feature: Whenever process definitions or other domain defined
data did change, the developer was able to reload the definitions and start using
them right away. This feature is not used in production, but would theoreti-
cally allow process managers to alter a process in the middle of the day without
scheduling downtime and employing technical personnel.
    Also, our proprietary domain modeling language (although BPEL-compliant)
were of course unsupported in any Integrated Development Environment (IDE).
The language itself has a dedicated IDE which is well implemented and very
functional for modeling purposes. But the functionality provided by our code
IDE[9] were oblivious to such data representation, and provided no development
support whatsoever. It hindsight, we should have realized the cost, and imple-
mented a support plugin for our code IDE, so that it would treat changed to
Tech challenges In a Large-Scale Agile Project     9

process code the same was it treated technical code. That is: provide support
for syntax highlighting, autocompletion and code deployment

4.3 Conclusion

Use of proprietary data formats can both be rewarding and expensive. One need
to be aware of the necessary level of support, and accept the cost of maintaining
such a level. Use of declarative knowledge representations is potentially a major
catalysator when dealing with domain experts, but actually implementing the
knowledge requires a high level of expertise. Also in this matter, one should be
very careful with respect to the tools one choose to use for implementation and
assist.


5 Summary
This experience report outlines three difficulties we experienced during this
project. Although the details may appear minor, the impact of improvements
was significant, because of the project size. We believe that it is incredibly im-
portant not to neglect those problems that were manageable in smaller projects,
but may scale fast in large projects, and give the developers an arena where they
can give an early warning of such challenges.
   We would like to emphasize some key issues from this report:
– Abstraction and generalization should been driven by necessity and experi-
  ence, not guesswork and intentions.
– Abstractions is not a substitute for decoupling and formally controlled module
  interfaces.
– Treat your testing environment like a small production environment. Define
  a Service Level Agreement for your domain experts and testers. Automate
  everything.
– Do not underestimate the accumulated overhead caused by small problems
  being ignored over a lengthy period of time.
– Do not underestimate the support that can be provided by modern day de-
  velopment tools.


References
1. Brachman R. and Levesque H: Knowledge Representation and Reasoning, 1st ed.,
   Morgan Kaufmann 2004, ISBN 978-1558609327
2. Fowler M.: Continuous Integration, http://www.martinfowler.com/articles/ contin-
   uousIntegration.html
3. Breivold H.: SOFTWARE ARCHITECTURE EVOLUTION AND SOFTWARE
   EVOLVABILITY, Malardalen University, Sweden, 2009
10     Harald Søvik and Morten Forfang

4. Breivold H. et al.: ANALYZING SOFTWARE EVOLVABILITY, 32nd IEEE Inter-
   national Computer Software and Applications Conference (COMPSAC), Finland
   2008
5. Kendal S. and Creen M.: An Introduction to Knowledge Engineering, 1st edition,
   Springer 2006, ISBN 978-1846284755
6. Lethbridge T and Laganiere R., Object-Oriented Software Engineering, 2nd ed.,
   McGraw-Hill 2005, ISBN 978-0073220345
7. Pressman R: Software Engineering: A Practitioner’s Approach, 5th ed., McGraw-
   Hill, ISBN 978-0073655789
8. Unified Modeling Language, version 2.x, www.uml.org
9. http://www.jetbrains.com/idea/

More Related Content

What's hot

Software architecture-patterns
Software architecture-patternsSoftware architecture-patterns
Software architecture-patternspedro
 
Abb case study 1
Abb case study 1Abb case study 1
Abb case study 1apn18
 
2016 state of industrial internet application development
2016 state of industrial internet application development2016 state of industrial internet application development
2016 state of industrial internet application developmenteraser Juan José Calderón
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patternsMd. Sadhan Sarker
 
MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...
MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...
MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...CrimsonpublishersPRSP
 
Software Engineering
Software Engineering Software Engineering
Software Engineering JayaKamal
 
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...IJCSEA Journal
 
Software Design
Software DesignSoftware Design
Software DesignHa Ninh
 
National%20 online%20examination%20system%20an%20architectural%20perspective
National%20 online%20examination%20system%20an%20architectural%20perspectiveNational%20 online%20examination%20system%20an%20architectural%20perspective
National%20 online%20examination%20system%20an%20architectural%20perspectivekalimullahmohd89
 
Software Architecture: views and viewpoints
Software Architecture: views and viewpointsSoftware Architecture: views and viewpoints
Software Architecture: views and viewpointsHenry Muccini
 
From catalogues to models: transitioning from existing requirements technique...
From catalogues to models: transitioning from existing requirements technique...From catalogues to models: transitioning from existing requirements technique...
From catalogues to models: transitioning from existing requirements technique...James Towers
 
A comparison of component-based software engineering and model-driven develop...
A comparison of component-based software engineering and model-driven develop...A comparison of component-based software engineering and model-driven develop...
A comparison of component-based software engineering and model-driven develop...Nikolay Grozev
 
Unit3 Software engineering UPTU
Unit3 Software engineering UPTUUnit3 Software engineering UPTU
Unit3 Software engineering UPTUMohammad Faizan
 
Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 MuhammadTalha436
 
Migrating existing projects to Rational solutions
Migrating existing projects to Rational solutionsMigrating existing projects to Rational solutions
Migrating existing projects to Rational solutionsEinar Karlsen
 
To Microservice or Not to Microservice?
To Microservice or Not to Microservice?To Microservice or Not to Microservice?
To Microservice or Not to Microservice?Eran Stiller
 

What's hot (18)

Software architecture-patterns
Software architecture-patternsSoftware architecture-patterns
Software architecture-patterns
 
Abb case study 1
Abb case study 1Abb case study 1
Abb case study 1
 
2016 state of industrial internet application development
2016 state of industrial internet application development2016 state of industrial internet application development
2016 state of industrial internet application development
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patterns
 
MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...
MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...
MVC Architecture: A Detailed Insight to the Modern Web Applications Developme...
 
Software Engineering
Software Engineering Software Engineering
Software Engineering
 
Incremental
IncrementalIncremental
Incremental
 
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
 
Software Design
Software DesignSoftware Design
Software Design
 
National%20 online%20examination%20system%20an%20architectural%20perspective
National%20 online%20examination%20system%20an%20architectural%20perspectiveNational%20 online%20examination%20system%20an%20architectural%20perspective
National%20 online%20examination%20system%20an%20architectural%20perspective
 
L12 GRASP
L12 GRASPL12 GRASP
L12 GRASP
 
Software Architecture: views and viewpoints
Software Architecture: views and viewpointsSoftware Architecture: views and viewpoints
Software Architecture: views and viewpoints
 
From catalogues to models: transitioning from existing requirements technique...
From catalogues to models: transitioning from existing requirements technique...From catalogues to models: transitioning from existing requirements technique...
From catalogues to models: transitioning from existing requirements technique...
 
A comparison of component-based software engineering and model-driven develop...
A comparison of component-based software engineering and model-driven develop...A comparison of component-based software engineering and model-driven develop...
A comparison of component-based software engineering and model-driven develop...
 
Unit3 Software engineering UPTU
Unit3 Software engineering UPTUUnit3 Software engineering UPTU
Unit3 Software engineering UPTU
 
Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020
 
Migrating existing projects to Rational solutions
Migrating existing projects to Rational solutionsMigrating existing projects to Rational solutions
Migrating existing projects to Rational solutions
 
To Microservice or Not to Microservice?
To Microservice or Not to Microservice?To Microservice or Not to Microservice?
To Microservice or Not to Microservice?
 

Viewers also liked

Apostolate Of Married People
Apostolate Of Married PeopleApostolate Of Married People
Apostolate Of Married PeopleJohn Gonzalez
 
2009 b
2009 b2009 b
2009 bham97
 
France’s ultimate monarch
France’s ultimate monarchFrance’s ultimate monarch
France’s ultimate monarchham97
 
Skills and methods
Skills and methodsSkills and methods
Skills and methodsham97
 
Modularization, testing and technical debt (in a large agile project)
Modularization, testing and technical debt (in a large agile project)Modularization, testing and technical debt (in a large agile project)
Modularization, testing and technical debt (in a large agile project)Harald Soevik
 
The franks
The franksThe franks
The franksham97
 
ID Presentation
ID PresentationID Presentation
ID Presentationjjagelka
 
2007 ogt
2007 ogt2007 ogt
2007 ogtham97
 
Acquiring new lands
Acquiring new landsAcquiring new lands
Acquiring new landsham97
 
Geography and economics
Geography and economicsGeography and economics
Geography and economicsham97
 
The reformation, part 2
The reformation, part 2The reformation, part 2
The reformation, part 2ham97
 
Introduction to Social Media
Introduction to Social MediaIntroduction to Social Media
Introduction to Social MediaLouise McGregor
 
Citizenship and government
Citizenship and governmentCitizenship and government
Citizenship and governmentham97
 
Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...
Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...
Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...Aviroop Banik
 
Bis Data Information
Bis Data InformationBis Data Information
Bis Data Informationparamalways
 
La reputazione finanziaria dellI' Italia sul Web
La reputazione finanziaria dellI' Italia sul WebLa reputazione finanziaria dellI' Italia sul Web
La reputazione finanziaria dellI' Italia sul WebReputation Manager
 
La Reputazione Online dello spread
La Reputazione Online dello spreadLa Reputazione Online dello spread
La Reputazione Online dello spreadReputation Manager
 
Geography and economics
Geography and economicsGeography and economics
Geography and economicsham97
 

Viewers also liked (20)

Corporate lessons
Corporate lessonsCorporate lessons
Corporate lessons
 
Apostolate Of Married People
Apostolate Of Married PeopleApostolate Of Married People
Apostolate Of Married People
 
2009 b
2009 b2009 b
2009 b
 
France’s ultimate monarch
France’s ultimate monarchFrance’s ultimate monarch
France’s ultimate monarch
 
Skills and methods
Skills and methodsSkills and methods
Skills and methods
 
Modularization, testing and technical debt (in a large agile project)
Modularization, testing and technical debt (in a large agile project)Modularization, testing and technical debt (in a large agile project)
Modularization, testing and technical debt (in a large agile project)
 
The franks
The franksThe franks
The franks
 
ID Presentation
ID PresentationID Presentation
ID Presentation
 
2007 ogt
2007 ogt2007 ogt
2007 ogt
 
Giroidea - Our method
Giroidea - Our methodGiroidea - Our method
Giroidea - Our method
 
Acquiring new lands
Acquiring new landsAcquiring new lands
Acquiring new lands
 
Geography and economics
Geography and economicsGeography and economics
Geography and economics
 
The reformation, part 2
The reformation, part 2The reformation, part 2
The reformation, part 2
 
Introduction to Social Media
Introduction to Social MediaIntroduction to Social Media
Introduction to Social Media
 
Citizenship and government
Citizenship and governmentCitizenship and government
Citizenship and government
 
Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...
Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...
Knowledge transfer race-by Aviroop Banik,Rizvi Institute of Management studie...
 
Bis Data Information
Bis Data InformationBis Data Information
Bis Data Information
 
La reputazione finanziaria dellI' Italia sul Web
La reputazione finanziaria dellI' Italia sul WebLa reputazione finanziaria dellI' Italia sul Web
La reputazione finanziaria dellI' Italia sul Web
 
La Reputazione Online dello spread
La Reputazione Online dello spreadLa Reputazione Online dello spread
La Reputazione Online dello spread
 
Geography and economics
Geography and economicsGeography and economics
Geography and economics
 

Similar to Tech challenges in a large scale agile project

Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10Kuwait10
 
IT 8003 Cloud ComputingFor this activi.docx
IT 8003 Cloud ComputingFor this activi.docxIT 8003 Cloud ComputingFor this activi.docx
IT 8003 Cloud ComputingFor this activi.docxvrickens
 
Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...
Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...
Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...Madjid KETFI
 
Software arquitectura patron diseño
Software arquitectura patron diseñoSoftware arquitectura patron diseño
Software arquitectura patron diseñopedro
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"GlobalLogic Ukraine
 
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design PatternsNina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design Patternsiasaglobal
 
Dynamic Component Deployment and (Re) Configuration Using a Unified Framework
Dynamic Component Deployment and (Re) Configuration Using a Unified FrameworkDynamic Component Deployment and (Re) Configuration Using a Unified Framework
Dynamic Component Deployment and (Re) Configuration Using a Unified FrameworkMadjid KETFI
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability BpJ2EE Performance And Scalability Bp
J2EE Performance And Scalability BpChris Adkin
 
3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...
3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...
3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...Crystal Thomas
 
Service Oriented & Model Driven Architectures
Service Oriented & Model Driven ArchitecturesService Oriented & Model Driven Architectures
Service Oriented & Model Driven ArchitecturesPankaj Saharan
 
Microservice final final
Microservice final finalMicroservice final final
Microservice final finalgaurav shukla
 
UNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvf
UNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvfUNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvf
UNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvfputtipavan23022023
 
Discussion Post 1A software process model is a streamlined port.docx
Discussion Post 1A software process model is a streamlined port.docxDiscussion Post 1A software process model is a streamlined port.docx
Discussion Post 1A software process model is a streamlined port.docxmadlynplamondon
 
Final Total Preliminary Report
Final Total Preliminary ReportFinal Total Preliminary Report
Final Total Preliminary ReportMrugen Deshmukh
 
SADP PPTs of all modules - Shanthi D.L.pdf
SADP PPTs of all modules - Shanthi D.L.pdfSADP PPTs of all modules - Shanthi D.L.pdf
SADP PPTs of all modules - Shanthi D.L.pdfB.T.L.I.T
 

Similar to Tech challenges in a large scale agile project (20)

Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10
 
Design patterns
Design patternsDesign patterns
Design patterns
 
IT 8003 Cloud ComputingFor this activi.docx
IT 8003 Cloud ComputingFor this activi.docxIT 8003 Cloud ComputingFor this activi.docx
IT 8003 Cloud ComputingFor this activi.docx
 
Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...
Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...
Model-driven Framework for Dynamic Deployment and Reconfiguration of Componen...
 
Software arquitectura patron diseño
Software arquitectura patron diseñoSoftware arquitectura patron diseño
Software arquitectura patron diseño
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
 
10.1.1.107.2618
10.1.1.107.261810.1.1.107.2618
10.1.1.107.2618
 
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design PatternsNina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
 
Dynamic Component Deployment and (Re) Configuration Using a Unified Framework
Dynamic Component Deployment and (Re) Configuration Using a Unified FrameworkDynamic Component Deployment and (Re) Configuration Using a Unified Framework
Dynamic Component Deployment and (Re) Configuration Using a Unified Framework
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability BpJ2EE Performance And Scalability Bp
J2EE Performance And Scalability Bp
 
3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...
3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...
3784_Streamlining_the_development_process_with_feature_flighting_and_Azure_cl...
 
Design pattern
Design patternDesign pattern
Design pattern
 
Service Oriented & Model Driven Architectures
Service Oriented & Model Driven ArchitecturesService Oriented & Model Driven Architectures
Service Oriented & Model Driven Architectures
 
Microservice final final
Microservice final finalMicroservice final final
Microservice final final
 
Software Engineering CSE/IT.pptx
 Software Engineering CSE/IT.pptx Software Engineering CSE/IT.pptx
Software Engineering CSE/IT.pptx
 
UNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvf
UNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvfUNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvf
UNIT3 PART2.pptx dhfdifhdsfvgudf dhfbdhbffdvf
 
Discussion Post 1A software process model is a streamlined port.docx
Discussion Post 1A software process model is a streamlined port.docxDiscussion Post 1A software process model is a streamlined port.docx
Discussion Post 1A software process model is a streamlined port.docx
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Final Total Preliminary Report
Final Total Preliminary ReportFinal Total Preliminary Report
Final Total Preliminary Report
 
SADP PPTs of all modules - Shanthi D.L.pdf
SADP PPTs of all modules - Shanthi D.L.pdfSADP PPTs of all modules - Shanthi D.L.pdf
SADP PPTs of all modules - Shanthi D.L.pdf
 

Recently uploaded

Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 

Recently uploaded (20)

Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 

Tech challenges in a large scale agile project

  • 1. Tech challenges In a Large-Scale Agile Project Harald Søvik and Morten Forfang Computas AS, Lysaker Torg 45, 1327 Lysaker, Norway {hso,mfo}@computas.com, http://www.computas.com Abstract. A five year, 25 man java project effort, that started with a waterfall-like methodology and that adopted Scrum after less than a year, has been concluded. We present three key technical challenges, briefly analyze their consequences and discuss the solutions we adopted. Firstly, we discuss how we modularized our architecture, module delin- eation principles, coupling and the trade-offs of abstraction. Then we discuss testing environments, their automation and relation to branches and the effect on customer involvement and feedback. Finally we discuss the benefits and disadvantages of representing domain knowledge declar- atively. For all three challenges we discuss how the project’s agility was affected. Key words: java, scrum, agile, modularization, coupling, technical chal- lenge, module bloat, dependency, applicaiton layer, pojo, ide, testing, branch, continuous integration, deploy, maven, database updates, do- main expert, footprint, declarative knowledge, business logic, domain knowledge, process 1 Introduction A 5 year long Java and agile-project has recently come to a conclusion. It has been conducted between Computas (a Norwegian consultancy firm) and a major Norwegian governmental authority. As a rather large project (manning 20-30 developers throughout the project), it has faced a lot of challenges, but overall the project is recognized as a major success. This experience reports focuses on three major technical challenges that arose during the project. We believe those challenges partially can be attributed to the SCRUM methodology. For each of them, we try to identify the consequence and the cause, and then follow up with any solutions we tried, and an analysis of whether the problem was successfully solved or not. 1.1 A brief history The project started out using a crossover variant of the waterfall methodology and long-term iterations, but turned towards agile after 8 months of develop- ment. The customer and domain experts needed to see, touch and feel the system
  • 2. 2 Harald Søvik and Morten Forfang being developed. A lot of them were previously not familiar with software de- velopment. Being able to see results of their decisions quickly made them more confident and eager. To support parallel development, the project was organized into 4 different teams, whereas 3 were committing to the development branch, and one team working maintenance on the production branch. The teams were ”self sufficient” in technical expertise - meaning that multiple programmers could be working simultaneously on the same module or layer of the system. The teams were also assigned a pool of domain experts suitable for the tasks they had chosen for the next iteration. The project were divided into 4 overall domain-centric periods, each support- ing a specific business target. All of these focused on similar goals: – Enable self-service or more automated customer interaction – Reduce the number of internal databases and managed systems – Increase data quality – Unify business processes to ensure quality 2 Coupling and modularization The dependency topology of a system and it’s relation to evolvability is a cur- rent, active research field ([3]). It is predominantly argued that modularization, low coupling and high cohesion are characteristics that enhance salient non- functional characteristics of a system, like analyzability, integrity, changeability and testability ([4], [7]). In this section, we explore some of the trade-offs we have found between modularization and various forms of efficiency. We use the terms subsystem, cohesion, coupling and framework as defined by [6] and component and collaboration as defined by [8]. 2.1 Subsystems and frameworks The project consists of a series of core subsystems and legacy systems. In this ar- ticle we focus on the Mats subsystem. This subsystem depends crucially on the Framesolutions framework. The Framesolutions framework is a fairly compre- hensive set of customizable, proprietary components that many of our projects use. It at the same time provides core functionality on all application layers and it provides a fairly rigid set of programming patterns. The framework is centrally maintained separately from the project source code. 2.2 The Mats subsystem For the purposes of this article, the The Mats subsystem features four build-time modules; the application server, the web server, the client and a common module. The run-time and compile-time dependencies between these are illustrated in figure˜1.
  • 3. Tech challenges In a Large-Scale Agile Project 3 Fig. 1. The build time and runtime dependencies between important Mats subsystem modules. Technologically, the two first are realized as Java enterprise archives running on JBoss 4.2.3 servers, the client is a Java application and the common module is a jar file included in all the other modules. Overall, this particular way of modularizing the Mats subsystem strikes a good balance between having increased complexity through many modules, de- creased intra-module coupling and increased module cohesion. There are however a couple of major ill effects: – The common module got bloated. – New, distinct functional areas were not handled well enough as separate col- laborations with proper dependency management. Let’s first briefly discuss the module bloat. On the surface of it, there are few reasons why one shouldn’t put a piece of code or resource in the common module. It is always present and the developer doesn’t have to think about possible reuse. As long as the entity in question is put in common, it can always be reused by some other module. This idea were thought to be a very good one in a large project, and were even more so thought of when we turned agile. We believed that an large and agile project should have a lot of supportive means to enhance reusability. When multiple teams were working on multiple tasks, it could be difficult to spot a candidate for reusability. But if the code was put in the very same module, we believed the programmers could hardly overlook the ”reusabilityness”. The idea were not very successful, and while reuse inside a specific sub-domain (read: team) sometimes has been possible, cross-domain (read: cross-team) reuse is virtually non-existent. This leads to a bloated common module, lowers cohesion and heightens cou- pling. In runtime we increase the overall footprint since the common module is present with all the other modules. At build-time we increase the build time
  • 4. 4 Harald Søvik and Morten Forfang since the common module is bloated. Finally, each of the non-common modules become unnecessarily complex since there is much in the common module that is unwanted and unneeded by the module in question. Now, let’s move onto dependency management for new collaborations. Given some functionality you may choose to put this into one of the four mentioned modules, but you cannot choose to put it in a module governed by functional area. For example, if you are writing some web functionality from the farm animal domain, you can choose to put the code in the web or the common module, but there is no module that takes care of the farm animal domain. This leads to modules being characterized by having general purpose and very domain specific code side-by-side. Clearly this makes the modules lower their cohesion and calls for sustained developer discipline to avoid increasing intra- module coupling. With the comprehensive, automatic test approach and environment in the Mats project, we categorize the tests according to test level and domain. Char- acterizing tests by domain alleviates the problem of discerning which functional area a particular piece of code belongs to. This doesn’t improve module coupling, but it makes maintenance and refactoring easier. For example: @Test(groups = {"unit", "husdyr"}, dependsOnMethods = {"validererNyIndivid"}, expectedExceptions = IllegalArgumentException.class) public void kanIkkeMerkesSammeDagenEllerTilbakeITid() {} (from Mats 4.0b-SNAPSHOT depending on testng version 5.8) Here “husdyr” (farm animal) is a category corresponding to a fairly large functional subdomain. 2.3 Application Layer Separation From a developer’s technical perspective we let the Mats subsystem (cf. section 2.2) be a single project. The Framesolutions framework and code pertaining to the Integration Platform is kept apart. Modern IDE’s are getting quite good at providing instant and global symbol search and dependency tracking1 . This means that all the previously mentioned modules appear as one seamless whole. The FrameSolution framework (cf. section 2.1) provides two quite powerful mechanisms that makes the Mats subsystem (cf. section 2.2) module boundaries easier to handle. There is the concept of a FrameSolution Manager. Such a manager serves as a “bridge” over a layer or between modules. The bridge may well cross physical hosts and application servers. An example invocation from Mats is ImportMeldingManager.getInstance(). getSisteFoerstemottakerAdresser(importoer, foersteMottaker) 1 The Mats project is predominantly using IDEA IntelliJ version 8
  • 5. Tech challenges In a Large-Scale Agile Project 5 This code will look identical in all four Mats subsystem modules. For exam- ple, if this code is run on the web server, it will remote call a server stub on the application server. This code is easy for a developer to understand, quite condensed and not far from the ideal of a POJO method invocation. There is just this line needed, no annotation or other configuration. There is the concept of a soft pointer that transparently deals with persistent objects that are not “owned”, i.e. that the association between a class A and a class B is not such that CRUD operations on one is continued on the other. The soft pointer mechanism is together with a cache, implemented such that no matter where in a virtual machine an instance is soft referred to, it always points to the same, single persisted instance. This removes the burden of keeping track of multiple editions of the same object. It furthermore makes it possible to make intelligent, automated decisions w.r.t. persistent cascading and lazy loading. Generally this particular configuration makes it very easy to create function- ality covering the entire vertical stack from the GUI at the thick client or on the web through business logic and down to the persistence or integration service layer. The code looks surprisingly similar on all application layers. Developers are overall very happy with this arrangement. One would perhaps think that this great freedom results in the inter-layer APIs to be in too great flux and that the entire subsystem architecture would over time loose necessary integrity. Due to the rigour of the FrameSolution frame- work (cf. section 2.1) that enforces quite strong patterns on all layers, this does in general not happen. There are however still some major unintended effects: – Just looking at the code in the IDE, it is not always clear on what layer (client, web server, application server) one is coding. Due to the powerful Framesolution abstraction features, the code would work, but not surprisingly, it often leads to highly resource demanding code. – Since the entire Mats subsystem source is editable and available in the IDE, the build time on the individual developer host becomes intolerable. The IDE’s automatic synchronization features also take an irritating amount of time. These unintended effects were partially handled by using a hierarchical mod- ule structure, dividing all code into one of the Mats subsystem modules, cf. section 2.2. However, this was not a very effective layering, since a lot of code still resided in the common module. Other mitigating actions were to introduce faster developer hardware (par- ticularly SSDs) and optimizing the build procedure. It remains a problem, and a fundamental trade-off, whether to let the devel- oper use the powerful abstraction features of the Framesolution framework or write more module dependent, efficient, lower level code. 2.4 Summary Overall we’ve found that developers are quite happy with the productivity boost they get from layer abstraction, having all the source in the IDE and the lack
  • 6. 6 Harald Søvik and Morten Forfang of bureaucracy when dealing with a small number of ever-present modules. We clearly could’ve introduced more modules, stronger barriers between them or dif- ferent delineation principles. This could’ve bought us higher and better cohesion, and lower intra-module coupling. Chances are, we also would’ve introduced more overhead, increased inter-module coupling and increased demands on developer discipline. 3 Testing environments To support the idea of agile development with domain experts, several testing environments were accessible for the experts throughout the project. This was introduced as early as possible so that the experts could get comfortable with the system and the quirks of using a system that is under development. We were working with two branches of the code (most of the time), and both of these had a range of environments associated with them. First, the development (”trunk”) branch was the target of all changes bound for the next major release. Second, the maintenance branch was holding error fixes and small changes that could be deployed to production very often. Each of these branches had three classes of testing environments: Continuous build [2], nightly build and manual, full-scale build. Thus, there were six different environments to maintain at all times. We did invest heavily in infrastructure and build automation for these environments. 3.1 Effect Because of the wide variety of testing environments, the experts always had an appropriate environment to carry out their testing needs. At first, it proved a little difficult to realize how to employ this diversity, and it was frequently necessary to remind them of in which environment it would be advisable to test a new feature or a bug fix. After the first major release, most people got acquainted with the idea, and became very happy with the different environments. See Table 1 for the different applications. Continuous Nightly Manual Development Experimental features New, stable features Production ready features Maintenance Experimental bug fixes Stable bug fixes Regression tests Table 1. Different testing environments A key feature in maintaining all of these environments, was to have com- pletely automated build- and deploy processes. It proved incredibly valuable - both for scheduled (nightly) builds, and whenever a new feature had to be tested immediately (continuous). To be able to automate the deploy process, it was close
  • 7. Tech challenges In a Large-Scale Agile Project 7 to necessary gather all build steps under a single command. This was success- fully implemented with Maven. This helped assure similar builds on multiple platforms, i.e. different integration environments and development platforms. 3.2 Difficulties Database structured updates proved to be difficult to automate, and were thus handled manually. It would have been possible to automate within the applica- tion, but the customer technicians discouraged such an approach. It was believed that an automated handling would weaken the exhibited control over database schema. After spending a lot of time reimbursing the necessity of continuous testing, many of the domain experts got used to the idea of having a environment at hand all day and night. This notion was also backed by a stable production sys- tem. Thus, whenever a testing environment failed to deploy correctly at night, or a programming error lead to a critical failure of the application - the domain experts would quickly let us know that they were inhibited from doing their work efficiently. To counter this, the service monitoring tool used in production were also employed to testing environments - with email and even SMS alerts. The testing environments were subject to the same uptime requirements as produc- tion. Of course - there were no really dramatic consequences when a fault lead to unplanned downtime. 3.3 Conclusion The biggest con of this approach was the impact on the development platform. Whereas nightly deployment worked fine, frequent deployments by developers or the continuous integration engine proved very time consuming. It is thus our conclusion that a more flexible and dynamic approach should be available for developers. This was partially implemented with hot code reloading tools, like Java hotspot and JRebel. These approaches were partially successful: Many changes were handled and deployed seamlessly, but changes to initialization code and structurally modeled data had to be handled otherwise. Testing environments and infrastructure is at heart of an agile project. The ability to quickly recognize new or altered features, and give feedback to appro- priate developers or domain experts, is a stepping stone in enabling agility. 4 Declaratively represented knowledge A key concept in this project was Business Process Modeling: Separation between domain knowledge and implementation. From artificial intelligence, cognitive architecture work and knowledge modeling, the distinction between declarative and procedural knowledge has long been deemed important [1], [5]. This idea could be paraphrased as separating what to do from how to do it. It allows the
  • 8. 8 Harald Søvik and Morten Forfang domain programmers to work decoupled from the technical programmers. The processes can be modeled and mocked and remodeled, until the ideal workflow is reached. A few vendors offers systems implemented this way, and Computas is per- haps the leading supplier in Norway. We believed that this technique would fit quite well in an agile project. It would be possible to change the behaviour of the system without altering the technical details, and visa versa: Altering the technical implementation without altering the business processes. 4.1 Effect This approach presents challenges to the way a customer (and developers) man- age software. Since the knowledge is decoupled from the program logic, it is possible to alter the behaviour of a running program. Thus, whenever the developers decided to refactor the business logic, or the domain experts decided to alter the business processes, it would introduce no overhead for the other party. And this proved to be a correct assumption. Even though most of the business logic stayed the same once written, the business pro- cess often changed in subsequent iterations. This made the domain experts rater self sufficient in many questions, and made it possible to adapt to experiences in a quick fashion. However, we underestimated the need of technical means to handle this dis- tinction: It should not be necessary to rebuild and redeploy such a system when developing and testing processes. Nevertheless, developers often did so to ”ensure correctness and consistency”. 4.2 Difficulties It might sound trivial, but postponing to figure out how to correctly reload pro- cess definitions at runtime reduced the development turnaround significantly. And not to mention the developers dissatisfaction of having to wait for changes to deploy before testing. Thus, it became clear that the application had to be de- signed for ”hot knowledge reloading”. This challenge was solved by implementing a re-initialization feature: Whenever process definitions or other domain defined data did change, the developer was able to reload the definitions and start using them right away. This feature is not used in production, but would theoreti- cally allow process managers to alter a process in the middle of the day without scheduling downtime and employing technical personnel. Also, our proprietary domain modeling language (although BPEL-compliant) were of course unsupported in any Integrated Development Environment (IDE). The language itself has a dedicated IDE which is well implemented and very functional for modeling purposes. But the functionality provided by our code IDE[9] were oblivious to such data representation, and provided no development support whatsoever. It hindsight, we should have realized the cost, and imple- mented a support plugin for our code IDE, so that it would treat changed to
  • 9. Tech challenges In a Large-Scale Agile Project 9 process code the same was it treated technical code. That is: provide support for syntax highlighting, autocompletion and code deployment 4.3 Conclusion Use of proprietary data formats can both be rewarding and expensive. One need to be aware of the necessary level of support, and accept the cost of maintaining such a level. Use of declarative knowledge representations is potentially a major catalysator when dealing with domain experts, but actually implementing the knowledge requires a high level of expertise. Also in this matter, one should be very careful with respect to the tools one choose to use for implementation and assist. 5 Summary This experience report outlines three difficulties we experienced during this project. Although the details may appear minor, the impact of improvements was significant, because of the project size. We believe that it is incredibly im- portant not to neglect those problems that were manageable in smaller projects, but may scale fast in large projects, and give the developers an arena where they can give an early warning of such challenges. We would like to emphasize some key issues from this report: – Abstraction and generalization should been driven by necessity and experi- ence, not guesswork and intentions. – Abstractions is not a substitute for decoupling and formally controlled module interfaces. – Treat your testing environment like a small production environment. Define a Service Level Agreement for your domain experts and testers. Automate everything. – Do not underestimate the accumulated overhead caused by small problems being ignored over a lengthy period of time. – Do not underestimate the support that can be provided by modern day de- velopment tools. References 1. Brachman R. and Levesque H: Knowledge Representation and Reasoning, 1st ed., Morgan Kaufmann 2004, ISBN 978-1558609327 2. Fowler M.: Continuous Integration, http://www.martinfowler.com/articles/ contin- uousIntegration.html 3. Breivold H.: SOFTWARE ARCHITECTURE EVOLUTION AND SOFTWARE EVOLVABILITY, Malardalen University, Sweden, 2009
  • 10. 10 Harald Søvik and Morten Forfang 4. Breivold H. et al.: ANALYZING SOFTWARE EVOLVABILITY, 32nd IEEE Inter- national Computer Software and Applications Conference (COMPSAC), Finland 2008 5. Kendal S. and Creen M.: An Introduction to Knowledge Engineering, 1st edition, Springer 2006, ISBN 978-1846284755 6. Lethbridge T and Laganiere R., Object-Oriented Software Engineering, 2nd ed., McGraw-Hill 2005, ISBN 978-0073220345 7. Pressman R: Software Engineering: A Practitioner’s Approach, 5th ed., McGraw- Hill, ISBN 978-0073655789 8. Unified Modeling Language, version 2.x, www.uml.org 9. http://www.jetbrains.com/idea/