Showing posts with label Design. Show all posts
Showing posts with label Design. Show all posts

Friday, 14 September 2018

Thought of the day: Questions to ask your clients and developers?

There are times when it is a great idea to ask your clients and your developers a few questions about the project you are about to join.

Naturally, you will not be able to ask all the people the questions but you never know.
However, the answers should give you a rough idea of the maturity of the project.

The following table is an overview of the detail & questions you may need from each of the stakeholders. You may determine that additional/different people are needed to fulfil this and some people may have multiple roles but it should be a starting point.


Who (Client)
Information sought
Project Sponsor
  1. Provide an overview of the Objectives and benefits expected
  2. What are the Business’ general expectations of the project? How are they being assessed?
  3. What are the Business’ technical expectations of the project? How are they being assessed?
  4. What are the Business’ security expectations of the project? How are they being assessed?
  5. Is there a feature project roadmap and is it shared with the Team?
Product Owner

  1. Provide an overview of the prioritised delivery roadmap
  2. What are the Business’ general expectations of the project?
  3. What are the Business’ technical expectations of the project?
  4. What are the Business’ security expectations of the project?
  5. Is there a feature project roadmap and is it shared with the Team?
  6. What security requirements has the business placed on the system?
  7. What non-functional and performance requirements has the business placed on the system?
  8. What is the current and future growth of the system expected to be?
  9. Are requirements prioritised using a MoSCoW scheme?
  10. As PO are you involved in the Sprint planning phases of the project?
  11. Are you involved in the development of the project feature backlog?
  12. Are you involved in the development of the sprint planning process?
  13. Are technical blockers reported to you?
  14. Is there sufficient project information being provided by the team to assist with the creation of further requirements?
  15. Provide a walkthrough of the feature backlog and priority
  16. Provide insight into the current issue/risks/constraints to the project
Project Manager
  1. Provide an overview of the current SDLC, measures and controls
  2. What are the processes & tools for requirements control?
  3. Does the project have a Release timeline?
  4. What is the process the team is following to control their development? If it is agile can you describe the process?
  5. Who is involved in the development of the project feature backlog and whats the process?
  6. Who is involved in the development of the sprint planning process and whats the process?
  7. As PM how would you describe your role in this SDLC?
  8. Does the project have a measurable sprint velocity?
  9. As PM are you involved in the Sprint planning phases of the project?
  10. How are testing outcomes & blockers/impediments reported and tracked?
  11. Are technical blockers reported to you?
Data/Business Analyst
Business SME
  1. What is the Business’ general expectations of the project?
  2. Provide an overview of the top priority Use Cases for the solution
  3. What are the processes the system needs to perform?
  4. What is the current quantity of data the system must process?
  5. What are the data sources, transformations and outputs the system must perform? (schemas, definitions, data flows etc)
  6. What security requirements has the business placed on the system?
  7. What performance requirements has the business placed on the system?
  8. What is the current and future growth of the system expected to be?
  9. How are the requirements communicated to the team?
  10. How is system functionality measured against the requirements?
Technical Architect
  1. What is the overall System architecture context?
  2. What are the main functional components of the system?
  3. What are the processes & tools for requirements control?
  4. Are you involved in the development of the project feature backlog?
  5. Are you involved in the development of the sprint planning process?
  6. What security requirements were placed on the system?
  7. What performance requirements were placed on the system?
  8. What is the current and future growth of the system expected to be?
  9. What architecture requirements were placed on the system?
  10. What other non-functional requirements were placed on the system?
  11. Is there a Disasters recovery plan for the system? If so how is it implemented architecturally?
  12. Is it possible to get access to all existing design notes for the system?
  13. How are design choices and patterns communicated with the team for development?
  14. Is there a deployment strategy or process for the system? (Infrastructure as code?)
  15. Is there a testing/assurance strategy or process for the system?
  16. When there are issues with the development are you informed and consulted?
  17. When there are issues reported by assurance are you informed and consulted?
  18. Prior to the system going operational are you consulted by the Assurance, Operations or development team on how systems should be configured, or any potential issues?
  19. When in operation do you have visibility of operational monitoring systems?
  20. Once the system is deployed how do you know that it has been deployed according to your specification?
  21. Does the system have a ‘Technical Debt log’ or a list of known issues?
  22. Provide an overview of the solution architecture
  23. Provide details of constraints, dependencies and issues encountered and impacting delivery
