complexity multipliers

Download Complexity Multipliers

Post on 04-Jul-2015

207 views

Category:

Technology

1 download

Embed Size (px)

DESCRIPTION

Ever been on that project where you've been able to turn around a new feature inside an hour? And then the next project where it takes six weeks to turn around a feature that feels just about the same size? You rack your brain, and when you try to figure out why, all you come up with is small stuff. "Well, I guess we have to commit twice for a config change instead of once…" I posit there are a class of things which are "complexity multipliers"–things which seem small, but when a few of them get together, they have a major impact on the velocity of the project. The good thing is that complexity multipliers are easy to identify–if you know what you are looking for. They can be things inherent in the structure of the code, in the development process, in the development tools. I'd like to show you some graphs and some common examples and define a conceptual framework of how they affect projects.

TRANSCRIPT

  • 1. Complexity Multipliers Jason Felice @eraserhd Tuesday, August 27, 13

2. Act I: Models Tuesday, August 27, 13 3. How to Understand Things Stolen from Gerald Weinberg Tuesday, August 27, 13 4. Complexity Tuesday, August 27, 13 5. Complexity Multiplier A change which increases the cost of future activities. Tuesday, August 27, 13 6. 50 Tasks Average task takes 5 days, normally distributed, with a deviation of 2 days A Really Simple Model Tuesday, August 27, 13 7. Tuesday, August 27, 13 8. 50 Tasks Tasks start as an average of 5 days with about 2 day deviation Each task accrues a 1% complexity multiplier - about 20 minutes on the rst task A Better Model Tuesday, August 27, 13 9. Tuesday, August 27, 13 10. 50 Tasks Tasks start as an average of 5 days with about 2 day deviation Each task has a 10% probability of incurring about 20% complexity (with a deviation of about 4%) A Realistic Model Tuesday, August 27, 13 11. Tuesday, August 27, 13 12. Tuesday, August 27, 13 13. From Mythical Man Month, Fred Brooks Tuesday, August 27, 13 14. Act II: Conflict Tuesday, August 27, 13 15. A task can almost always be completed more quickly by ignoring its effect on the complexity of the system. The Trade-Off Tuesday, August 27, 13 16. Lets Maintain Two Code modules Git repositories Code paths Cong les Tuesday, August 27, 13 17. A basic principle of data processing teaches the folly of trying to maintain independent files in synchronism. It is far better to combine them into one file with each record containing all the information both files held concerning a given key. Fred Brooks (in 1975) Tuesday, August 27, 13 18. Stage Gates Sign-off required by another team Work required by another team Any process required for each task (or group of tasks) to proceed Tuesday, August 27, 13 19. Communication Tuesday, August 27, 13 20. FuzzyVersion Matching Package A: 2 point versions released Package B: 3 point versions released Package C: 2 point versions released Total: 12 congurations Tuesday, August 27, 13 21. Language Design Tuesday, August 27, 13 22. (defvar foo 42) (defun foo () 79) (defmacro foo () (* 7 9)) Tuesday, August 27, 13 23. (symbol-value foo) => 42 (symbol-function foo) => # ; equivalent to #foo (macro-function foo) => # Tuesday, August 27, 13 24. (setf foo 24) (setf (symbol-function foo) #(lambda () 26))) (setf (macro-function foo) #(lambda (x) x)) Tuesday, August 27, 13 25. (let ((bar 5)) ...) (flet ((bar () 6)) ...) (symbol-macrolet ((foo () (* 6 4))) ...) Tuesday, August 27, 13 26. (let* ((bar 5) (baz (* bar 2))) ...) (labels ((bar () 5) (baz () (* (bar) 2))) ...) ; No equiv. for symbol-macrolet Tuesday, August 27, 13 27. defun defvar defmacro macro-function symbol-value symbol-function let let* flet labels symbol-macrolet macrolet compiler-let makunbound fmakunbound Tuesday, August 27, 13 28. define let let* define-syntax let-syntax let-syntax* Tuesday, August 27, 13 29. = Tuesday, August 27, 13 30. (let ((x 5)) (labels ((somefn () ...)) (let ((y 7)) (labels ((otherfn () ...)) ...)))) Tuesday, August 27, 13 31. (let* ((x 5) (somefun (lambda () ...)) (y 7) (otherfun (lambda () ...))) ...) Tuesday, August 27, 13 32. x = 5 somefun = ... y = 7 otherfun = ... Tuesday, August 27, 13 33. Java int versus Integer int[] versus List (autoboxing only works for simple types) Tuesday, August 27, 13 34. In Node.js CPS-style functions versus regular functions Tuesday, August 27, 13 35. Act III: Resolution Tuesday, August 27, 13 36. Complexity Dividers (or Complexity Multipliers < 1.0) Tuesday, August 27, 13 37. Tuesday, August 27, 13 38. Tuesday, August 27, 13