Consulting 101
What’s keeping CEOs up at night?
Executives worry about remaining competitive when the business environment changes all around them – including new technologies, new competitors, new business models, and challenging customer loyalty. All play a role in disrupting the status quo.
Why hire a consultant?
A consultant helps the customer succeed over issues and challenges they may have, including helping clients:
- Work on the critical business data and providing insights the client has trouble uncovering
- Change business models, organizational structures and their operations so they can thrive today and in the future
- Keep pace with emerging technology and manage disruption
- Uniting the front client-facing office with the middle and back offices
- Become more technology conversant with clients, convert key trends in technology into meaningful value
- Embrace continuous change
- Take on less of an internal view, more of joint ventures and collaborations
The reason consultants charge high rates is because they need to be correct all of the time, tackling the difficult problems quickly and at a high level of quality that the client either does not have the skill, experience, or resources to do. In order to perform, the consultant must be more receptive to the client than even their employees, be able to quickly learn the intricate knowledge regarding the client’s services and entire systems, and effectively utilize proven methodologies in handling the problem(s) the client faces. Consultants aim to understand the entire Enterprise Architecture – how an organization goes about achieving its strategic goals, including their architectures of: risk and compliance, business, applications, data, infrastructure, and security.
Importance of Data
Information, that is, data which is processed and contextualized, benefits management planning and decision-making. Adding a layer of visualizations helps us contextualize, allowing for better clarity and understanding of data and trends, through added capabilities of higher level analysis. As a system, in order for data to propel us towards insights and consequently better decisions, we need collaboration – someone to lead and make sure we ingest the data, aggregate and store it, and visualize it (for ourselves and shared analytics for other parties). Then, someone to exploit the data.
Ultimately, in order to support the development and usage of data’s information to drive decisions, we need:
- The right tools
- The right people (expertise)
- The right organizational structure (bringing the different skillsets together)
- A culture of proactive collaboration at all levels
It’s not the tools that are usually the problem, but needed are the right organizational structure and the right people (expertise), to both support the data and its usage. In other words, the problem is usually not the tech, the challenge is changing the culture and processes to allow people to work harder to allow data to inform ourselves, so we can utilize it to drive decisions.
Other: Gartner analyst, Doug Laney, published a research paper entitled “3D Data Mangement: Controlling Data Volume, Velocity, and Variety” – These are the 3 Vs which are the generally-accepted dimensions of big data (coined in 2001).
Overview of Data Analytics Implementation
Data Quality and Other Goals/Tools for Development
- Aim for more data
- Include the confidence level of the data, data should be highly structured and organized
- Understand what type of analysis of your data will benefit the public the most – Descriptive (describing the data) vs Predictive (predicting future data, inductive reasoning) vs Prescriptive (predicting outcomes of decisions). Ideal method of predictive and prescriptive is usually inductive reasoning (starting with the data and creating a theory/hypothesis based on it) vs deductive (starting with a hypothesis and coming to a conclusion).
- Develop visualizations
- Be iterative – better to redesign (or re-use materials) 30x to learn from failures than spend everything building one complex design
Another idea is to empower the people with the information instead of forcing them through a process. Why teach them the FAR (Federal Acquisition Regulation)? Just give them the history of the money spent on a specific topic, so they can better make the decision of what research to spend current money on.
Behavioural Change Management
Change management is more important than ever in this world of global trends driving constant change – the world has become a more VUCA place – volatile, uncertain, complex, and ambiguous. Organizations need to be able to constantly react and adapt.
KPMG’s four phase structure is to make sure business results are realized, disruption is minimized, and people are put at the heart of the change agenda:
- Make it Known: Determine and communicate the change vision and case for change
- Make it Real: Translate the vision into reality for the people in the organization and define what it means for them
- Make it Happen: Move the organization towards the end state
- Make it Stick: Aligning policies and determining if the organization is ready to push the change forward sustainably
Example: Necessity for Re-organization – In offices where people perform too many types of complex tasks, it may be valuable to re-organize and set people to be more specialized, dedicating them to certain tasks. This releases the pressure valve, as too many complex tasks will overwhelm and slow down people (switching gears between tasks) and hinder people from becoming experts at their jobs, only becoming “masters of none”. In these complex systems, if people are given and stay in their specialized lanes, things move more efficiently. Roles should be rotated regularly (e.g. every year or two) in order for everyone to learn all aspects of the system.
Regarding Intelligent Automation and Efficiency – More efficiency gives us more downtime. Downtime is good; it gives us time to improve things, communicate with others and focus on strategy.
Data Security and Openness
It is important for data to be both secure (protect people) but also shared (allow more researchers to find insights in the data and consequently benefit the public). It is difficult to focus on both, but completely possible. You address privacy and security at the beginning, assess value and risk, but never look at security and data openness as two goals in tension. When data is more secure with less breaches, the more institutions and the people who lead them are willing to be open with their data. It is also important to be transparent with the public of what we are not releasing, being transparent with what we have at the lowest level.
To encourage data to be shared, it is up to the people consuming the data (users) to both prove the data is secure and to prove that it will provide value, because those are the two biggest excuses institutions use for not sharing their data (unsecure and won’t provide value). Incentivizing can also boost data availability, such as in the field of research, if we monetize data citations instead of only publications, this will encourage sharing of data instead of encouraging withholding data in development to maintain data rights.
To enable the data to be shared, systems should be constructed with Service Oriented Architecture –> have APIs → build a library around them and build a unique user base.
Machine Learning and Deep Learning
Procedural oriented programming is divided by functions and is more of a top-down approach, as opposed to object oriented programming which is divided by objects (e.g. within class types) and is a bottom-up approach. Object oriented has better security (access specifiers e.g. public/private/protected), and is easier for adding data and functions, In addition, languages like Java can be compiled and then used on any platform. Examples of procedural oriented languages include C, FORTRAN, Pascal, Basic, and object oriented languages include C++, Java, Python, C#.
By contrast, scripting languages automate certain tasks in a program or extract info from a data set, without a manual compilation step, and are less code intensive (e.g. JavaScript, PHP, Python, VBScript).
In functional programming, all functions have inputs and outputs. Higher order programming is where functions are also inputs and outputs to other functions. Machine Learning is programming where examples are used instead of explicit instructions, sometimes called “Software 2.0”. Examples: Pandora finds patterns nuanced enough to make a prediction of what music a person likes, or an image software that can recognize what types of objects are in pictures (i.e. auto-generating object category keywords for a Stock Photo website). In other words, machine learning is where each instance in a dataset is described by a set of features or attributes.
Algorithm Types of Machine Learning
Algorithms are considered supervised if the desired output is already known, unsupervised if there are no target outputs.
- Clustering Algorithms (Unsupervised Learning) – If we do not understand the data and want to group the data points to better understand trends and relationships.
- Decision trees (Supervised Learning: Classification) – If we need to classify objects or categories based on their historical classifications and attributes. Can also be used for regression.
- Linear Regression (Supervised Learning: Regression) – The first algorithm learned by most machine learning professionals. If we want to predict numbers before they occur, then regression methods are used, and linear is the most common.
Deep Learning is a type of machine learning that works well for certain cases. Deep Learning is where we focus on the internal implementation of how a system is learning, where there are layers of intermediate representations. In other words, the data is transformed at different levels (machine itself extracts features or attributes from raw data).
- Neural networks (Supervised Learning: Pattern Association or Unsupervised Learning: Classification Association) is the main algorithm type for deep learning – a type of multi-layered learning that involves back propagation. Similar to a decision tree, as it models data with nonlinear relationships and interactions between variables. However, in a neural network, it is difficult to explain and justify how decisions were made, as opposed to the simplicity of a decision tree. “Neural” is not a great word; it is not akin to copying the brain with math formulas. It is more like a child’s iterative learning – for example, a child first learns the difference between a human and an animal. But it still doesn’t know the difference between animals, then he learns that 4 legged creatures are usually animals, but still doesn’t know the difference between horses and dogs. Good for image recognition and time series and audio (in general, recurring things).
Deep Learning Real World Examples
- Working with DARPA and Air Force: Instead of pilots staring at pixels on a cockpit screen, be told what’s on the ground shooting at you without looking.
- Visual field guide for soldiers on the ground – Something bit me – Is it poisonous? Should I go back to base or stay out?
- Agtech – Drones to automatically find where water is saturated and fertilizer is needed.
- Drones detecting in order to fight poachers and track animals.
- Surveillance footage – Instead of human eyes watching them (error prone and expensive), neural net can tell you there was 2 people possibly outside of your house – please review the tapes at the time period.
Project Management Process and Dynamics
The Process
David Kantor -> Structure determines performance like a riverbed determines the flow of river.
- Set needs and goals (gather requirements first)
- Diagnose – do research, set standards, define roles and responsibilities. Talk to lead to figure out how to prioritize and manage people’s expectations of delivery
- Develop stakeholder lists, training, metrics, processes, frameworks
- Implement the idea and execute
Teamwork Principles
- The best teams are both hierarchical and collaborative –> Collaborative for brainstorming and bringing together ideas, knowledge sharing and team efforts. Hierarchical for when it’s time to start converging, when everyone has their role to play in providing an answer for a client.
Other Principles
- Think about things systematically. Always look at the why’s.
- Encourage documentation – It is important not to lose any decisions or insights made in meetings, or lose any industry / process knowledge due to turnover.
- “Make it ugly” – Have meetings saying what’s wrong – no delay in talking about issues and figuring out how to fix them.
Problems for Agility Today – the current Organizational Landscape
In the history of organizational landscapes, developing a fixed process was innovation at those times. Companies now, however, being made up of more processes, develop into increasingly bigger and more complex structures. Tool deliverables and systems also increase in complexity, which left room for agile management to enter the playing field as a cutting-edge methodology for development.
Problem – Due to the landscape most organizations face now is inherently complex, this requires an upward shift in mental complexity of organizational leaders (as an OS needs to get more complex to install more complex applications), and greater agility in leadership. And the issue is, most managers/leaders see complex systems as though they are complicated. But instead, an Agile Leader should have the ability to breakdown systems logically and explain them, in addition to the following skills:
- Outer Skills – Ability to influence others, evoke shared sense making (how we see the world), skills in facilitating/catalyzing, creatively apply domain knowledge, systems thinking skills.
- Inner Skills – Complex meaning making, high emotional intelligence (self awareness / management), clear about and grounded in a sense of purpose, permeable to the perspectives of others (values – what we care about) and self identity (how we see ourselves).
Innovation vs Execution
Both innovation (inventing something that did not exist before) and execution (doing something that’s been done elsewhere) are difficult, for different reasons. In execution is where we find inspiration that could lead to innovation, from getting deep into the weeds of solving a problem.
We must know our mission and product. For example, the products in healthcare are 1) Relationships between the provider and patient, and 2) Information. How we connect them is the execution problem.
Acquisitions and Contracting
Acquisitions & Procurement
- The government employee’s role is to know the range of capabilities in the industry, while the industry partner’s role is to express their capabilities and strengths and weaknesses.
- The problem of contracting is that a contract is a static vehicle but requirements are dynamic (change over time).
Contract Management
- Once active, the dimensions of a contract are: Cost, Schedule, and Performance. Or using different words, the three things that should be in alignment for a successful contract is the funding, mission, and program management.
- On government waste and contracting – If as a contractor, you see money being wasted, then say something. Being driven by money is okay but if you are quiet and you think something is wrong, you are just as complicit if you can’t express your opinion.
Software Development & Testing
A user story is a requirement of capability – written as “As a < type of user >, I want < some goal > so that < some reason >”. In development, requirements should be written as user stories in such a way that the requirement meets INVEST criteria. INVEST means that each requirement written is Independent Negotiable Valuable Estimatable Sized-right and Testable.
During application or system development, testing can be performed either manually or automatically. Manual testing can be expensive and error prone, while automated testing can be cost effective and reliable, if similar testing will be needed repeatedly. Tests are automated by using an appropriate testing framework such as PHPUnit, Mocha, RSpec, for uses of PHP, Javascript, and Ruby respectively. And with a continuous integration server like Bamboo or use a cloud service like Bitbucket Pipelines, tests can be made to automatically execute when new changes are pushed to the main repository. The V-Model of Software Development and testing descriptions are below:
Testing during development:
- Unit Testing – Testing a low level code snippet to see if it functions as intended, i.e. in the code source, testing individual methods and functions of the classes, components or modules used by the application. Cheap to automate.
- Integration Testing – Verifying that different modules or services used by the application work together as expected, such as interactions with the database or microservices.
- Functional (System) Testing – After unit and integration testing, verifying the key business requirements of an integrated application to see that they are working. Functional testing is only about the output of the actions (unlike integration testing which is the interfacing actions that occur in between).
- Performance Testing – Testing the system under significant load, such as when executing a higher number of requests or using a significant amount of data. Focuses on the reliability, stability, and availability of the platform.
Testing after main development stages:
- Regression Testing – Re-performing unit testing and integration testing from earlier, to verify that no other issues arose after implementation.
- Sanity Testing – Part of regression testing, sanity testing consists of superficially verifying new functionalities and bug fixes in the updated components. Usually not documented. Done before the more rigorous official regression testing is performed.
- Exploratory Testing – Manual testing where the goal is to uncover non-obvious errors. High effort required, but useful to uncover UI issues or verify complex user workflows. Helpful for when a significant new capability is added.
- End-to-end Testing – Performed by development team. Testing by replicating various workflows users would take, for both simple tasks or complex scenarios. Expensive to perform, and difficult to maintain when automated. A few key end-to-end tests usually are worth automating, with lower level types of testing (above) for anything that would break it.
- User Acceptance testing (UAT) – The final tests, performed and documented by the customer or customer’s end user. It consists of validating every scenario in a production-like environment to see if the system satisfies its business requirements. Components are accepted or if goals are not met, rejected. Includes the test types as prescribed by ISO/IEC 25010:2011:
- Smoke (& Functional) Testing – First step before accepting a build. Quick basic testing to check that vital functionalities of the entire application are working as expected, before rigorous testing is done.
- Reliability (& Availability) – Validated with a stress test.
- Performance (& Scalability) – Validated with a load test.
- Operability (Usability) – Validated with an inspection and demonstration. Is the UI configured to liking? Did we put the customer branding in all the right places? Do we have all the fields/screens they asked for?
- Security – Validated by demonstration, and possibly external security audit and/or intrusion testing.
- Compatibility
- Maintainability – Validated by demonstration of how software updates/patches will be delivered.
- Transferability (& Configurability) – Validated by demonstration of the system, that it can be modified for changes in needs.
Miscellaneous Management Advice
Feedback is hard to give, but priceless. Don’t give more than three things for someone to work on, otherwise it tends to be overwhelming and they cannot focus on it.
Be honest with people. People are resilient. Tell them when it’s going to be hard. Manage expectations. I.e. For an airplane delay, tell passengers it will be 8 hours late instead of not giving answers or leading them on, telling them it’ll be delayed a short while.
Stewardship
- Troubleshooting issues – Don’t make issues go 6 levels up the chain before something is fixed, unless necessary. Work on your own and with others closer to your level, as it is a better use of resources.
- People should show leadership at every level -> e.g. if current software is not working sufficiently, the users should push back and say we should be using a different software or tool or update software. They should not allow for issues to occur in order to drive change.
- Send employees to the field, to go and shadow the people they are supporting. Knowledgeable employees are better able to improve systems from within.