Wednesday, December 28, 2011

Books I've read in 2011

I mostly read online articles/blog posts to keep me up to date. I read books occasionally whenever I get time. Below are some of the books which I've read this year.
  1. User Stories Applied: For Agile Software Development - This is one of the best books around for writing good user stories. Among many things it talks about how to gather user stories, how to best write them for acceptance testing, how to prioritize user stories, how to estimate user stories, planning for iteration, planning for release, how to measure and monitor velocity etc., Even though this is mainly for product owners/business analysts, it provides good information for developers, testers, scrum masters and managers also.
  2. 97 Things Evey Project Manager Should Know: Collective Wisdom from the Experts - This book is a collection of thoughts on things which every project manager should know and has many nice ideas and tips. This book would be useful not only for project managers, but also for anyone who leads/manages a team. If you are a team lead or development manager or technical manager, then this would be very useful to you. 
  3. The Pragmatic Programmer: From Journeyman to Master - This is one of the classic books on programming.  I think the first version was published back in 1999. Even though it was published many years before, most of the topics covered in this book are still relevant. This is a must read for every programmer and would especially help new programmers.
  4. Maven: The Definitive Guide - Maven's philosophy is convention over configuration. It works great for small projects, but for complex needs we need to configure it extensively. This book (also available as e-book) provides complete reference and would be very helpful for anyone trying to understand Maven intricacies and master it.
  5. PMP Certification: Excel with Ease - Even though I mostly work in Agile environment and like it, I wanted to see how traditional project management works and take PMP certification. This book (based on PMBOK) explains project management concepts in a simple manner. I learned more about general project management from this book and by studying for PMP certification. This book has lot of Q&A for each chapter and valuable tips/tricks on the PMP certification exam. This book would be very useful for anyone preparing for PMP certification.
Though not related directly to these books, below are some of my earlier posts related to these book topics:
  1. My favorite tips from Pragmatic Programmer (Pragmatic Programmer)
  2. Success tips for Agile teams (Agile)
  3. Key Points for any Project (Traditional or Agile) (Project Management, Agile)
  4. Ten tips for conducting effective meetings (Project Management, Agile)
  5. Effective Leadership/Communication skills needed for a Manager (Project Management)
  6. Project Management Process, Process Groups and Knowledge Areas (Project Management)
  7. Managing dependencies in Maven (Maven)
  8. GMaven goodness (Maven)
  9. Writing Maven Plugins (Maven)
  10. Maven 3 Features (Maven)
  11. Upgrading to Maven 3 (Maven)
  12. Maven 3 Parallel Builds (Maven)
  13. Books I've read in 2010 (Books)
  14. Books I've read in 2009 (Books)
 Wish everyone a very Happy and Prosperous New Year 2012!

Project Management Processes, Process Groups and Knowledge areas

Project management as explained by PMBOK (Project Management Body of Knowledge) is accomplished by the appropriate application and integration of 42 logically grouped project management processes. These processes are spread across 5 process groups and 9 knowledge areas.

The five process groups are:
  1. Initiating
  2. Planning
  3. Executing
  4. Monitoring & Controlling
  5. Closing
The nine knowledge areas are:
  1. Project Integration Management
  2. Project Scope Management
  3. Project Time Management
  4. Project Cost Management
  5. Project Quality Management
  6. Project Human Resources Management
  7. Project Communication Management
  8. Project Risk Management
  9. Project Procurement Management
The processes that belong in each process group, what they do and which knowledge area they represent can be confusing. This post (based on the info in PMBOK) discusses about each process group and briefly explains the processes that belong in each process group. The knowledge area they represent is indicated in brackets after the process. This post could serve as reference for project managers and also help someone preparing for PMP certification.

Initiating:

Processes performed to define a new project or a new phase of an existing project.
  • Develop Project Charter (Integration): Process of developing a document that formally authorizes a project and documenting initial requirements that satisfy the stakeholders needs and expectations. Output: Project Charter
  • Identify Stakeholders (Communication): Process of identifying all people or organizations impacted by the project and documenting relevant information regarding their interests, involvement and impact on project success. Outputs: Stakeholder register, Stakeholder management strategy 

