Habitual thinking - Patterns for IT disappointment and failure


Published on

Presentation in 3 parts that uncovers the problems with conventional thinking in IT solutions and how to break the habit and thereby creating the foundation IT-driven growth. Finally, we share lessons learned from implementation of our suggestions in connection with the Danish Electronic Land Registration project.

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • IntroFocus on thatyoucanchangeyour approach 3 parts in the presentation:1: Somethingabouthabitualthinking and whywe must thinkdifferently.Extract of whatweusuallymeet in real life.2: Whatwecan do about it. Manythingswhichweaddress. Focus on 2 technicalareas.Low hangingfruit3: How wesolved the tasks in ETL
  • Horror Scenario:Earth goes under, the Mayan calendarendsMost important: economiccrisis and it does not seem to getbetter
  • There must thinkdifferentlyWeareforced to do somethingdifferentthanweusually doFinancially problem is not only small companies, including largeMoney is no longer hanging on trees
  • Spørgsmål som alle IT viksomheder bør stille sig selv og have svar påHvor mange kan ærligt svare ærligt til alt ovenstående?Kan også bruges som eksempel på dårlig (ledende) spørge teknik
  • From Men in Black - erasesyourmemory X number of hours / days back
  • Manyprojects start from scratch every time. Reinvent the wheel in everyprojectThe problem with a projectorganizationFailure to follow up
  • Examples from reallifeBusiness wishes have a tendency to beconvertedintotechnicalrequirementsWeforget the real needs and spendtoomuch time on techniquepettiness
  • For many: Technologies = SolutionsPeople oftenthink of technologiesbeforethey have made clear what problem to solveTechnology becomes the same as the solution: The solution must be service-oriented so weneed a bus service and it must be WebSphereToo manytechnologiesrequiretoomany specialistsToo manytechnologiesmeansgreaterprojectrisk
  • Explanation of whatcausescanbeGartner Group is helping to do things for silverbullets. Good to learn from others, but oneshould not turn to it just because the gardenersays it.Gartner says Service Bus, so everyone must have it.The problem is that management chooses the technical solutions, not the architects or developers
  • People are still trying to find the toolthatcan handle everythingOne sizefits all
  • This meansthatwemake the worldtoocomplexIt costs and contributes to everythingtakingtoo long
  • There is nothing new happeningPeople do the same every timePeople dare not pursue new ways of doingthingsPeople dare not tryanything newDo the same eachyear, although all the participants aredead
  • Public sector view of the world: “We need more money”7 habbits of highly effective people: The 7.habbit“Sharpen the saw”. “We’re so busy driving that we haven’t got time to stop and fill up the car with gasoline”
  • You have to be open for new ideas
  • But whatif the real answer is wirelessnetworking?Thatansweryouwillonlygetwhenyou have an expert at your fingertipsOutsourcing is the same as cutting the engineer from the smith and thenyouloose out on all the goodideasWhat do I need?The requirementsshouldspecify the need, not the solution
  • Ways to ask a questionMany times the answer is implicit in the questionHere youcanonlyanswerwrong. No matterifyousayyes or no, youare a violent man.Remember to relate to the questions on the previous
  • Detervigtigt at heletidenudfordre sig selvSørge for at stille de rigtigespørgsmål
  • People onlychangestheirhabitualthinkingifthey’removed out of theircomfort zone and shaken upWhatproject doyouremember? The oneswhereyou have succeedagainst all oddsAs seen in manycompanies: Whyareyouallowed to bypassstrictprocesses whensomething is veryimportant , but you’re never allowedwhenyou have time and thingsaren’t as important
  • We forget to look at what it is were doingWe’re good at asking What and HowBut we forget to ask WHY
  • Low pricesreducesfocus on eliminatingwasteWhichtypicallyresults in a more messy system Whichagainresults in more expensivemaintenance
  • This is commonknowledge
  • Manychangesrequire major externalinfluences - desperation is often a muchgreatermotivatorthan inspirationWith everythingthat is happening nowthenweshouldbeready to do thingsdifferently
  • In the first part weheardabout the challenges.Therearemany solutions and wecan not go intothem all.Wewilltake a look at 2 solutions thatwebelievecancreate fast results with leasteffort+ wecankeep the changeswithinIT'sownenvironment (involvement of the business is minimal)
  • SCRUM and LEAN as theyareappliedtoday cover onlysoftvaluesThe worstthey did for LEAN was to give it a name – becausethen management expect it to come in a boxthatyoucaninstallWith XP and SCRUM/LEAN there’s still a tendency to have a productview of the worldImplementing agile/leantakes longer and it’s a processthatinvolves the entirecompany
  • Webuild on unstableground – due to a weak and fragmented system landscapeHow many put a lifetime up for it whencommissioning a new system?Knowledge transfer/ accumulation of experience, they all die together with the project
  • Alignment = Business AlignmentEfficacy: IT developmentefficacy
  • The layersaretechnically de-coupled but not in terms of data or temporal.Eachlayer has a technical integration layerthatmakes it harder to understand the correlationsDebugging is made more difficultSingle point of failureLatency is high and scalability is low
  • En samlet model for virksomheden er ikke længere muligt.Verden er blevet langt mere kompleks end tidligereI dag skal man indsamle information fra langt flere datakilder end tidligereEn samlet model betyder langt større sårbarhed
  • Alsoknown as a canonical model in SOA terms
  • It is not possible to create a context-free modelDoing so youwillonlygetsomethingthatdoes not work in anycontextToo manyunintended side effectsExample. Life insurance with lifecoverage. My companyassuresme, mywife and childrenarebeneficiaries. Who is the customer? It depends on what point in time I look at it.
  • Use Cases: There is a difference between the static and the dynamic part of a systemThe dynamic part contributes to provides an precisecontext
  • Loose coupling - data and temporalWeb shop can run without the otherbeing online
  • Keeptrack of where the different system in your landscape isIn the "Invest and differentiate" Time to market is important - makedemands on IT efficacy
  • Cleanup of the System Landscape cantake time, herearesomeapproachesthatarecheap and easy ...
  • ETL = Electronic LandRegistration (Elektronisk TingLysning in Danish)
  • Therearemanysimilarities with the previousarchitecturewetalkedaboutwas not a goodidea ...
  • Well-meaningarchitects, data modelers, analystsrepresent the initial data / domain model afterwhich it willbehanded over to developers whoimplement it by hand.After a fewiterations the codedoesn’t in anywayrepresent the original models. The original model becomes obsolete and willbethrown out. Ie. Documentation is nowonly in code.Analysts and business experts do not understand the code and canthus not beincluded in a develpmentpartnership in a goodway
  • Denmark has a long tradition of workingefficiently and automate tedious and repetitivetasksWe have a long tradition of wanting to work for commongoodWeshould do the same in IT tooThe positive side effect of highwages and highqualityIf you send it willbe, it is difficult to automate afterwardsThe offshoring partner gets all the possibilities of becoming more efficient and earnmoneyWearecheatingourselves of the benefitAgain, the goodideasemergewhen the smithwork with the engineer
  • Everythingrevolvesaround the model, in an agile (and iterative setup) that is run throughTigerTeamsTRIMM (code generator) and therebyproducing bi-products such as Java code with Hibernate / JPA annotations, WSDL (was not used at ETL, but is an option youcanselect), SQL and automated test code (JUnit-based) that tests the codethat has beenproduced and thusensuresthat the database codeworkswithout data loss.
  • Note:Wasn’tused at ETL
  • Note: Wasn’tused at ETL
  • Severalweeks of programmingcan save a fewdays of forethoughtWith the short deadline on ETL, a laterfreeze date ensured a muchbettertechnical and business solution
  • What is important in thisprocess is to ensure a stable interface between the generatedschematiccode and the interestingcodewhich in one form or otherwiseuse the schematiccode.This is typically not difficult.
  • Higherlevel of abstraction:Closer to the business worldviewLesstechnicalfocus and more focus on solving business challengesTechnical decisions canbepostponedThe model decorated with information for generatorsOne candescribethat "here must behistory" and thenlater on decidehowPoint of No Return canbepostponedChanges do not costextrathough the code base getsbiggerDocumentation is alwaysupdate to dateThe model is keptfresh, since all code is generatedbased on itHigherQuality and UniformityEverythingfollows the same patternsCode standards arekeptEithereverythingworks, or everything has the same mistakes/errorsRefactoring is both faster and cheaperGeneral changescostlessbecause it canberegenerated, ie. Doesn’trequirerewritingEven basicchangescanbe made fairlylateIt does not costmuch to makemistakes.Youcantryseveralthings at onceYouget abetter systemShort developmentcycleYoucan sit with your business and change the model in the morning and have somethingrunning the dayafter, so theycan test it sooner
  • Final points:Wewant to be Lean and AgileXP, SCRUM, etc. are the softer points but takes longerA simplertechnicalarchitecturecanhelp to makeyou Agile and Lean, but canalso stand on itsownAutomation canbeimplementedbottom up. And is againbetter on a simple technical platformEverythingcontributes to makingus more efficientPostulate: Wecan NOT be more effectivethanourtechnical platform and the degree of automation allowsus to use
  • Habitual thinking - Patterns for IT disappointment and failure

    1. 1. Habitual thinking Patterns for IT disappointment and failureHenrik Wivel & Jeppe Cramon
    2. 2. Corporate growth slowed dueto lack of funding Berlingske Finans6 out of 10 public projectsgoing over time and budget Version2
    3. 3. How well is your company doing?• Are your IT projects delivered on time, on budget and with the right functionality?• Are your IT systems running smoothly and stable?• Does your system landscape contain more applications performing the same or similar tasks?• Do you Outsource / Offshore the right tasks (or are you doing the right tasks in-house)?
    4. 4. How well is your company doing?• Are your IT projects aligned with business needs?• Is the business actively involved in IT projects and investments?• Do you balance the entire organizations needs with the individual business needs in terms of architecture and infrastructure?
    5. 5. Does this seem familiar?
    6. 6. Each new project starts from scratch
    7. 7. PRODUCT VIEWWe need a combined Implement Siebel CRM in thecustomer view Call centerWe need to better Buy and install HP Qualitymanage our CenterrequirementsWe need a Service Build a solution using WebOrienteret Architecture services in Oracle Service Bus / SeeBeyond / ...
    8. 8. Git REST BlackBerry Oracle Service busDocumentum Ruby on Rails Workflow system WebLogic Cloud SharePoint JAVA MS SQL Server F# Oracle DB Layered Architecture SOA SubVersion Dart BizTalk WebSphere VB.NET C# Scala iOS .NET NoSQL Android Web Services Team GroovyPolicy Manager Foundation BPMN Portal Server Hg Flash XMLJavaScript Requirement Management tools Spring
    9. 9. Typical management thinking• We choose the tools and architecture that Gartner recommends• More resources on a project = The sooner we will be finished• 100 foreign developers are better than 10 local, even if the total price is the same
    10. 10. The Silver Bullet
    11. 11. All this leads to • High complexity and a fragmented system landscape • Strong need for product specialists who can not always participate across projects • Danger of hiring habitual thinkers rather than technical domain experts This creates the need for many resourceson projects and therefore result in high costs
    12. 12. Same procedure as last year?Same procedure as every year!!!
    13. 13. Because!!!• “We haven’t got time to look at new technologies”• “It requires more money and time”• “We have tried it before and failed”• “We realize we have challenges”• ”We _______________________________” (Insert an excuse)
    14. 14. Open for new ideas? Poul, you idiot, whats that!?You should only bring things we can eat!
    15. 15. If it takes 1 man 10 days to dig a telephone cable , how many men do I need if I want it done in 2 days? 5 men in Denmark 10 men in Indien. Half time and even half priceHow about using: Wireless network?
    16. 16. Do you still beat up your wife?
    17. 17. This is how we often ask• Where can I get 200 developers for my project?• Where can I get them cheapest?• How do I scale my technical platform to 200 developers?• How do I manage large teams over a long project cycle?
    18. 18. This is how we should ask• Why do I need 200 developers?• How would I do if I "only" had: – 30 developers – 3 months and not 3 years for the project• Do I need distributed teams?
    19. 19. What?How?Why?
    20. 20. Is the solution Offshoring? • 10 techinical domain experts in Denmark at $150 an hour = $1500 an hour • 100 developer in China/India at $30 an hour = $3000 an hourIt’s a bit like bying app on the Apple AppStore They only cost $1
    21. 21. Project Economy Productivity Productivity Administrative overhead Administrative overhead10 technical domain experts 100 developers
    22. 22. InspirationDesperation
    23. 23. SolutionsPattern for IT disappointment and failures
    24. 24. Here are the solutions! SCRUM XP LEAN Agile OutsourcingWhat was it exactly we were trying to solve? Getting closer to the business
    25. 25. Status Quo
    26. 26. We need a strong foundation for development 11% 7% Highly aligned ”Alignment Trap” ”IT enabled Growth” +13 +35 Source: Bain Analysis -14 -6Alignment 74% 8% ”Maintenance Zone” ”Well-Oiled IT” +0 +11 Less aligned -2 -15 Less effective Effciency Highly effective % of the 504 Combined yearly growth- respondents % difference compared to the overall averages IT spending rate over a 3 year period
    27. 27. A strong foundation is!• Simple architecture• Assignments and data owned by one system• Automation• Tests
    28. 28. NOT a Simple architecture Client Client Client Client Proces Service Proces Service Remote Facade Application Service Activity Activity Service Service Domain Domain Object Object Data Access Layer Data Data Data Data Service Service Service Service Data Storage Data Data Data Storage Storage Storage
    29. 29. This does’t help either
    30. 30. A big unified model is every architects pibe dream But as they say
    32. 32. Still too big a model Online Ordering System Product Pricing Description Unit Price Promotional Price Promotion End Date Stock Keeping Unit (SKU) Quantity On Hand (QOH) Location Code InventoryCustomer Price Quantity Ordered Sales
    33. 33. There’s always more than onemodel at play in any big project But when code based on multiple models is combined
    34. 34. … then the code becomes filled with errors, unreliable and difficult to understand Communication between team members becomes confusing. It is often unclear in what context a model should NOT be used!
    35. 35. Context is lacking
    36. 36. Smaller models and ”service reuse” Enterprise Pricing Service Product SKU Unit Price Promotional Price … Web Shop Product SKU Description Pricing Price Quantity OrderedCustomers … Inventory Service (SAP) Product SKU Description QOH Location Code … Inventory Sales
    37. 37. Now even better – with an ESB Enterprise Watch out! Pricing Service Its so easy to see a Product product as the SKU Unit Price solution to all your Promotional Price … problems! Web Shop Product SKU Description Pricing Price Quantity OrderedCustomers … Inventory Service (SAP) Product SKU Description QOH Location Code Enterprise … Inventory Service Bus Sales Before we had 1 problem. With the ESB we now have 2 problemes
    38. 38. Business focus is still lacking Processes and state changes are important components
    39. 39. A much better recipy Enterprise Pricing Service Product SKU New SKU Unit Price Promotional Price Event … Web Shop Product New SKU Price SKU Description New SKU Event Pricing Price Price Quantity Ordered EventCustomers … Inventory Service (SAP) Product New SKU SKU Description Event QOH Location Code … Inventory New SKU Message Bus Event Sales
    40. 40. What is a strong foundation?• Simple architecture• Assignments and data owned by one system• Automation• Tests
    41. 41. In brief…• Clean up the system landscape ...• Remove redundant systems• Remove systems that no longer have a reasonable cost-benefit• Modernize systems which can still be make a difference• Build new systems that can differentiate you from the rest• ... And do it based on Neil Nickolaisens Purpose Alignment Model
    42. 42. Neil Nickolaisen’s Purpose Alignment Model Invest High Partnership and Differentiate MarketDifferentiation Grade Who cares? Keep on a par with Low competitors Low High Criticality
    43. 43. What is a strong foundation?• Simple architecture• Assignments and data owned by one system• Automation• Tests
    44. 44. Automation• Continuous Integration – The code is automatically built and necessary tests are conducted for verification• Setting up environments – Server setup, firewalls, deployment• Integration testing• there is much more to get here ...
    45. 45. The solution in ETL
    46. 46. Electronic LandregistrationBackground Information on Electronic Landregistration for those who have not heard about it ...
    47. 47. ETL – Suggested Architecture Internal WebLogic Portal External Portal Portal Proces Service Proces Service IntegrationsOracle Service Bus Service Activity Activity Service Service Integrations Service Data Data Data Service Service Service Database
    48. 48. Suggested ETL Architecture• Advantages – Logically a reasonable decoupiling (Single Responsibility Principle) – Oracle makes good money on it• Disadvantages – Logical layers are turned into physical layer – High complexity – Difficult to find resources that can work with the OSB – Stability – Performance (both runtime and for developers) – Deployment
    49. 49. ETL – Simplified Architecture Internal Java applications External Portal PortalWebLogic Server Portal Facade Integrations Service Business Service Business Service Integrations Rich domain object Rich domain object Service Data Access Layer Database
    50. 50. Simplified ETL Architecture• Advantages – Physical and logical architecture are closer to each other – Low complexity – Stability – Easier to find resources that can code Java – Performance (both runtime and for developers) – Deployment• Disadvantages – The CV will not be boosted with Enterprise Service Bus – Oracle do not earn nearly as well ...
    51. 51. ETL - Automation Context• Extremely complex domain area• The rules are determined by Law (not logic)• Covering registrations there are several hundred years old• Complex logic required to automate law• Very short deadline for the third attempt to build ETL
    52. 52. Electronic Landregistration• Technical choices – Programming language: Java – Database: Oracle• First challenge – How do we integrate Java and Oracle database?
    53. 53. How it’s usually done SQLJava code
    54. 54. Means we go from this…
    55. 55. package dk.tigerteam.mdsd.demo.model.internal;@Entity@Table(name = "Customer") To this…public class Customer extends AbstractEntity { package dk.tigerteam.mdsd.demo.mode.internal; private static final long serialVersionUID = 2098912667L; @Entity @Basic @Table(name = "Booking") @Column(name = "name", nullable = false) public class Booking extends AbstractEntity { private String name; private static final long serialVersionUID = 170080605L; @OneToOne(cascade = { @Basic CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, @Column(name = "comment", nullable = false) fetch = FetchType.LAZY) private String comment; @JoinColumn(name = "addressId") @NotNull @Basic private dk.tigerteam.mdsd.demo.model.internal.Address address; @Temporal(TemporalType.TIMESTAMP) @Column(name = "time", nullable = false) @OneToMany(cascade = { private java.util.Date time; CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, targetEntity = Booking.class, mappedBy = "customer", @Basic fetch = FetchType.LAZY) @Column(name = "timeslot", nullable = false) private Set<Booking> bookingCollection = private int timeslot; new java.util.HashSet<Booking>(); @ManyToOne(cascade = { public String getName() { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, return name; fetch = FetchType.LAZY) } @JoinColumn(nullable = false, name = "customerId") private Customer customer; public void setName(String name) { this.name = name; public String getComment() { } return comment; … } @Entity … @Table(name = "Address") … public void setComment(String parameter) { public class Address extends AbstractEntity { … this.comment = parameter; private static final long serialVersionUID = 1697028161L; … } … @Basic … public java.util.Date getTime() { @Column(name = "street", nullable = false) … return time; private String street; … } … … @Basic … @Column(name = "zipCode", nullable = false)} … private String zipCode; … … @Basic … @Column(name = "city", nullable = false) … private String city; } public String getStreet() { return street; } public void setStreet(String parameter) { this.street = parameter; } … … … }
    56. 56. The line between modeling ogmuddling in hand written code is very thin
    57. 57. Can’t see the shoe for the toes? package dk.tigerteam.mddexample.model.customer; @javax.persistence.Entity public class Customer extends dk.tigerteam.mddexample.model.user.User { When all you wanted to private static final long serialVersionUID = 1328488396L; @javax.persistence.Lob @javax.persistence.Basic @javax.persistence.Column(name = "comment") private String comment; convey was this @javax.persistence.Embedded @javax.persistence.AttributeOverrides({@javax.persistence.AttributeOverride(name = "firstName",column = @javax.persistence.Column(name = "name_firstName") ) , @javax.persistence.AttributeOverride(name = "lastName",column = @javax.persistence.Column(name = "name_lastName") ) }) private dk.tigerteam.mddexample.model.customer.Name name; @javax.persistence.Embedded @javax.persistence.AttributeOverrides({@javax.persistence.AttributeOverride(name = "street", column = @javax.persistence.Column(name = "address_street") ) , @javax.persistence.AttributeOverride(name = "state",column = @javax.persistence.Column(name = "address_state") ) , @javax.persistence.AttributeOverride(name = "zipCode",column = @javax.persistence.Column(name = "address_zipCode") ) , @javax.persistence.AttributeOverride(name = "city",column = @javax.persistence.Column(name = "address_city") ) , @javax.persistence.AttributeOverride(name = "country",column = @javax.persistence.Column(name = "address_country") ) }) private dk.tigerteam.mddexample.model.customer.Address address; @javax.persistence.OneToMany(cascade = { javax.persistence.CascadeType.MERGE, javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.REFRESH} , targetEntity = dk.tigerteam.mddexample.model.customer.Pet.class, mappedBy = "customer", fetch = javax.persistence.FetchType.LAZY) private java.util.Set<dk.tigerteam.mddexample.model.customer.Pet> petCollection = new java.util.HashSet<dk.tigerteam.mddexample.model.customer.Pet>(); @javax.persistence.OneToMany(cascade = { javax.persistence.CascadeType.MERGE, javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.REFRESH} , fetch = javax.persistence.FetchType.LAZY) @javax.persistence.JoinTable(name = "Customer_invoice", joinColumns = @javax.persistence.JoinColumn(name = "CustomerId") , inverseJoinColumns = @javax.persistence.JoinColumn(name = "invoiceId") ) private java.util.Set<dk.tigerteam.mddexample.model.invoice.Invoice> invoiceCollection = new java.util.HashSet<dk.tigerteam.mddexample.model.invoice.Invoice>(); @javax.persistence.OneToMany(cascade = { javax.persistence.CascadeType.MERGE, javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.REFRESH} , fetch = javax.persistence.FetchType.LAZY) @javax.persistence.JoinTable(name = "Customer_appointment", joinColumns = @javax.persistence.JoinColumn(name = "CustomerId") , inverseJoinColumns = @javax.persistence.JoinColumn(name = "appointmentId") ) private java.util.Set<dk.tigerteam.mddexample.model.customer.Appointment> appointmentCollection = new java.util.HashSet<dk.tigerteam.mddexample.model.customer.Appointment>(); public String getComment() { return comment; } public void setComment(String parameter) { this.comment = parameter; } public dk.tigerteam.mddexample.model.customer.Name getName() { return name; } public void setName(dk.tigerteam.mddexample.model.customer.Name parameter) { this.name = parameter; }
    58. 58. Hand held consistency…@Entity @Entitypublic class Customer { public class Pet { @OneToMany( @ManyToOne targetEntity = Pet.class, private Customer customer; mappedBy = "customer” ) public void setCustomer(Customer parameter) { new ManyToOneWrapper<Customer, Pet>(this) { private Set<Pet> petCollection = new HashSet<Pet>(); @Override protected void addManySideObjectToOneSideCollection(Customer oneSide, Pet manySide) {public Set<Pet> getPetCollection() { ((WrappedSet<Pet>) oneSide.getPetCollection()).getWrappedCollection().add(manySide); } return new OneToManySetWrapper<Customer, Pet>(this, petCollection) { @Override @Override protected void removeManySideObjectFromOneSideCollection(Customer oneSide, Pet manySide) { protected Customer getOneSideObjectInManySideObject(Pet manySideObject) { ((WrappedSet<Pet>) oneSide.getPetCollection()).getWrappedCollection().remove(manySide); return manySideObject.getCustomer(); } } @Override @Override protected Customer getOneSideObjectInManySideObject(Pet manySide) { protected void setOneSideObjectInManySideObject(Pet manySideObject, return manySide.customer; Customer oneSideObject) { } manySideObject.setCustomer(oneSideObject); } @Override }; protected void setOneSideObjectInManySideObject(Pet manySide,Customer oneSide) { } manySide.customer = oneSide;} } }.updateOneSideObject(parameter); } }
    59. 59. AutomationFrom sweatshops to automation 
    60. 60. At ETL we introduced this process UML class diagrams SQLJava codeHibernate Tests
    61. 61. Another possibility
    62. 62. Sounds hard, but it’s quite easy  Rule Language Meta Model  + Rule Grammar (using Xtext) Text Editor +Data Language Meta Model  Editor & IDE
    63. 63. Point of No Return, traditionallyCost ofRework Time Freeze V 1.0
    64. 64. Point of No Return, Model DrivenCost ofRework Time Freeze V 1.0
    65. 65. The end of writing tedious code by hand Model Generator Interesting code Frameworks (Written by hand) (Hibernate/JP Schematic code A, Entity Written by hand Framework) Libraries (f.eks. Java/.NET)
    66. 66. What do we get out of it?• Higher level of abstraction• Technical decisions can be postponed• "Point of No Return" can be postponed• Documentation is always update to date• Higher Quality and Uniformity• Refactoring is both faster and cheaper• Short development cycle
    67. 67. The real short versionWe can achieve the same with fewer resources We can achieve the same in less timeWe can achieve more with the the same resources and at the same time
    68. 68. Electronic Land registration Questions?http://tigerteam.dk @TigerTeamDK on Twitter