Successfully reported this slideshow.

Habitual thinking - Patterns for IT disappointment and failure

5

Share

Upcoming SlideShare
5º 4ªu.d las combas
5º 4ªu.d las combas
Loading in …3
×
1 of 70
1 of 70

Habitual thinking - Patterns for IT disappointment and failure

5

Share

Download to read offline

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.

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.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Habitual thinking - Patterns for IT disappointment and failure

  1. 1. Habitual thinking Patterns for IT disappointment and failure Henrik Wivel & Jeppe Cramon
  2. 2. Corporate growth slowed due to lack of funding Berlingske Finans 6 out of 10 public projects going 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 organization's 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 VIEW We need a combined Implement Siebel CRM in the customer view Call center We need to better Buy and install HP Quality manage our Center requirements We need a Service Build a solution using Web Orienteret Architecture services in Oracle Service Bus / SeeBeyond / ...
  8. 8. Git REST BlackBerry Oracle Service bus Documentum 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 Groovy Policy Manager Foundation BPMN Portal Server Hg Flash XML JavaScript 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 resources on 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, what's 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 price How 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 hour It’s a bit like bying app on the Apple AppStore They only cost $1
  21. 21. Project Economy Productivity Productivity Administrative overhead Administrative overhead 10 technical domain experts 100 developers
  22. 22. Inspiration Desperation
  23. 23. Solutions Pattern for IT disappointment and failures
  24. 24. Here are the solutions! SCRUM XP LEAN Agile Outsourcing What 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 -6 Alignment 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
  31. 31. ONE MODEL TO RULE THEM ALL ONE MODEL TO FIND THEM ONE MODEL TO BRING THEM ALL AND IN THE DARKNESS BIND THEM
  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 Inventory Customer Price Quantity Ordered Sales
  33. 33. There’s always more than one model 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 Ordered Customers … Inventory Service (SAP) Product SKU Description QOH Location Code … Inventory Sales
  37. 37. Now even better – with an ESB Enterprise Watch out! Pricing Service It's 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 Ordered Customers … 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 Event Customers … 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 Nickolaisen's Purpose Alignment Model
  42. 42. Neil Nickolaisen’s Purpose Alignment Model Invest High Partnership and Differentiate Market Differentiation 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 Landregistration Background 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 Integrations Oracle 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 Portal WebLogic 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 SQL Java 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 og muddling 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 @Entity public 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. Automation From sweatshops to automation 
  60. 60. At ETL we introduced this process UML class diagrams SQL Java code Hibernate 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, traditionally Cost of Rework Time Freeze V 1.0
  64. 64. Point of No Return, Model Driven Cost of Rework 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 version We can achieve the same with fewer resources We can achieve the same in less time We 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

Editor's Notes

  • 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&apos;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 &quot;Invest and differentiate&quot; 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 &quot;here must behistory&quot; 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
  • ×