Planning:

Processes required to establish the scope of the project, refine the objectives and define the course of action required to attain the objectives of the project.
  •  Develop Project Management Plan (Integration): Process of documenting actions necessary to define, prepare, integrate and coordinate all subsidiary plans. Outputs: Project Management plan.
  • Collect requirements (Scope): Process of defining and documenting stakeholders' needs to meet the project objectives. Outputs: Requirements documentation, requirements management plan and requirements traceability matrix
  • Define scope (Scope): Process of developing a detailed description of the project and product.  Outputs: Project scope statement, project document updates
  • Create WBS (Scope): Process of subdividing project deliverables and project work into smaller, more manageable components. Outputs: WBS, WBS dictionary, scope baseline, project document updates (WBS - Work Breakdown Structure)
  • Define activities (Time): Process of identifying the specific actions to be performed to produce the project deliverables. Outputs: Activity list, activity attributes, milestone list
  • Sequence activities (Time): Process of identifying and documenting relationships among the project activities. Outputs: Project schedule network diagram, project document updates
  • Estimate activity resources (Time): Process of estimating the type and quantities of material, people, equipment, or supplies required to perform each activity. Outputs: Activity resource requirements, resource breakdown structure, project document updates
  • Estimate activity duration (Time): Process of approximating the number of work periods needed to complete individual activities with estimated resources. Outputs: Activity duration estimates, project document updates
  • Develop Schedule (Time): Process of analyzing activity sequences, durations, resource requirements and schedule constraints to create the project schedule. Outputs: Project schedule, schedule baseline, schedule data, project document updates
  • Estimate costs (Cost): Process of developing an approximation of the monetary resources needed to complete project activities. Outputs: Activity cost estimates, basis of estimates, project document updates
  • Determine budget (Cost): Process of aggregating the estimated costs of individual activities or work packages to establish an authorized cost baseline. Outputs: Cost performance baseline, project funding requirements, project document updates
  • Plan quality (Quality): Process of identifying quality requirements and/or standards of the project and product and documenting how the project will demonstrate compliance. Outputs: Quality management plan, quality metrics, quality checklists, process improvement plan, project document updates
  • Develop Human Resource plan (Human Resource): Process of identifying and documenting project roles, responsibilities and required skills, reporting relationships and creating a staffing management plan. Output: Human Resource Plan
  • Plan communications (Communication): Process of determining project stakeholder information needs and defining a communication approach. Outputs: Communication management plan, project document updates
  • Plan risk management (Risk): Process of defining how to conduct risk management activities for a project. Output: Risk Management plan
  • Identify Risks (Risk): Process of determining which risks may affect the project and documenting their characteristics. Output: Risk register
  • Perform Qualitative risk analysis (Risk): Process of prioritizing risks for further analysis or action by assessing and combining their probability of occurrence and impact. Output: Risk register updates
  • Perform Quantitative risk analysis (Risk): Process of numerically analyzing the effect of identified risks on overall project objectives. Output: Risk register updates
  • Plan risk response (Risk): Process of developing options and actions to enhance opportunities and to reduce threats to project objectives. Outputs: Risk register updates, risk contract related decisions, project management plan updates, project document updates
  • Plan procurements (Procurements): Process of documenting project purchasing decisions, specifying the approach and identifying potential sellers. Outputs: Procurements management plan, procurements statement of work, make-or-buy decisions, procurement documents, source selection criteria, change requests

Executing:

