Category Archives: Software Project Management

Software Configuration Management Example

Context:

  • You have an application that was developed 7 years ago and there have been no updates since then.
  • Your application was developed with python 2.7, Java 8, Android SDK 7.0 (API level 24), tools_r25.2.5, ndk-r13, ant 1.9.4, and cocos2d-x 3.13.1 (Sadly its development was discontinued).

Problem:

  • Google Play requires you to update your app to target Android 12 (API level 31).

Experience:

1. You tried installing all the tools and compiling the code. Luckily no problem happened.

2. You checked for Java and Gradle compatibility. You decided to stay with Java 8 because cocos2d-x only works best with Java 8. It means that your Gradle version must be less than 4.3. So you selected version 4.1 for Gradle.

3. You checked for Gradle and Android Gradle Plugin compatibility. You realized that you can only use Android Gradle plugin version 3.0.0 or less. So you selected version 3.0.0 for Android Gradle plugin.

4. You searched for “gradle-wrapper.properties” and updated Gradle to version 4.1.

#distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

5. You searched for “build.gradle” and updated Android Gradle plugin to version 3.0.0.

buildscript {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
dependencies {
// classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.android.tools.build:gradle:3.0.0'
...

6. You set your app targetSdkVersion to 31, created APK file and uploaded it to Google Play.

7. Google Play complained about “android:exported” property for activities with “intent-filter. You added “android:exported” property to your AndroidManifest.xml but the problem still persisted.

8. You suspected that Google Play Services library caused the issue because your app uses Firebase Ads that depends on Google Play Services library. So you tried removing Firebase Ads and you were happy when Google Play did not complain anymore.

9. Then you decided to add Google AdMob SDK to your app to replace Firebase Ads. You set your minSdkVersion to 19, your targetSdkVersion to 33 and follow the instructions until you got many build errors with play-services-ads:22.4.0.

10. You tried using latest SDK tools (26.1.1) but you got “The “android” command is deprecated.” issue. cocos2d-x development had been discontinued so you had to revert back to 25.2.5 SDK tools.

11. You tried downgrading play-services-ads to a lower version using trials and errors and luckily you found that version 17.2.1 worked.

12. You created APK file, uploaded it to Google Play, and sent for review. Google Play complained that you must have included 64-bit and 32-bit native code in your app.

13. Luckily, you could build cocos2d-x 3.13.1 for 64-bit architectures by searching for “Application.mk” and set APP_ABI :=armeabi-v7a arm64-v8a, and searching for “gradle.properties” and set PROP_APP_ABI=armeabi-v7a:arm64-v8a, and searching for “build.gradle” and set ndk.abiFilters ‘armeabi-v7a’, ‘arm64-v8a’ under defaultConfig. You also noticed that cocos2d-x 3.13.1 has not supported x86_64 achitectures but at least finally you could be able to publish your app to Google Play.

Lessons learned:

1. Select mature and long-term support tools for your application development.

2. Always package the tools that you used together with the application source code.

3. Always document source code compilation steps and configuration setting locations.

4. Regularly update your application if possible.

Should We Rebuild or Renovate an Outdated System?

Motivation

You have an outdated system and want to rebuild or renovate it. You do not know which path is best for you.

Guidelines

Typically you have 2 main options for an outdated system.

Option 1 – Replacement: You can rebuild the whole system and migrate the existing data to the new system.

If you follow this approach then you may consider WordPress if your system is just a brochure website. WordPress is very suitable for building a brochure website.

If you system is a simple software supporting few business processes then you may consider EspoCRM. EspoCRM is very suitable for building simple business processes.

If your system is a sophisticated software supporting specific business then there may be several things you may need to consider when deciding to rebuild your system.

1. The effort to migrate the existing data to the new platform. A deep analysis of the existing data is required to create a reasonable estimate for this task.

2. The effort to integrate the new system with other systems that are integrated with the existing system. An analysis of the existing source code is required to create a reasonable estimate for this task.

3. The effort to implement all the existing business processes in the new system. A list of all business processes with their concrete steps is required to create a reasonable estimate for this task.

4. The possible mismatches of the new platform and the existing code base and data. These may require changes of business processes or removal of some existing features or considerable effort for migration.

5. Are the source code, database and files of the existing website fully available? Some websites might suffer vendor lock-in issue. It may be true that any exported data is unusable without the source code. Therefore no migration tool can help data migration due to specific data structures and constrains.

For example no one-way encrypted user passwords can be migrated to a new system. The best data that might be available for you is just Excel or CSV files. The contents of these files may be imported to the new system manually or automatically but no business logic can be transferred. In this case, rebuilding the whole system (preferably using WordPress) will require manually copying the contents to the new system and partially importing few tables (e.g. emails, first names, last names, page titles) to the new system.

Option 2 – Renovation: You may choose to renovate your system if the existing technology stack is not too outdated.

When choosing this option you may need to consider several things below.

1. The life cycle of the existing technology stack. The existing technology stack should not be deprecated and is still in active support.

2. The ecosystem of the existing technology stack. Most of 3rd party components for the existing technology stack should still be in development and support.

3. The capabilities of the existing technology stack. The existing technology stack should still support your new requirements although the solutions may not be perfect for performance or user experience.

4. The cost of the existing technology stack. You should still be able to afford the cost of the existing technology stack.

 

WordPress Lessons Learned

Lessons learned 1: Maintenance creep.

Problem:

The cost of updating the core, updating plug-ins, and updating integration code for a system built with WordPress is much higher than expected.

Context:

WordPress core, its themes and plug-ins can provide a very fast solution by integrating their features. It works best for used for achieving a general solution (for example corporate websites with predefined business processes).

However their very frequent updates are painful too.

If we do not apply the updates to the system then we may have risk of potential security issues.

Therefore the maintenance of a WordPress based system usually takes more effort than systems built using other web frameworks that do not require very frequent updates.

The problem become worse when we apply the updates to the system and the integration may be broken because of incompatibility among the plug-ins owned by different software providers and WordPress.

Solution:

If you have have opportunity of building a system for a client using WordPress and its plug-ins then you should plan a considerable maintenance budget for updating WordPress, specific plug-ins and integration code.

This lesson learned applies to any system built with a plug-in based architecture (i.e. microkernel architecture) in which the core and plug-ins owned by different software providers.

Lessons learned 2: Customization creep.

Problem:

The cost of integrating a theme with various COTS plugins and integration code for building a system using WordPress is much higher than you expected.

Context:

Customizing a WordPress solution for specific business processes takes more effort than using other general web frameworks because we do not have full control of the themes and plug-ins.

Even we can modify the themes and plug-ins or build new specific plug-ins using PHP and mySQL the solution still depends on WordPress core the architecture of which is not good for domain-specific enterprise systems which often rely much on domain-specific rules that should be isolated from specific infrastructure.

Solution:

If you have have opportunity of building a domain-specific system using WordPress and its plug-ins then you should

  • refine business requirements into appropriate user stories or use cases.
  • create an architecture first and evaluate it carefully using various scenarios, and
  • create a poof of concept.

Lessons learned 3: WordPress and Salesforce integration decision.

Motivation:

You need to evaluate options for integrating WordPress with Salesforce so that development and maintenance cost is acceptable.

Solution:

IMO an enterprise solution based on Salesforce and WordPress integration may be proposed based on a client’s needs and budget.

I define a long term project as a project many big enhancements of which will be required after the solution is deployed.

I define a short term project as a project only some small enhancements of which will be required after the solution is deployed.

I define an important project as a project the requirements of which must be satisfied exactly as the Client requires.

I define a flexible project is a project the requirements of which may be implemented not exactly as the Client requires due to constraints of tools.

If the client needs Salesforce CRM (a must requirement) and they have a big budget then I would recommend that they use Salesforce for file storage and all Salesforce tools (i.e. LWC, community portals) for implementing their own business processes for a long term and important project.

If the client needs Salesforce CRM (a must requirement) and they have medium budget then I would recommend that they use BOX or DropBox or Sharepoint for file storage and all Salesforce tools (i.e. LWC, community portals) for implementing their own business processes for a long term and important project.

If the client needs Salesforce CRM (a must requirement) and they have low budget then I would recommend that they use WordPress for file storage and Commercial off-the-shelf (COTS) plug-ins for implementing their own business processes for a short term or “flexible” project.
In this case, the development effort may be reduced much but the maintenance/enhancement effort may be increased much.

If the client does NOT really need Salesforce CRM and they have medium budget then I would recommend that they use general frameworks and tools (including WordPress and custom plug-ins) for implementing their own business processes for a long term and important project.
File storage can be local server or any service.

If the client  does NOT really need Salesforce CRM and they have low budget then I would recommend that they use WordPress for file storage and WordPress COTS plug-ins for implementing their own business processes for a short term or flexible project.

 

 

 

      How to Quickly Estimate Project Effort using Expert Judgement?

      Motivation:

      You need to quickly estimate effort for building an enterprise system.

      Solution:
      1. Ensure that you have a requirements analysis document.
        This can be

        • list of artifacts or
        • a list of features or
        • a list of use cases or
        • a list of user stories or
        • a list of user interfaces or
        • a list of workflows with their steps.
          Note: Never conduct an estimation using expert judgement without any inputs.
      2. Break down each of item in the list into the following (but not limited to) tasks to create:
        • UI and navigation code,
        • database script or storage schema definition code,
        • API code,
        • business logic code,
        • data access code,
        • scheduler code,
        • unit tests code,
        • deployment script,
        • end-to-end test cases and test reports, and
        • user guide.
          Note: You do not need to break down a feature into tasks if you can estimate an effort to complete it with high confidence.
      3. Estimate the effort in man-days for completing each task.
        When giving an estimate for each task, think about

        • possible inputs validation and error handling aspect,
        • possible navigation framework preparation,
        • possible alternative scenarios of the feature related to the task,
        • possible encryption and decryption aspect,
        • possible attacks prevention (e.g. adding CAPTCHA, trimming special characters),
        • possible frameworks, libraries or external tools preparation, and
        • communication, meeting and status report for each task.
          Note: You should break down a task into sub-tasks if you are still not confident when giving an estimate for completing it.
      4. You do not need to perform the second and third step in a sequential order, just complete anything you can and repeat these 2 steps as many times as you like.
      5. If you cannot break down a feature into tasks or cannot give an estimated value for a task then you need to create a prototype or a proof of concept related to the feature.
      6. If you want to have a more accurate estimated value for a task then you should give 3 values for the task estimation: the best case value (optimistic value), the worse case value (pessimistic value) and the most likely value, then calculate the estimated value using the formula below.
        Estimated value = (Best case value + (4 X Most likely value) + Worse case value)/6
      7.  If you just need to give an effort guesstimate for a project containing too many requirements then you can group similar items together, then guess an effort for completing one item in a group and multiply this value with the number of items in the group, then repeat this guess and calculation for all the remaining groups.
      8. Include all communication, documentation and training effort into the guesstimate.

       

       

      Topic 14 – Software Project Management

      Why do I need to learn about software project management?

      Knowing how to create software does not mean that you will create software SUCCESSFULLY. Creating software successfully means that you satisfy all customer’s REQUIREMENTS ON TIME, ON BUDGET with HIGH QUALITY while making both the customer and yourself HAPPY. Especially, your software must create REVENUE for the customer.

      Have you ever wondered why many software projects failed; why Microsoft, Oracle, Google, Apple, Amazon and IBM abandoned many projects? Software project management will provide you knowledge so that you could improve the success probability of your software projects and mitigate all the project risks.

      What can I do after finishing learning about software project management?

      You will know how to plan a project, including scoping, estimating time and resources, creating a schedule or an adaptive release plan, identifying and responding to risks.

      You will know how to create software using the mindset of a specific methodology (i.e. Waterfall, Rational Unified Process, Iterative and Incremental Development, Agile Methods, Scrum, Extreme Programming, Kanban, PMI, PRINCE2).

      You will know how to perform project configuration management, how to combine development and operations to release software faster, how to control project changes, how to report project status, how to control product and process quality.

      You will know how to collaborate with others to create software, how to motivate your team members.

      Uh-oh! I am a developer. I do not want to be a project manager. Do I really need to know about project management?

      If you have a doubt about the usefulness of project management knowledge then just review the situations below. If you can overcome all of them then congratulation, you already have enough project management knowledge that a developer needs.

      – You are asked by your manager when you can finish your tasks. Unfortunately, the tasks are new to you. The requirements are vague. It is even worse that you have not found technical solutions for them.

      – You are required to finish a task requiring a collaboration with other team members. Conflicts arise frequently. You do not want to work with them anymore but you still have to complete the task.

      – You cannot complete a task on time due to many incidents.

      – You are given only a project idea and asked to create a product. The difficulty is that you do not know where to start.

      – Most of your projects cannot be complete on time and on budget and you do not know what are the root cases.

      – Most of your customers do not want to partner with your team again although their projects were finished on time with high quality by your team.

      Alright! What should I do now?

      Software project management requires a lot of reading. In order to get familiar with software project management concepts please read this Jennifer Greene and Andrew Stellman (2005). Applied Software Project Management. O’Reilly book.

      After that please read this Steve McConnell (2006). Software Estimation: Demystifying the Black Art. Microsoft Press book to learn how to estimate effort, time and cost for a software project.

      After that please read
      – this Frederick P. Brooks, Jr. (1995). The Mythical Man-Month: Essays on Software Engineering. Addison-Wesley Professional book to learn the timeless principles of software project management, and
      – this Tom DeMarco and Timothy Lister (2013). Peopleware: Productive Projects and Teams. Addison-Wesley Professional book, and
      – this Zachary Wong (2007). Human Factors in Project Management: Concepts, Tools, and Techniques for Inspiring Teamwork and Motivation. Jossey-Bass book
      to learn how to deal with human side of project management.

      After that please read this Tom DeMarco and Timothy Lister (2003). Waltzing with Bears: Managing Risks On Software Projects. Dorset House book to learn how to deal with software project risks.

      After that please read
      – this Philippe Kruchten (2003). The Rational Unified Process: An Introduction. Addison-Wesley Professional book, and
      – this Per Kroll and Philippe Kruchten (2003). The Rational Unified Process Made Easy: A Practitioner’s Guide to the RUP. Addison-Wesley Professional book, and
      – this Scott W. Ambler et al. (2005). The Enterprise Unified Process – Extending the Rational Unified Process. Prentice Hall book
      to learn how to develop software using a managed process.

      After that please read
      – this Ken Schwaber (2004). Agile Project Management with Scrum. Microsoft Press book, and
      – this Jonathan Rasmusson (2010). The Agile Samurai: How Agile Masters Deliver Great Software. Pragmatic Bookshelf book, and
      – this Kenneth S. Rubin (2012). Essential Scrum: A Practical Guide to the Most Popular Agile Process. Addison-Wesley Professional book, and
      – this Mike Cohn (2010). Succeeding with Agile: Software Development Using Scrum. Addison Wesley book, and
      – this Dean Leffingwell (2011). Agile Software Requirements. Lean Requirements Practices for Teams, Programs, and the Enterprise. Addison-Wesley Professional book, and
      – this Mike Cohn (2005). Agile Estimating And Planning. Pearson Education book, and
      – this Kent Beck and Cynthia Andres (2004). Extreme Programming Explained: Embrace Change. 2nd Edition. Pearson Education book, and
      – this James Shore and Shane Warden (2008). The Art of Agile Development. O’Reilly book, and
      – this Esther Derby and Diana Larsen (2006). Agile Retrospectives: Making Good Teams Great. Pragmatic Bookshelf book
      to learn how to develop software using Scrum and agile mindset.

      After that please read
      – this Eric Brechner (2015). Agile Project Management with Kanban. Microsoft Press book, and
      – this David J. Anderson (2010). Kanban: Successful Evolutionary Change for Your Technology Business. Blue Hole Press book to learn how to develop software using the Kanban method.

      After that please read
      – this Jessica Keyes (2004). Software Configuration Management. Auerbach Publications book to learn how to perform software configuration management, and
      – this Len Bass, Ingo Weber and Liming Zhu (2015). DevOps: A Software Architect’s Perspective. Pearson Education book
      to learn how to release software faster.

      After that please read
      – this Project Management Institute (2021). A Guide to the Project Management Body of Knowledge. 7th Edition. Project Management Institute book, and
      – this Kathy Schwalbe (2017). An Introduction to Project Management. 6th Edition. Schwalbe Publishing book to review the techniques developed by the Project Management Institute (PMI).

      If you are interested in taking a PMP exam then please read
      – this Kim Heldman (2018). PMP Project Management Professional Study Guide. Sybex book, and
      – this Joseph Phillips (2018). PMP Project Management Professional Study Guide. McGraw-Hill Education book.

      After that please read
      – this Steve McConnell (1996). Rapid Development: Taming Wild Software Schedules. Microsoft Press book to review classical methods and techniques of software development, and
      – this Murali K. Chemuturi and Thomas M. Cagley Jr. (2010). Mastering Software Project Management: Best Practices, Tools and Techniques. J. Ross Publishing book to review approaches to software project management, especially when organizational-level processes and practices establish a platform on which a software project is managed. The information in these 2 books may help you in some specific situations.

      Terminology Review:

      • Project Initiation
      • Scope Management
      • Agile Requirements
      • Waterfall
      • Rational Unified Process (RUP)
      • Enterprise Unified Process
      • Agile Methods
      • Extreme Programming (XP)
      • Scrum
      • Kanban
      • Work-in-Progress (WIP)
      • Software Estimation
      • Agile Estimating
      • Project Planning
      • Gantt Chart
      • Cost Management
      • Agile Planning
      • Configuration Management
      • CI/CD/DevOps
      • Project Monitoring and Control
      • Time Management
      • Peopleware
      • Team Management
      • Team Motivation
      • Software Quality
      • Agile Retrospectives
      • Quality Management
      • Risk Management
      • Software Project Management
      • Software Process
      • Project Management Professional (PMP)
      • CMMI

      After finishing learning this topic please click Topic 15 – Introduction to Database Design to continue.