Sunday, June 28, 2009

97 things SW Architects should know

Found this fantastic website. It's more of a wiki where people have collaborated to bring out a master list of "gems of wisdom" from SW architects for all future ones...
Here's the collected list (as of today)...I guess this has been distilled and released as a book by O'Reilly....would be a great book to get hands on....
  1. Don't put your resume ahead of the requirements by Nitin Borwankar
  2. Simplify essential complexity; diminish accidental complexity by Neal Ford
  3. Chances are your biggest problem isn't technical by Mark Ramm
  4. Communication is King; Clarity and Leadership its humble servants by Mark Richards
  5. Architecting is about balancing by Randy Stafford
  6. Seek the value in requested capabilities by Einar Landre
  7. Stand Up! by Udi Dahan
  8. Skyscrapers aren't scalable by Micheal Nygard
  9. You're negotiating more often than you think by Michael Nygard
  10. Quantify by Keith Braithwaite
  11. One line of working code is worth 500 of specification by Allison Randal
  12. There is no one-size-fits-all solution by Randy Stafford
  13. It's never too early to think about performance by Rebecca Parsons
  14. Application architecture determines application performance by Randy Stafford
  15. Commit-and-run is a serious crime. Respect your Colleagues by Niclas Nilsson
  16. There Can be More than One by Keith Braithwaite
  17. Business Drives by Dave Muirhead
  18. Simplicity before generality, use before reuse by Kevlin Henney
  19. Architects must be hands on by John Davies
  20. Continuously Integrate by Dave Bartlett
  21. Avoid Scheduling Failures by Norman Carnovale
  22. Architectural Tradeoffs by Mark Richards
  23. Database as a Fortress by Dan Chak
  24. Use uncertainty as a driver by Kevlin Henney
  25. Scope is the enemy of success by Dave Quick
  26. Reuse is about people and education, not just architecture by Jeremy Meyer
  27. There is no 'I' in architecture by Dave Quick
  28. Get the 1000ft view by Erik Doernenburg
  29. Try before choosing by Erik Doernenburg
  30. Understand The Business Domain by Mark Richards
  31. Programming is an act of design by Einar Landre
  32. Time changes everything by Philip Nelson
  33. Give developers autonomy by Philip Nelson
  34. Value stewardship over showmanship by Barry Hawkins
  35. Warning, problems in mirror may be larger than they appear by Dave Quick
  36. The title of software architect has only lower-case 'a's; deal with it by Barry Hawkins
  37. Software architecture has ethical consequences by Michael Nygard
  38. Everything will ultimately fail by Michael Nygard
  39. Context is King by Edward Garson
  40. It's all about performance by Craig L Russell
  41. Engineer in the white spaces by Michael Nygard
  42. Talk the Talk by Mark Richards
  43. Heterogeneity Wins by Edward Garson
  44. Dwarves, Elves, Wizards, and Kings by Evan Cofsky
  45. Learn from Architects of Buildings by Keith Braithwaite
  46. Fight repetition by Niclas Nilsson
  47. Welcome to the real world by Gregor Hohpe
  48. Don't Control, but Observe by Gregor Hohpe
  49. Janus the Architect by Dave Bartlett
  50. Architects focus is on the boundaries and interfaces by Einar Landre
  51. Challenge assumptions - especially your own by Timothy High
  52. Record your rationale by Timothy High
  53. Empower developers by Timothy High
  54. It is all about the data by Paul W. Homer
  55. Control the data, not just the code by Chad LaVigne
  56. Don't Stretch The Architecture Metaphorsby David Ing
  57. Focus on Application Support and Maintenance by Mncedisi Kasper
  58. Prepare to pick twoby Bill de hOra
  59. Prefer principles, axioms and analogies to opinion and taste by Michael Harmer
  60. Start with a Walking Skeleton by Clint Shank
  61. Share your knowledge and experiencesby Paul W. Homer
  62. Make sure the simple stuff is simple by Chad LaVigne
  63. If you design it, you should be able to code it by Mike Brown
  64. The ROI variable by George Malamidis
  65. Your system is legacy, design for it by Dave Anderson
  66. If there is only one solution, get a second opinion by Timothy High
  67. Understand the impact of change by Doug Crawford
  68. You have to understand Hardware too by Kamal Wickramanayake
  69. Shortcuts now are paid back with interest later by Scot Mcphee
  70. "Perfect" is the Enemy of "Good Enough" by Greg Nyberg
  71. Avoid "Good Ideas" by Greg Nyberg
  72. Great content creates great systems by Zubin Wadia
  73. The Business Vs. The Angry Architect by Chad LaVigne
  74. Stretch key dimensions to see what breaks by Stephen Jones
  75. Before anything, an architect is a developer by Mike Brown
  76. A rose by any other name will end up as a cabbage by Sam Gardiner
  77. Stable problems get high quality solutions by Sam Gardiner
  78. It Takes Diligence by Brian Hart
  79. Take responsibility for your decisions by Yi Zhou
  80. Dont Be a Problem Solver by Eben Hewitt
  81. Choose your weapons carefully, relinquish them reluctantlyby Chad LaVigne
  82. Your Customer is Not Your Customer by Eben Hewitt
  83. It will never look like that by Peter Gillard-Moss
  84. Choose Frameworks that play well with others by Eric Hawthorne
  85. Making a strong business case by Yi Zhou
  86. Pattern Pathology by Chad LaVigne
  87. Learn a new language by Burk Hufnagel
  88. Dont Be Clever by Eben Hewitt
  89. Build Systems to be Zuhanden by Keith Braithwaite
  90. Find and retain passionate problem solvers by Chad LaVigne
  91. Software doesnt really exist by Chad LaVigne
  92. Pay down your technical debt by Burk Hufnagel
  93. You can't future-proof solutions by Richard Monson-Haefel
  94. The User Acceptance Problem by Norman Carnovale
  95. The Importance of Consommé by Eben Hewit
  96. For the end-user, the interface is the system by Vinayak Hegde
  97. Great software is not built, it is grown by Bill de hora