Processes performed to complete the work defined in project management plan to satisfy the project specifications.
  •  Direct & Manage project execution (Integration): Process of performing the work defined in the project management plan to achieve the project's objectives. Outputs: Deliverables, work performance information, change requests, project management plan updates, project document updates
  • Acquire project team (Human Resource): Process of confirming human resource availability and obtaining the necessary team to complete project assignments. Outputs: Project staff assignments, resource calendars, project management plan updates
  • Perform quality assurance (Quality): Process of auditing the quality requirements and the results from quality control measurements to ensure appropriate quality standards are used. Outputs: Organization process assets updates, change requests, project management plan updates, project document updates
  • Develop project team (Human Resource): Process of improving the competencies, team interaction and the overall team environment to enhance project performance. Outputs: Team performance assessments, enterprise environmental factors updates
  • Manage project team (Human Resource): Process of tracking team member performance, providing feedback, resolving issues and managing changes to optimize project performance. Outputs: Enterprise environmental factors updates, organization process assets updates, change requests, project management plan updates
  • Distribute Information (Communication): Processing of making relevant information available to project stakeholders, as planned. Output: Organization process assets updates
  • Manage stakeholder expectations (Communication): Process of communicating and working with stakeholders to meet their needs and addressing issues as they occur. Outputs: Organization process assets updates, change requests, project management plan updates, project document updates
  • Conduct procurements (Procurements): Process of obtaining seller responses, selecting a seller and awarding a contract. Outputs: Selected sellers, procurement contract award, resource calendars, change requests, project management plan updates, project document updates

Monitoring & Controlling:

Processes required to track, review and regulate the progress and performance of the project.
  • Monitor & Control project work (Integration): Process of tracking, reviewing and regulating the progress to meet the performance objectives defined in the project management plan. Outputs: Change requests, project management plan updates, project document updates
  • Perform Integrated Change control (Integration): Process of reviewing all change requests, approving changes and managing changes to the deliverables, organization process assets, project documents and project management plan. Outputs: Change requests status updates, project management plan updates, project document updates
  • Verify scope (Scope): Process of formalizing acceptance of the completed project deliverables. Outputs: Accepted deliverables, change requests, project document updates
  • Control scope (Scope): Process of monitoring the status of the project and product scope and managing changes to the scope baseline. Outputs: Work performance measurements, organization process assets updates, change requests, project management plan updates, project document updates
  • Control schedule (Time): Process of monitoring the status of the project to update project progress and managing changes to the schedule baseline. Outputs: Work performance measurements, organization process assets updates, change requests, project management plan updates, project document updates
  • Control costs (Cost): Process of monitoring the status of the project to update the project budget and managing changes to the cost baseline. Outputs: Work performance measurements, budget forecasts, organization process assets updates, change requests, project management plan updates, project document updates
  • Perform quality control (Quality): Process of monitoring and recording results of executing the quality activities to assess performance and recommend necessary changes. Outputs are quality control measurements, validated changes, validated deliverables, organization process assets updates, change requests, project management plan updates, project document updates
  • Report performance (Communication): Process of collecting and distributing performance information including status reports, progress measurements and forecasts. Outputs: Performance reports, organization process assets updates, change requests
  • Monitor and control risks (Risk): Process of implementing risk response plans, tracking identified risks, monitoring residual risks, identifying new risks and evaluating risk process effectiveness throughout the project. Outputs: Risk register updates, organization process assets updates, change requests, project management plan updates, project document updates
  • Administer procurements (Procurements): Process of managing procurement relationships, monitoring contract performance and making changes/corrections as needed. Outputs: Procurement documentation, organization process assets updates, change requests, project management plan updates

Closing:

Process performed to finalize all activities across all process groups to formally close the project or phase.
  •  Close project or phase (Integration): Process of finalizing all activities across all of the project management process groups to formally complete the project or phase. Outputs: Final product, service or result transition, organization process assets updates
  • Close procurements (Procurement): Process of completing each project procurement. Outputs : Closed procurements, organization process assets updates

Reference: A Guide to the Project Management Body of Knowledge (PMBOK Guide) - Fourth Edition

Tuesday, December 27, 2011

Ten tips for Conducting Effective Meetings