Vendor Tech Lead
  1. How are requirements communicated to the team?
  2. What is the process the team is following to control their development? If it is agile can you describe the process?
  3. Are you involved in the development of the sprint planning process?
  4. Is the team aware of the release schedule for the system?
  5. Is the team recording development information in some way? If so using which tool?
  6. What security requirements were placed on the system?
  7. What performance requirements were placed on the system?
  8. What architecture requirements were placed on the system?
  9. What is the process of reporting progress in development back to project management?
  10. What are the development toolsets in use across the team?
  11. When source code is developed what coding standards are being followed?
  12. When source code is being developed which source code management (SCM) tool is in use?
  13. Who has Source code access?
  14. When a build of the system is performed what are the build artefacts and how are they stored?
  15. What is your SCM versioning & branching & merging strategy?
  16. When defects are found, how are they reported, tracked and reported?
  17. What are the capabilities of development staff & their relative strengths?
  18. Is the team following a BDD/TDD development approach?
  19. What level of code review is performed during development?
  20. What is the release process for new functionality?
  21. Do you produce release notes for each new release?
  22. How many environments are used for development?
  23. What is the process for procuring cloud development stacks?
  24. What are the data sets used during development?
  25. How is the development environment secured?
  26. Is there a build process for the system? If so what is it?
  27. Is the system deployable using automation tools? If so what are they?
  28. What level of testing (manual & automated) exists for the system to prove functional & non-functional requirements?
  29. When the system is in UAT what information/documentation is requested by Assurance to determine the available functionality?
  30. When the system is in LIVE what information/documentation is requested by Operations regarding its operation and deployment?
  31. Provide an overview of the solution and the code
  32. Provide details of constraints, dependencies and issues encountered and impacting delivery
  1. Security & Compliance

  1. Provide an overview of the prioritised Security & Compliance requirements for the solution
  2. When the system requirements are being determined was security consulted?
  3. When the system is being developed what involvement does Security have?
  4. When the system deployment is being planned is Security consulted?
  5. Is Security informed of code related security issues?
  6. Is security informed of how the system is tested for compliance with security requirements?
  7. When operational how is the security of the system managed?
  8. If there is a security issue with the system how are you informed?
  9. What is your process for reporting a security breach?
  10. Provide an overview of constraints & dependencies for delivery
Assurance Lead
  1. Provide an overview of the testing strategy and framework
  2. Provide an overview of the test coverage on the solution and the measures in place
  3. What involvement does assurance have in the code-Review process?
  4. What level of functional testing does assurance perform on the system?
  5. What level of non-functional testing does assurance perform on the system?
  6. What proportion of the testing is automated vs manual?
  7. Does the system have automated test reports and how are they reported to assurance
  8. What is the test plan for penetration testing?
  9. How does assurance get involved with the defect management process?
  10. Does assurance have any input on the architecture of the system?
  11. Once deployed what involvement does Assurance have with the system?