Other Things Software Architects Should Know

The axioms have been accepted into the web project but not the 97 Things book . Axioms here are complete and useful and should be considered great runner-ups to the axioms on the other two lists. Thanks to everyone who conributed these axioms as well as others - they all provide great advice and should be read in addition to the other axioms.
  1. Architects should be Pragmatic by John Davies
  2. Applications are for making users as effective as possible by Ben Geyer
  3. Community by Evan Cofsky
  4. Know all the rules -- so you know which ones you're breaking by Kevin Bedell
  5. Not all problems are solved with a layer of abstraction by Apu Shah
  6. Learn to be humble by Apu Shah
  7. Architecture is more than just the pieces byPaul W. Homer
  8. Responsible explorer by George Malamidis
  9. Design for limited resources by Mncedisi Kasper
  10. The fastest system components are the one's that aren't there by John Tullis
  11. The closer the better by John Tullis
  12. It's not an architecture if it can't be managed by Dan Pritchett
  13. Your project does not exist in a vacuum by Charles Martin
  14. Design for needs, not wants by Claudio Perrone
  15. Consider application failures, and design for ease of recovery by Stephen Jones
  16. Risk priority by George Malamidis
  17. Test the Architecture by Matt McKnight
  18. An architect's responsibility never finishes after the architecture is created by Kamal Wickramanayake
  19. Change is a constant; architecture needs to be adaptable and the architect needs to be a change driver by Daniel Noguerol
  20. One alternative is a trap, two are a dilemma, three are freedom by Lior Bar-On
  21. Work on thy soft skills just as much as on your hard skills by Arnon Rotem-Gal-Oz
  22. Examine the sourcing of calculated fields by Stephen Jones
  23. Feel it by Mahomedalid Pacheco
  24. No, the goal is not the code nor the design by William Martinez
  25. Quality is a feature by Sam Gardiner
  26. Good Requirements Are Boring by Eben Hewitt
  27. Don’t Make Worlds, Make Containers for Worlds by Eben Hewitt
  28. Architecture = SPICE RTM by António Melo
  29. Know your limitations by Peter Gillard-Moss
  30. Tarchitects vs. Marketects vs. Carhitects by Yi Zhou
  31. Read Philoophy (and related Arts) by Keith Braithwaite
  32. Prioritize Challenges to Drive Architecture Decisions by Charlie Alfred
  33. Reduce Conceptual Distance by Charlie Alfred
  34. The User Interface drives the User Experience by Burk Hufnagel
  35. If you're unwilling to be hands-on, maybe you should keep your hands off by Barry Hawkins
  36. Lead by Influence by Travis Illig
  37. Software Should Be Invisible by Eben Hewitt
  38. Requirements are not the measure of success but the beginnings of a conversation by Christopher Dempsey

Sunday, June 21, 2009

Changes in PMBOK 4th Edition (as compared with 3rd Edition)