We all have been in meetings which are boring, too long, where other participants are poking their phones or even sleeping. This is partly because meetings are not conducted properly. Considering how many meetings we all attend every day, it is important to make meetings effective. Ineffective meetings could easily cost thousands of dollars to the organization (for ex, think about a team  of 6 meeting several times a week ineffectively) Below are some of the tips that could help in conducting effective meetings:
  1.  Invite only relevant people to the meeting - It is important to invite only relevant people. Non-relevant participants either would not pay attention to meeting discussion or distract the meetings. They would be better off doing some real work.
  2. Provide meeting agenda in meeting invite - This would help everyone to prepare for the meeting accordingly. This would also help participants to decide if the meeting is relevant for them and they can decide whether to accept or decline the invite accordingly.
  3. Set up ground rules for the meeting - This needs to be done at the start of the meeting. This could be format of the meeting, behavior during the meeting, no use of cell phones etc., Ask if everyone is ok with this or if they want to add their own.
  4. Discuss only things on agenda - During meetings, it is very easy to get distracted or get into too much details on one topic. Avoiding this or having the facilitator remind everyone when this happens is important so that meeting discussion is on track.
  5. Have a good communication link - Having everyone co-located during meetings is very rare these days. Even if there is no off-shoring, we often work with other teams in US. Make sure you have a good phone line or better a good video-conferencing facility, if your organization can afford it.
  6. Have short meetings - Short meetings are more effective. Attention span of participants might reduce as time goes by. 30 mins or 1 hour is a good time for meetings. If you need to have meetings beyond that, make sure you think about it and have a valid reason to do so.
  7. End meetings on time - Even if you have short meetings, make sure that meetings ends on time. Participants might have something else scheduled after this and it is important to respect other people's time. Many participants tune out or think about the next thing they are going to do, once meeting goes past the scheduled end time. 
  8. Communicate results of the meeting - Conclude the meeting with results of the meeting and mention if any follow-up meetings are necessary. After the meeting, document (text, word, wiki etc.,) what was discussed in the meeting and send it to everyone (even to people who have missed the meeting). This would help participants to go back later on and find out what was discussed in the meeting. It could also serve as input for subsequent meetings.
  9. Do not spread meetings throughout the day - Try to have meetings when team members are disturbed from their normal work anyway. Having back to back meetings or meetings concentrated in mornings or evenings leaves people some undisturbed time to work on their regular stuff. Programming needs concentration and every time people get disturbed, it takes time for them to get back on track.
  10. Be a good facilitator - Being a good facilitator is key and can make even dull meetings fun. Having good communication skills, understanding of the subject etc., make meetings relevant. One of the key thing is to make everyone participate and make sure that no one's view is neglected. Facilitation skills are not easy for technical guys but is important to focus on.
I'm sure there are other points that would help too. If you want to add more, feel free to add them as comments.

Monday, December 26, 2011

Maven 3 Parallel builds

We upgraded to Maven few months back and recently tried parallel builds feature (I've posted about Maven 3 features in this earlier post - http://rajakannappan.blogspot.com/2011/07/maven-3.html.) in hopes of improving our build times. But, unfortunately our build times did not improve at all.

We are using the latest maven 3 version (3.0.3) and also the latest maven plugins available to date. Still, we get the many plugins are not threadsafe and so they don't take advantage of the parallel builds. For example, we get this during our build which shows these plugins are not threadsafe.

[WARNING] ********************************************************
[WARNING] * Your build is requesting parallel execution, but project
[WARNING] * contains the following plugin(s) that are not marked as
[WARNING] * @threadSafe to support parallel building.             
[WARNING] * While this /may/ work fine, please look for plugin updates
[WARNING] * and/or request plugins be made thread-safe.           
[WARNING] * If reporting an issue, report it against the plugin in
[WARNING] * question, not against maven-core                      
[WARNING] ********************************************************
[WARNING] The following plugins are not marked @threadSafe in 
[WARNING] MyProjectName project:
[WARNING] org.apache.maven.plugins:maven-pmd-plugin:2.6
[WARNING] org.codehaus.mojo:cobertura-maven-plugin:2.5.1
[WARNING] org.codehaus.groovy.maven:gmaven-plugin:1.0
[WARNING] org.codehaus.mojo:buildnumber-maven-plugin:1.0
[WARNING] org.codehaus.mojo:exec-maven-plugin:1.2.1
[WARNING] ********************************************************

It is unfortunate that these plugins don't support running in parallel even though Maven3 is out for a while now. Just posting my experience and hope it changes soon...