Operations
  1. Provide an overview of the path to live/transition to live process.
  2. When the system is being designed what visibility do you have or need of its functional requirements?
  3. When the system is being designed what visibility do you have or need of any security requirements?
  4. When infrastructure is needed by the Development, Test and support team what is the process they must follow?
  5. How are you informed by development of the build artefacts needed for deployment?
  6. How do you enable or control the provisioning of cloud resources by the development team?
  7. What information do you need regarding the security of the proposed system?
  8. What information do you need about the testing process?
  9. How are deployment details of the Deployment & Configuration process communicated to you?
  10. What is the process for post-deployment system testing?
  11. How is performance and systems failure reported?
  12. What are the Monitoring processes and how & what is reported?
  13. If the system has a bug how is it reported and who does the repair work?
  14. What are the system’s supported hours?
  15. What is the systems supported availability?
  16. What is the DR plan for the system?
  17. When in operation does development have access to the system to perform fault analysis?

 Have fun!

Tuesday, 3 May 2016

Word of the Day - JBoss

JBoss is a division of Red Hat that provides support for the JBoss open source application server program and related middleware services marketed under the JBoss Enterprise Middleware brand. JBoss is an open source alternative to commercial offerings from IBM WebSphere and SAP NetWeaver.

Red Hat JBoss products are available through a subscription model that includes technical support and long-term maintenance. JBoss products include:

  • JBoss EAP - an enterprise application platform for building, deploying and hosting Java applications and services. 
  • JBoss Web Server - a Web server built on Apache and Tomcat.
  • JBoss Data Grid - an in-memory distributed database.
  • JBoss Developer Studio - an Eclipse-based integrated development environment (IDE).
  • JBoss Operations Network - a systems management suite for JBoss application environments.
  • JBoss Fuse - a modular integration platform with an enterprise service bus (ESB) to support hybrid and public cloud deployments. 
  • JBoss A-MQ - a lightweight messaging platform.
  • JBoss Data Virtualization - a data virtualization service that allows multiple data sources to be viewed and worked with as if they are a single entity.
  • JBoss BRMS - a platform for business rules management, business resource optimization and complex event processing (CEP).
  • JBoss BPM Suite - a platform for business process management (BPM).


Thursday, 4 June 2015

A good book : Software Measurement and Estimation: A Practical Approach

Estimating the size of a software development is a black art.
This book attempts to put some science onto the topic.

It attempts to give you methods for determining how big your project is compared to others, what is your code quality like and how efficient are your developers.

It contains many gems such as the relative inefficiencies of coding in different languages. For example VB has a "gear ration" of 42 while java & C# have a GR of 59 which means you must write 40% (59/24=1.41) more code to perform the same task in C# or Java. Which shouldn't come as a surprise to any one.

It even suggests that once you get a couple of projects into a development you might be able to develop a ratio between your specification size (user stories) and the number of NLOC (none-commented lines of code). A wooly estimate but perhaps a usefull one if pushed for an estimate, by a manager.

It goes on to argue that while LOC can be measured easily it is Functional Point Analysis (FPA) which will perhaps yield the best estimation results.
To me this is a better approach as it ties in with the Agile use of User Stories which can be estimated into their relative difficulties. However in Scrum the developers tend to use planning poker which is a method I am not personally in favor of as I prefer a more empirical approach and the use of historical data (see this post on using historical data).

The next stage this book suggests is then converting your Functional points to LOC (which is useful if parts are using different tech) and comparing it to your historical results ie your productivity.

The point here is DON'T GUESS!

Work it out!


"When you can measure what you are speaking about, and can express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind." - Lord Kelvin


"Science/It works bitches." - xkcd

Finally some tools to calculate LOC:
And some books:

Software Quality Metrics Overview

Implementing Automated Software Testing - Continuously Track Progress and Adjust Accordingly

A final thought on functional point estimation.

In my experience, the size and complexity of a project is a function of a quite limited number of parameters, that compares from a project to another, whatever the sector or domain area.

Each application usually has a bit of specificity in some way (workflow complexity, external connection challenges, dynamic user interfaces, customized advanced business calculations or multi-tenancy for SaaS applications), so you can determine the impact that element has in terms of development cost is relatively constant from a project to another.