The 4th edition of PMI BOK has no major structural changes.
The idea behind this revision was to simplify some processes e.g dropping the Preliminary Project Scope Statements, Conditional and GERT scheduling and Activity on arrow (AOA).
One of the good things (and this has helped PMI is achieveing its position)that PMI has always followed is to keep abreast of the project management methodologies and also to be aware of deadwood (and dump it).
Based on my experience I can vouch that I never used (and doubt if I will ever) GERT scheduling or Activity on Arrow.

Also, PMBOK 4th edition has more details on project justification and project environment. Both of these make sense -
1) Project Justification - being in the IT industry I believe this is where most projects get delayed or "dead-on-birth" because too much or too else happens in justifying the project
2) Project Environment - There are just too many variables in the environment to overlook them. The best way is to be aware and track as many as possible...

Specific to the PMI notion of processes (44 current processes) the changes are:

1) Integration Management – reduced to 6 (earlier 7)- PPSS has been removed
2) Scope Management - – Unchanged(5) - but "Scope Planning" is replaced by "Collect Requirements" (I think this is a great my experience eliciting requirement is a much broader aspect in scope management rather than planning)
3) Time Management – unchanged (6), minor edits but no major changes
4) Cost Management – unchanged (3), minor edits but no major changes
5) Quality Management – unchanged (3), minor edits but no major changes
6) HR management – unchanged (4), minor edits but no major changes
7) Communication Management – increased to 5 (earliuer 4) - addition of "Identify Stakeholders"
8) Risk Management - unchanged (6), minor edits but no major changes
9) Procurement Management - reduced to 4 (earlier 6) - However most of the content is same, some structural changes - content repackaging into Plan/Conduct/Admin/Close

Hope this helps...Will add more details as and when possible..


Thursday, June 11, 2009

Microsoft Project Tips and Tricks

The following is a collection of Tips and Tricks for Microsoft Project. Unless otherwise noted, these tips and tricks work with all versions of Microsoft Project.
I would try and keep this list updated as and when I get more cheats or tricks