When determining the complexity of the project you combine several complexity factors, you may also find ratios that help you deal with this complexity and you should be able to evaluate a project based on the following numbers:
  • number of entities
  • number of simple business rules
  • number of advanced business rules (cross-entity for example)
  • number of user interface elements (screens, web pages)
  • number of reports
  • number of external interfaces
  • number of batch calculations or processes
  • number of technology variations for components (rich-client, web page, mobile, database providers, cloud systems
These numbers must then be combined with an uncertainty level to create a range for use with three point estimation.

But more on that an other day.!



Friday, 17 January 2014

Class package naming and a more pragmatic approach to MVC.

During a trawl of posts on a software development postings on LinkedIn (or some where) I stumbled across a blog post that set me thinking.
A typical collaboration of the MVC components
We have all be come very familiar with the concept of Model-View-Controller (MVC), that I think as developers we don't give it any more thought and when it doesn't really fit what we are doing we blithely continue.
So after some thought I thought I would annotate some of my current thoughts.
Microsoft tinkered with the pattern when they talked about MVVM and MVP but they are basicly just variants on MVC and not clearly adopted outside their software.

So the alternates with my favourite last:

Business Process and Data with MVC (Model-View-Controller)

In her blog Lea Hayes talks about using MVC but adopts the concept of splitting the model part into a business process and data [See blog].
This is a nice idea as it shows how to consider a controller that actually does a task instead of just going directly to a view.

Unfortunately this approach does not absolutly resolve all the issues as it relegates the controller to the role of "postman" or router. It also does not address what happens when the service has changed the data. 
It also has no good monika to remember it by ... MS-VC ... nope!
Lea Hayes included a link on her blog to a second concept...

'VESPA': A better MVC


This post on a further varient from Bennett McElwee's blog to me offers more promise as sooner than redefining the paradigm as MVVM and MVP do, it adds definition to the elements of MVC.  I agree largely with VESPA but I have only one refefinition (see later).
The Original VESPA pattern
What VESPA does is to refactor sooner than to redefine the MVC pattern.
The reasoning is that as a designer you can communicate the MVC pattern to your developers but you may need to add some definition to how they start coding.
Essentially you break the M & C into four parts and effectively create a M=(SE) & C=(AP) which gives us SE-V-AP ... or rearranged as VESPA so you can communicate it.
But what are the parts:

The Model becomes "Store" and "Entity"

In MVC data is still stored and used on a view but there may not be a direct 1-1 mapping between stored data and the entities shown on the views. Which is where the MVVM comes in.
In VESPA your Store classes deal with persisting your data and contain any business logic on how to combine elements.
The Entity classes are those that are presented on the view but are not stored, they are however responsible for collating Store objects into a usable form.
An example of StoreB objects could be a set of JAXB objects talking to a web service, while the Entities  are a set of POJOs that are used to place a degree of separation between the application and the data sources.

The controller becomes "Action" and "Presenter"

In MVC the controller is still in charge but there are two variants.
There is the Presenter which is the simple "mail-man" controller I spoke of earlier. It just finds the data entities and passes it to the view.
The other type is the Action, which is called "Actor" in the original VESPA but for me this conflicts with the Actor term from UML [See]. It is also similar to the "Service" Lea Hayes speaks about, but I think it is more of a controller concept.

My input to VESPA

My input to VESPA
I agree with the original concept of VESPA 95% and I am adopting it into my projects.
My differences from the original are:
  1. Its Action not "Actor";
  2. The Action and Presenter only deal with the Entities.

Class packages and VESPA

Finally being a bit anal about package naming I would break down the classes into the following packages so you can find them.
Using a base package of mcnought.myproject you get:
  • Actors are in mcnought.myproject.controller.actor;
  • Presenters are in mcnought.myproject.controller.presenter;
  • Stores are in mcnought.myproject.model.store;
  • Entities are in mcnought.myproject.model.entities;
  • View are in mcnought.myproject.view.
I hope this helps you.