1. In the Gantt Chart, doubleclick on the right edge of a column header to "best fit" the column.
2. To quickly change the name of a column, doubleclick in the column header and enter a new name for the field in the Title field. For example, you may want to abbreviate the Duration field name to Dur to allow the field to be narrower.
3. To quickly change the field in a column, doubleclick in the column header and select the new field from the Field Name list. While in the Field Name list, press the first letter of the desired field to go to that field.
4. In the Gantt Chart Table (or any table), to quickly hide a column, click on the right edge of the column header and drag it to the left until it disappears (becomes a 0 width column). To display this hidden column, place the cursor a little to the right of the column separator bar where the column used to be, click and drag to the right.
5. You can wrap text in the Gantt Chart to display text on multiple lines if you increase the row height. To increase the row height, place the cursor between any two row numbers (if the ID field is displayed in the first column and is "locked"), click and drag down to increase the row height. Only Text fields wrap and only if the column is narrower than the text in the field.
6. When printing Gantt Charts (or other timescaled charts) you can adjust the width of the timescale to fit the page without changing the timescale units. Doubleclick on the Timescale and increase the number in the % field (or Enlarge field in some versions of Project) to make the timescale take up more of the page or decrease the number in the % (or Enlarge) field to make the timescale narrower. The latter step is useful when a chart is just a little too wide to fit on a page.
7. To select two or more non-adjacent tasks, click on a task (in the table area), hold down the Ctrl Key and click on another task in the chart. Continue holding the Ctrl key to select other tasks. This is especially useful for linking or unlinking tasks that are not on consecutive rows.
8. To change information for a number of tasks at once, highlight the desired tasks (select non-adjacent tasks using the method described above) and select the Task Information button. Enter the common information in one of the fields displayed in the "Multiple Task Information" dialog box.
9. To remove a date constraint from a task, select the task (or multiple tasks) and select the Task Information button. Click in the Advanced tab, change the Type field to As Soon As Possible and click OK. This removes any date constraint in the task and allows it to be scheduled based on the dependencies rather than a date entered (perhaps accidentally) by a user.
10. If a task does not move (reschedule) based on a dependency, it may contain a "fixed" date of some kind. A fixed date could be an Actual Start or a constraint such as Must Start On or Start No Earlier Than. Use the Tasks with Fixed Dates Filter to view only those tasks in a plan that contain fixed dates. You can then determine if these tasks should have these types of fixed dates. Use the previous tip to remove an unwanted constraint.
11. If after removing the Actual Start and any constraint (such as Must Start On or Start No Earlier Than) a task still does not reschedule based on a dependency, check the Resource Leveling feature. Make sure Automatic Leveling is turned off by selecting Resource Leveling from the Tools menu and choosing Manual. If a task still does not move, it may contain a delay based on a previous Resource Level. Select Resource Leveling again from the Tools menu and choose Clear Leveling. Select whether or not to remove Leveling from the selected tasks or for the entire project.
12. After applying a Filter in a Gantt chart press F3 to view all tasks again instead of applying the All Tasks filter.
13. Press Alt-Home in the Gantt chart to position the chart on the start of the project.
14. If you have indented tasks to create Summary Tasks and Detail Tasks, click the little box with the minus sign to the left of the Summary Task name to quickly hide the detail tasks below it. Click the box with the plus sign to display the detail tasks that were hidden.
15. In the Gantt chart, you can create dependencies by clicking on the Gantt bar of a task and dragging to another Gantt bar to create a Finish-to-Start dependency between the two tasks.
16. To quickly modify or delete a dependency, doubleclick on the dependency line between the two tasks to display the Task Dependency form (be sure to place your cursor directly on the dependency line).
17. In any drop down list such as the list of Resource Names or the list of Filters you can press the first letter of the item you are looking for to quickly go that item.
18. Use the Insert key on your keyboard to quickly insert rows and columns. In the Gantt chart, click on a row and press the Insert key to insert a blank row above the selected row. Click on a column header to highlight a column and press Insert to insert a column to the left of the selected column. You can also use the Delete key to reverse this process but be careful…
19. In the Network Diagram (or PERT Chart in some versions of Project), to move multiple task boxes, click in the chart area, drag the cursor to select any number of boxes and release the cursor. Then, click on the border of a box and drag the entire selection of boxes to a new location. In Project 2000, 2002 and 2003 you must first select the Format menu, Layout and then Manual Box Positioning to enable the ability to move task boxes around.
20. An often overlooked but handy report is the Calendar view using a Resource Filter. Select Calendar from the View menu. Select the Using Resource… Filter and type in the name of the desired resource to display the Calendar for a particular resource. This produces a nice printout of a resource’s tasks with each month of a project on a separate page.
21. For Project 2000, 2002 and 2003, to prevent an item from appearing in the legend for the Gantt chart, select the Format menu, Bar Styles and place an asterisk (*) before the name of the item that you do not want to appear. In Project 98 you can delete the bar styles you do not use to avoid displaying them in the legend.
22. Right click in the Toolbar area to display the list of available Toolbars. A check next to a Toolbar indicates that it is currently displayed. Click on a Toolbar to display or hide it.
23. In the Gantt Chart (or any chart with a table and a chart area) doubleclick the separator line between the table and chart to automatically push the separator line to the closest column edge.
24. To split the screen and place a specific View into the lower pane, hold the shift key while selecting an item from the View menu. You can also split the screen by selecting Split from the Window menu or doubleclick the small horizontal split bar in the lower right corner of the screen. Doubleclick it again to remove the split (or choose Remove Split from the Windows menu).
25. Just for fun - Create two 10 day tasks. Place the cursor in the Finish field of the first task and click the Copy button. Place the cursor in the Start field of the second task and select Paste Special-Paste Link from the Edit menu. Place the cursor on the Finish field of the second task and click the Copy button. Place the cursor on the Start field of the first task, select Paste Special-Paste Link and watch the tasks "walk" across the chart. Delete one of the tasks to stop.

Tuesday, June 9, 2009

Agile SW Development - Here are the Bibles (Books that you should read)

For all the hype about Agile, I have seen very few people who have really understood the concepts and processes (you can't understand unless you know how they came about). And this often leads to people making the wrong conclusions about Agile (It's too easy, It's too tough, It's too radical, I can customise it as I wish)...

Here are some classic books that you need to reference if you are serious about Agile. You may not be able to really read all but any one can be a start...

- Agile Project Management with Scrum, Ken Schwaber, Microsoft Press
- Agile and Iterative Development,A Managers Guide, Craig Larman, Addison-Wesley
- Agile Software Development with Scrum, Ken Schwaber and Mike Beedle, Prentice Hall
- The Enterprise and Scrum, Ken Schwaber, Microsoft Press
- Implementing Lean Software Development,From Concept to Cash, Mary & Tom Poppendieck, Addison-Wesley **
- Agile Adoption Patterns,A Roadmap to Organizational Success, Amr Elssamadisy, Addison-Wesley
- Scaling Software Agility,Best Practices for Large Enterprise, Dean Leffingwell, Addison-Wesley **
- User Stories Applied,For Agile Software Development, Mike Cohn, Addison-Wesley
- Agile Estimating and Planning, Mike Cohn, Addison-Wesley

There is a very good wiki on Agile too.

Hope this helps...