Note about this chapter:
The material here is very much in-progress. It's in the process of being transformed into the using the table format that you will see at the first few points. It also misses a lot of details at the moment.
- The relevant aspects of any software technology in influencing the BOU values.
- What to keep your eyes on when optimizing for a given value.
- That's all, but believe me it is a lot
This chapter is going to be a recap of what you have seen so far but with a laser focus on a single aspect, technology attributes. It won't be a boring recounting of the related things, I will draw many new conclusions and in the end of this chapter I will give a complex overview of what to look out for when evaluating a technology.
These are the timeless, general aspects of any software technology. You need specific technical knowledge and expertise in development to know how they map to the exact tool you are considering.
I will start with the most general and important aspects that apply to nearly every kind of technology, followed by the more specific and probably less impactful properties. For each of these points consider their relevancy for the evaluated tool. There will be some second level items in the list which I consider important enough to discuss individually even if they are just a component of a more generic concern. I will show the effects of every factor on all related APIs and highlight their most relevant business effects. It's interesting to see where do these relationships come from. The two starting points are the user and organization values. Combined together they show which financial effects are related. These are documented in Chapter 8 and 12. The affected business values can simply be looked up in Chapter 5 based on the financial factors. The market consequences are already identified in Chapter 8 for each element of the User API.
This is of course the baseline requirement, the technology can fulfill it's intended purpose. This point strictly means it can satisfy the functional requirements you have.
Strongest Business Effects
CX - 5: How it will affect customer experience depends on how much the users need that functionality and how well it delivers that.
Increased sales - 5: Through improved customer engagement and customer advocacy
Functionality - 5: Enables shipping the feature so the product can solve another problem of the users
All - 5: It's the most trivial case, if the product can be built and function that's fact will enable manifesting all the attractors, otherwise there's no product to talk about.
Workload - 3
Complexity - 3: The simpler the solution usually the better
Overproducing - 3: - 1, 2, 3: If It gets unnecessary jobs done
Work-life balance - 2: Based on how well it gets the job done the needed work amount might vary.
It has a license that allows usage on a way that is acceptable for the company. Adopting the tool might require the public sharing of the source code or releasing intellectual or patent rights. In case of 3rd party solutions it might even require a special NDA and precautions around the workplace and the workflows. This usually only happens in business domains like national defense, army, cutting edge scientific research or banking with tools that are forming a major component or basis of a product or even the development work itself. Acceptable conditions enable the usage of the technology. This is so high up on the list because if the legal conditions are unacceptable for the project it rules out the option immediately and unlike with the items down below, in this case we can't do anything about it, because it's an external restriction not an internal concern. Apart from special cases which comes with unusual restrictions it won't have any significant effects on the product and it's creation.
Strongest Business Effects
CX - 2: Through a possibly slower development speed because of confidentiality processes.
Increased Revenue - 5: thanks to delivering the product
Release Frequency - 3
Customer Service - 2: The release cycle can affect the users' perception about the quality of the customer service.
Workload - 1: put in attributions or change terms and conditions or other legal texts
Human Factor - 2
Waiting - 3: - general: If the processes are overly restrictive it can decrease the speed of work
Work efficiency - 3: the restrictions coming with a high security workplace might set back the productivity of developers
BO - 2: Gateway to market
Attitude - 3: the developers might not like the consequences of some strict NDAs
Automation - 4: these two are the most likely to affect the fulfillment of legal obligations
Motion - 3: 1, 2, 4: If the confidentiality processes are ineffective.
Value Match - 4: serious open source advocates might feel conflicted when using proprietary code
The creation, acquisition, operation or usage of the technology should have a good ROI for the project and fit the budget. If it can't do that it's an immediate goner. The most visible costs are that paid for acquiring the tool but there are lots of different aspects:
- Development efficiency: The level of productivity and utilization the tool can provide can seriously affect how much time it takes to implement the solutions. This has direct influence over the costs of development. This is indicated at each property that influences this.
- Salaries: Sometimes the choice can have effects on the salaries of the existing or future employees because their market value might change with their expertise in using the technology. These consequences should be taken into consideration.
- License fees: It might be required to pay a license fee or royalty fees for using the product especially when bought from 3rd parties.
- Outsourcing: When the technology is provided by other IT companies to handle parts of or the whole product implementation, it creates additional costs but can save on employee wages.
- Resource usage: Mostly relevant in applications utilizing *aaS solutions (cloud services) where the applications are billed based on the amount of resources they used or when the cost of operating the system is on the provider. The lower the better.
Strongest Business Effects
Workload: to track usage to collect royalty fees, less development work with outsourcing partners, but more with managing them
Career advancement: through the potential salary increase
Meets the expected performance levels. Remember it doesn't always have to be the no. 1 solution in the world in any aspect to suite your project's needs. What it should always do however is delivering a consistent performance that doesn't degrade over time. This category includes the whole spectrum of performance considerations. If the tool is not capable of meeting the project requirements that immediately rules it out.
- Resource constraints: Performance isn't restricted to the speed of execution, it includes high efficiency in the usage of all 5 elementary resources: CPU, memory, storage, network and power. The technology should satisfy all relevant constraints and expectations about these consumptions.
- CPU usage is related to both runtime speed and power usage. Some of the most common technical properties that are relevant includes asynchronous and parallel execution, caching, dedicated hardware acceleration, streaming and batching.
- Memory consumption is mostly relevant for system with low RAM size, or when the usage becomes excessively high even for standard capacities. It's mostly typical for design or editing software, games, scientific data processing and simulations.
- Storage means the size of the technology which is closely related to feature match, resource usage and complexity. The size of the tool can affect the resources needed to use it, the time it takes to deliver and load the application and it's directly connected to the amount of features it has. The usual rule is: the smaller the better. The other important property of storage is the speed of data access.
- Network traffic load is irrelevant for certain types of software, but for distributed systems and web applications it can become an important factor for both the user experience and the incurred data usage costs.
- Power consumption became an important aspect for software running on mobile devices in the last decade, for other platforms it's often not as impactful but in cases like crypto currency mining it can became a significant factor nonetheless.
- Loading time: This is relevant in the case of initial downloading, updating or while using the product. Minimizing loading time or parallelizing its execution is always a good UX improvement that's in the hands of developers.
Financial: CX, Productivity - If performance optimization becomes a priority the required effort to increase it might lower or boost the developers productivity depending on the starting situation and how easy it is to achieve the targeted levels with the technology. Business values: Increase and Protect Revenue, Reduce Costs Strongest business effects: Higher revenue through increased number of sales thanks to the improved user experience and customer satisfaction User: UX, Price - Meaning not the price of the product but the total costs for the user, because the involved resource usage might affect how much they have to pay for their utilities. Market: Fast, High quality, User friendly Organization: Workload, Attitude - If the provided performance is not as good as it should be but the tool is still adopted or then the work to somehow speed it up will add to the workload, which can be a minor or even a major increase depending on the technology and requirements. Creating really performance focused software in general means more work compared to when it's not a crucial aspect. Work types: Research, Planning, Reporting, Communicating, Coding, Reviewing, Learning Control Concerns: Wastes: Developer: Professional preference - Many developers are personally attached to using the fastest solutions available even if it's unjustified, because in some sense using the "best" tool is just cool. Career advancement - The final 3 factors share a common aspect. Often the tool with the highest performance happens to be in demand knowledge on the job market. Having experience with it is a great incentive for many to adapt it because it can offer them opportunities to advance in their career. Security - In demand tools are also a good bet for investing into learning them because the positive outlook of their longevity. Hype - The "best" most performant tools usually are also popular in their respective developer communities.
The level of required security varies by project because it's always a trade-off between convenience and cost vs. safety. The provided level of security should be in line with the risks involved for your given situation. In certain critical areas like aviation, if security can't be guaranteed the choice is immediately ruled out.
- Dependencies: Their number and trustworthiness is a major and often overlooked part of a solution's security. When it has lots of external dependencies it is much more vulnerable than a dependency free alternative. When the used packages -or whatever the format is of the 3rd party code- are not well maintained or have other serious risk factors it should be known and accounted for.
- Auditable: If the product needs to be audited by an external authority, consider the consequences of the technology on this area.
Financial: CX, Productivity Business values: All Strongest business effects: Increased sales numbers and customer engagement, through higher trust in the product and better recommendations. User: Functionality, UX, Release Frequency, Price, Support - Ensuring high security often requires adding functionality specifically for that purpose and changing the general workflow in the application with extra steps. Security can create trust in the product, but often becomes annoying to deal with and when it's messed up, the consequences can be disastrous. Making sure the application is secure can add heavy burdens to the development process, slowing down the achievable speed of releasing software. High security usually adds lots of costs for implementing and maintaining the product. Supporting a security sensitive application is also more tedious than in the standard situations, involving lots of extra procedures and steps handling confidentiality and system integrity. Market: Fast - 4, Cheap - 4, High quality - 3, User friendly - 2, Customer Support - 3, - All of these map directly back to what we discussed above. Organization: All - Workload, Attitude, Responsibilities, Processes - Implementing highly secure system is usually considerably more work than providing the same functionality but with no extra attention to this area. This itself will affect the attitude of the developers as it makes everyday work more tedious. In these cases there are usually people specifically designated to handle this area of development and there are processes in place to ensure the security standards are met. Work types: Research, Planning, Reporting, Communicating Process factors: Developer: Professional preference, Work efficiency, Work-life balance, Recognition - Some developers simply prefer the safer solutions, maybe because they are better written, more professional pieces of software. Making sure everything is safe makes work less efficient which might bother people. If there's a sudden new requirement to substantially raise security level it might tip the balance of work and life for team members. Implementing a secure solution or improving it's safety level makes a nice personal achievement that might lead to recognition.
The technology should be able to work together with the other IT system in use at the project. Ideally seamlessly on an officially supported way, but at minimum with some hacks and workarounds. Depending on the technical domain, in practice it manifests as interoperability, compatibility, interfaces, APIs, protocols, event systems, data access and so on. This is also a deal breaker if the other parts of the system can't be changed.
Financial: CX, Productivity, Utilization - if the developers/maintainers of the connected systems need to support the team integrating the new technology, their utilization will increase perhaps even overloading them. Business values: All Strongest effects: Avoiding and reducing costs by: On time and on budget project delivery, Employee Satisfaction, Lower operational costs, Increased operational efficiency, Reuse of existing assets User: Functionality, UX, Release Frequency, Price - If it can't be integrated we would lose functionality, if it can be it enables the delivery of some capabilities. Integrations can go wrong easily in complex situations so it's likely to increase bug counts creating a worse user experience. Depending on how hard the integration is and how strongly dependent are the parts, it might be necessary to alter the normal release schedule. Price can be affected again by the complexity of integration through the resulting amount of work. Market: Fast, Cheap, High Quality, Customer Service - The quality of integration can affect many of these properties, the application speed often depends on the speed of communication between the sub systems. The reliability of their connections can affect the quality of the product. Price and Customer Service simply follow from the previous descriptions. Organization: All Workload - The level of support for the integration with the in use technologies will greatly affect the amount of work necessary to put the new tool to use and the number of issues to resolve after adoption. Attitude - The ease of integration and the possible role change will make a difference here. Responsibilities - There are situations when certain people get the dedicated responsibility of coordinating the integration between the different teams developing/maintaining the parts to be connected. Processes - If teams need to coordinate their efforts to get a new tool integrated it's likely to affect the in place processes. Developer: Professional preference - Most likely it will be affected by the level of official support for integration with the technologies in use Personal attachment- Can be a factor if the personal connections between the different developers collaborating in the integration tasks are not neutral Work-life balance - The standard effects of workload change Work efficiency - For the same reason as professional preference Recognition - Besides taking credit for a job well done, coordinating tasks across developers in a collaborative situation can be a stepping stone in many organization for career advancement
- Customizable: In the context of both the design and functionality of the resulting software. For the first case, the technology should support being configured or tweaked to fit the desired brand identity in all relevant aspects. That can mean how the product looks but also how it feels to use it. Another really important factor is how much work does it take to reach the intended design and non functional requirements. Do you need to use/find workarounds or does it offer a streamlined path? If a technology can't confirm to brand identity that will immediately rule it out. In the second case the functionality of the solutions should be extensible by the developers.
- Extensible: This means an officially supported way to extend the capabilities of the technology with integrated 3rd party solutions like plugins, add-ons, packages, etc...
- Theming: It might offer and officially supported way to globally modify the design of the software built with the technology.
Financial: CX - 5, Productivity - 3, Utilization - 3: If the brand is clearly recognizable and familiar, the users will trust the product. This way it's an entry point to usage. In line with how much you have to fight the tool to make the software look as it's intended, the productivity of the developers will be impacted. When it's easy to customize or extend the functionality the tech provides that increases the utilization of the tool. Business values: All Strongest business effects: Increased customer trust and engagement - 3, Fewer developer hours - 2 User: Functionality - 3, UX - 5, Release frequency - 1, Price - 3 Market: Cheap - 2, High quality - 3, - brand conformity usually invokes the quality associated with them, so it will affect how the customers perceive the software. Organization: Workload, Attitude - Workload will change according to how well customization is supported and how much of that should be done. Attitude is mostly influenced by how easy it is to get the tasks done. Developer: Work-Life Balance - 1, Work efficiency - 3, Recognition - 1 - The first two are simply follows the previously discussed reasons, recognition is here for the standard reason, when productivity is affected in a positive way there's a chance for personal achievements that can lead to recognition.
- Reliability: This is a composite category, relevant for distributed systems, it involves all aspects that make the system operational over time. If any of them can't meet the project requirements the technology is out of consideration. Most of the attributes guaranteeing reliability affect the costs of operating or developing the system which should be evaluated under the Costs property.
- Scalability: It should be able to serve the targeted workload and keep up with it's speed of change all while efficiently utilizing the system resources, meaning it should keep the allocated and used resources proportional to the current load.
- Availability: The percentage of time the system is accessible by the users in a given time frame, usually a year.
- Fault tolerance: How well the system handles operational errors. Ideally it should be able to auto recover, log the event and alert the maintainers but the minimum requirement is the ability to degrade service quality proportionally to the severity of the issues instead of crashing the whole system because of minor exceptions.
- Data integrity: The level of safety the tool can guarantee regarding the storage of data, how up to date it is and how consistently can it be accessed. Related practical considerations are backups, redundant storage, transactional updates data synchronization and sharding.
Financial: CX - 5, Productivity - 2 - It is a prerequisite for accessing the product. That way it's a fundamental part of the real user experience. Besides that, it's a major part of PASS that is the most significant way we contribute to UX. Productivity will be affected because many developers prefer to work on highly reliable systems as the opposite often makes their work a pain. Business values: Increase and Protect Revenue, Reduce Costs Strongest effects: Increased revenue through higher customer satisfaction and customer loyalty. Increased product and company reputation. Increased employee engagement. Higher development costs. User: Functionality, UX, Price - It's a prerequisite to access the functionality. Outages are a major blow to UX. The cost of systems with high level reliability are usually much higher. Market: Fast - 5, Cheap - 4, High Quality - 4, Luxurious - 5 - Scalability is a major factor in the speed of the system, Cheap and High Quality directly follow Price and UX, the impression of luxury the software makes can be severely deteriorated by outages. Organization: Workload - 4, Attitude - 3, Responsibilities - 5, Processes -5 - It is much more work to design and develop these kind of systems. It can really motivate developers when they can create this kind of high end solution. Handling all these aspects will require more focus and expertise on them, that most likely affects the responsibilities of many developers. Ensuring reliability and operating these systems will create and affect a lot of processes. Developer: Career advancement, Recognition, Security, Hype, Work-Life balance, Professional preference - When experience working on highly reliable systems is an in demand skill it can open up new career opportunities. Increasing the reliability of a product can be a very impactful achievement, helping to gain recognition and promotion. This seems to be a long lasting challenge for and while that's true, it will offer job security and because it's still an ongoing optimization effort many cutting edge innovations focus on this area creating hype around it. Work life balance can always be disturbed by anything that change the workload including this. The developers might prefer using technologies with high reliability for various professional reason, including the lower expected number of production issues they need to resolve and the decreased effort needed to for implementing a reliable solution.
- Accessibility: The tech supports usage by the intended user groups. This is another enabling factor if the product targets a market segment that requires special care, but it's not relevant for every kind of technology nor for every business case. Most commonly this means enabling impaired or disabled people to use the application but it can be interpreted in a broader sense to destroy any barriers of usage.
- Internationalization: Can handle all the language differences like: character sets, writing directions, number and date formats, metrics and currencies, etc...
- Price: The total cost of the product can gate people under a certain level of income from using it.
Financial: CX - 5, Productivity - 1, Business Opportunities - 3 - This enables reaching a new audience so it's the basis of their customer experience but it might require extra development effort that can impede the general productivity of the programmers. Business values: All Strongest effects: Increasing revenue by reaching a new market segment or meeting regulatory obligations, Increased development costs User: Functionality - 2, UX - 5, Price - 2, Community - 3, Release Frequency - 1 Market: High Quality - 5, Fast - 3, Cheap - 2, Custom Service - 1 - It can also affect the speed and convenience of usage for the disabled. Organization: Workload, Attitude, Responsibilities, Processes - It will most likely involve additional work to fully support accessibility in the product, that can of course affect the attitude of developers. Focusing on this support might create a few extra tasks to handle it, changing the responsibilities of some people. At least the development and testing workflows will be changed because the checking of accessibility but many more processes can be affected. Developer: Work Efficiency, Work-Life Balance, Career Advancement, Safety - More and more companies ask for experience creating accessible user interfaces from the relevant developers so working with a tool that supports it might become a step in their career advancement and increase their job market viability.
- Problem fit: It's the right tool for the task. You know the popular anecdote with the hammer the nail, the screwdriver and the screw. Picking an unintended combination might work but it will be painful to use and the results will be sub-par. The same goes with any software technology and problem domain. You need expertise to make good choices in this sense but always make sure to evaluate the alternatives because a bad fit will lead to a lot of trouble including work becoming a pain for the developers.
Financial: CX, Productivity - I think it's straightforward from the general description. Business values: All Strongest effects: User: UX - the achievable quality might be lacing compared to the normal expectations because limitations of the tool Price - you will need to reinvent the wheel multiple times when the tool doesn't match the problem leading to a much costlier implementation. Support - It will be much harder and slower to resolve issues using a mismatching tool Release frequency- Low work efficiency can result in suboptimal release frequency. Market: User friendly, High quality, Customer service Organization: Workload, Attitude Developer: Professional preference, Work efficiency, Work-life balance, Recognition - common for every productivity influencing factor, if something can increase your productivity, it offers a chance to gain recognition for the increased performance you can achieve using it, so it's always and incentive for choosing a tool that offers better productivity.
- Organizational fit: Meaning it is well aligned with the structure and processes of the organization, it's compatible with the existing IT infrastructure and well aligned with the employees' skillset. Ideally increasing or at least not decreasing their utilization and productivity while working with the technology. When it's not possible, getting the necessary resources (skills, training, hardware and software) should ultimately pay out for the company.
- Outsourcing: It's a special case to consider here, because it can create lots of changes in the processes and responsibilities.
- Scalability: In an organizational sense scalability means the technology can be easily adopted by a huge number of development teams while keeping both their individual and coordinated work efficient or even improving it. It can be a major factor in deciding for or against a tool at large companies or on complex projects.
- Consistency: If there are company wide standards enforced over different projects the adoption of the technology should not hinder those efforts. It should be able to consistently follow the established rules or it's Introduction should change the rules for the better.
- Learning curve: The time it takes for the developers to become productive using the tool. This is an organizational aspect because it depends heavily on the current knowledge and experience level of the employees but of course the complexity, support and maturity of the tool are also main factors, but that is explored elsewhere.
Financial: Productivity, Utilization Business values: All Strongest effects: User: Price - If things require a drastic readjustment of some organizational aspects it can have an effect even on the final price tag, both in positive and negative directions. Release frequency- because aligning with an outsourcing partner's processes can affect the speed and flexibility of product development or other productivity changes can influence it. Market: Cheap, High quality, Customer Service Organization: All Workload - the more it diverges from the in-place resources, the more work is needed to get it integrated. Attitude - as it might mean changes in the lives of the developers. Responsibilities - when utilization is very low, new employees might be needed on the project possibly changing even the existing roles. Working with 3rd parties might require new roles in coordination. Processes - if it doesn't fit well with the infrastructure, the used development, testing, deployment or other organizational processes the existing situation might need to be changed. Developer: Career advancement, Challenges, Security, Work efficiency, Work-life balance - all of these are involved, because of how familiar the devs are with the technology and how much they have to work with it can influence their performance, expertise, workload and plans for the future. Security is double affected, because the adoption of a totally unfamiliar tool can change the outlook of their relevance to the company and a new outsourcing partner can impose the same potential threat. Recognition -
- Maturity: If the technology is well established, meaning it's used in many products, backed by stable companies or other reliable sources of founding, and is in active development. In summary it has proven itself and have a positive future outlook.
- High quality codebase: The tool's code quality it's very important when you have to dive into debugging the inner working of the technology or simply need to better understand it. This property usually scales with maturity.
- Bug free: As much as reasonably possible because there's nearly no perfect code out there.
- Established standards and best practices: The strengths and weaknesses of the technology are well know and the ways how to utilize the pros and mitigate the cons are well documented and easy to understand.
- Ecosystem: The amount and quality of customization, extensions, tooling, support and services offered by 3rd parties besides the official authors. These might mean among many options: widgets, plugins, packages, templates, libraries, meta frameworks or consulting, operation and maintenance services or the creation of entire products using the technology.
- Training: The number and quality of available training material. The more varied the formats and authors are the better. Meaning blog posts, videos, podcasts, from the original creators and other experts, etc... All knowledge levels should be covered, from getting started guides for absolute beginners to really advanced specific topics.
Financial: Productivity, CX - customer experience is affected by the number of generated issues which should be drastically less when using a mature technology. The available training material should help with the learning curve, increasing overall productivity. Business values: All Strongest effects: User: UX, Price Market: Cheap, High quality Organization: Workload - the technology's code quality and a wide selection of 3rd party solutions can drastically lower the work required to deliver the product, also the adoption of a mature tool is much less likely to create a lot of bugs or production issues so it should lead to minimal extra support work. Attitude - most developers prefers to work with mature tools Processes - the established standards might prescribe a new type of workflow Developer: Professional preference, Work efficiency, Work-life balance, Security, Recognition, Career Advancement
- Support: We already mentioned active development and positive outlook in the Maturity category. This is not a 100% clean situation because those are properties of the support the tech enjoys. In this sense Support is closely related with Maturity which makes sense, but it's not simply a part of that category. Support means the technology is maintained, developed and will continue to be in the foreseeable future. It has many components and aspects.
- Provider: Who creates the tool? Is it made In-house, by a 3rd party provider or is it an open source solution? All of these put the tech in a very different position regarding the quality and longevity of support it can expect and that needs to be evaluated properly.
- Documentation: The quality and thoroughness of the available documentation is a very important aspect of software support. It can make or break the efficiency of learning to use and adopting the technology. Good findability, practical examples and interactive code samples are especially useful to have.
- Community: The size and helpfulness of the online and offline user groups. Is it easy to find them and get help? Is it easy to contribute? What are the levels of activity and knowledge in the community? Are official maintainers or authors participating? These are some of the most important questions to answer in this regard.
- Roadmap: Is the future direction of product development publicly visible? If yes, how did the past plans matched up with the real delivery dates?
- Involvement: How much are the users of the technology involved in it's development direction? Do the maintainers take public opinion into account regarding their roadmap? What is their track record of being responsive to the community requests?
- Backwards compatibility: Is it usually easy to upgrade to newer versions of the technology? What's the frequency of breaking changes? Are there tools to automate the necessary modifications?
Financial: Productivity, CX - customer experience is affected by the number of generated issues which should be drastically less when using a well supported technology, it helps with learning curve, optimizing overall productivity. Business values: All Strongest effects: Lower cost of quality, ... User: UX - the number of introduced issues affects the usability of software and the experience of the users Release frequency- it might depend on the release cycle of the provider or be affected by the productivity of developers Price - depending on how the level of support affects the productivity of the developers Market: Cheap, Customer Service Organization: All Workload -The level of exploration needed to be done on our own if documentation is lacking, Handling breaking changes, Contribution to open source. Time spent on resolving bugs and issues. Attitude - In general it's more pleasant to work with a well supported technology Responsibilities - Might change if there's a new need to coordinate with 3rd party solution providers Processes - Alignment with 3rd party providers Developer: Professional preference - they might be really enthusiastic if they can become contributors or active members of a community or they simply prefer good support over the adventure of a new and uncertain technology Work efficiency - nobody likes to fight with issues of an unsupported tool instead of moving forward with their tasks Work-life balance - in extreme cases the time required to finish their tasks might be seriously affected by the level of support a tool providers. Typically it happens in the negative way, when most of the helpful factors are totally missing, the opposite effect can only happen when we start from this kind of horrible situation. Security - Investing your time and effort into learning a well supported tool offers much more career safety then the opposite which can affect the developers feelings toward a given technology. Recognition - Career Advancement -
- Popularity: Is it on an upwards or downwards popularity trajectory? Is it easy to hire for or not. Will it stay like that until the planned lifetime of the project? It is usually based on the benefits the tool brings compared to what the similar technologies offer. Some influential properties are performance, size, simplicity, ease of use and the size of the ecosystem.
- Trend setter: If your company has a large enough influence over a certain market, be that a city, region, country, continent or even globally, the adoption of a technology by them can affect the job market, and the choice of other companies in their sphere of influence. That way making the tech more viable and improving the long term popularity of the tool and the benefits coming with it.
- Statistics: Checking the usage statistics of the technology can be a very good indicator for this area. Their package manager, StackOverflow or Google Trends stats are good source for this kind of information among many others.
Financial: Utilization, Productivity, CX, Business Opportunities - Mostly meaning a good utilization of budget by not betting on a tech that no developer will want to work with soon and the increase in productivity gained from the higher employee engagement driven by the hype for the tool. CX is a collateral result of having a normal development process thanks to the available talent. This is an enabling factor. By using a popular tool we can improve the employer branding of the company. Business values: All Strongest effects: User: Release Frequency, Price - cost of labor is affected by skill scarcity Market: Cheap, Customer Service Organization: Attitude Developer: Hype, Security, Professional preference - Everybody likes to use the "best" tool out there because it's "cool" and because it offers a safe bet with an expected long term job market viability.
- Adoption/migration path: It's easy to adopt or migrate to the technology. Whether if that can be done incrementally is often an important aspect. It's introduction should fit the project schedule and roadmap.
Financial: CX, Productivity - It can negatively affect customer experience if the schedule of updates is disrupted. When a technology is only adoptable by a big rewrite that blocks development for a long time this will definitely happen. Not many developers like to rewrite what's already been done or tweak it again just to work with a new version of something. However if the codebase is a mess, people might jump ship on rewriting it without hesitation. Business values: All Strongest effects: Lower risks, Lower cost of delay, On time and on budget delivery, Customer retention User: Release Frequency, Feedback - It can slow down releasing new versions or not affect it at all, it can lead to earlier validation of the idea and show the company response to customer feedback sooner. Market: Customer Service Organization: Workload - Depending on how much of the existing code or infrastructure needs to be changed for adopting the technology Attitude - Based on how hard will it be to transition to using the new tool Processes - The schedule of work might depending on how many people and for how long will need to exclusively work on adoption, which is affected by the support for incremental migration. Developer: Professional preference - Work efficiency - Work-life balance - Recognition - Career Advancement - comes the possibility of recognition for increased productivity
- Developer experience (DX): It should be easy to debug, profile, audit and monitor the resulting software both in development and in production. The results of a code change should be visible as soon as possible. Working with the tech should be efficient in every other relevant way. Support, Maturity and Learning Curve are three important factors in DX but in general anything that influences Attitude contributes to it.
- Tooling: Whether there are or aren't software tools available that help to work with the technology, and if they are useful and reliable or not. Even when there are good quality tools they might not be relevant to you use case. This is a very wide category it can include:
- CLI tools like kick starters, scaffolding, code formatters, codemods
- IDE integration tools that enable syntax highlighting, auto completion or alike.
- Developer tools that help to see the inner workings of the technology during development
Financial: CX - the better support enabled by quicker resolution of issues using the better tools can lead to increased customer loyalty. Productivity - this is the main goal of this category and it's most powerful manifestation, but through the standard indirect consequence of productivity it can further contribute to customer experience Business values: All Strongest effects: Increased profitability through higher delivery performance, Increased employee engagement and retention User: Release frequency- increased productivity can always contribute to more frequent release schedule Support - the developer tools can help a lot in troubleshooting issues. Price - rare and drastic changes can increase profitability so much it might affect the product price Market: Customer Service, Cheap Organization: Workload - Of course it will mean a different amount of effort to get the tasks done depending on the level of productivity the tool enables Attitude - What else would affect our attitude if not developer experience? Processes - It can change the development workflow and it's different subprocesses quite radically. Developer: Professional preference - Most likely developers will prefer the tools that make work easier for them Work efficiency - This is the main goal of improving the developer experience, and because it feels better to be efficient it is naturally more appealing to chose a tool with better DX. Work-life balance - As with every productivity influencing factor, it can make a difference even on this area of the life of developers. Recognition - The standard consequence of productivity and work efficiency improvements apply, namely the chance for personal achievements. Career Advancement - Comes along with productivity and recognition
- Testing: The code and software created with the technology should be easy to test. Preferably there are tools available that help in the creation of every kind of relevant test types. They should be reliable and efficient. It should offer quality support for test and reporting automation.
Financial: CX - 3, Productivity - 3, Utilization - 3 - sufficiently large automation changes can affect the available work capacity the testers have Business values: All Strongest effects: Increase profitability through the productivity gained from the lower impact of production issues on feature delivery. Increased number of sales thanks to higher product quality. Reducing expenses by lowering the costs of quality. User: Functionality - Prevents functional bugs from reaching the users UX - Prevents non functional issues from reaching the users Support - Automated test can help to fix issues with more confidence and more quickly. Price - The final price can be higher due to the costs of the testing or lower thanks to the long term savings created by avoiding production issues. It's many times more costly to fix issues that already reached the users.. Market: Cheap - 2, High Quality - 5, User Friendly - 2, Luxurious - 2, Organization: All Workload - The testing needs to be done and implemented, lowers the support workload by preventing issues Attitude - Depending on the quality of the tools used for testing and the amount of effort required from the developers Responsibilities - What kind of tests are going to be developers responsibility? Manual as well as automated? There should be people responsible for ensuring the tests are created, documented and always executed. Processes - The testing should be formalized and integrated into the normal workflow. When the testing tools or methods change it will likely affect the other dependent processes as well. Developer: Professional preference - How pleasant and efficient is to write tests and executing them depends a lot on the quality of the testing tools and technologies. There are many different approaches and methodologies to testing software and these will lead to the developers forming their own preferences about them. Work efficiency - The tools and processes used for testing have affect on the overall effectiveness of the work. Work-life balance - Because testing either adds to or removes tasks from the developer it can tip the point over in some situation. Recognition - Where the effectiveness of work is at play there's a change to score good points for personal achievements.
- Integration with existing workflows: Which means it's supported by all relevant technologies used in the build, testing and operations pipelines, through all the steps of the development and delivery process, starting from IDE support, code compilation and ending at monitoring and logging. Or if not, how much work is needed to set up the pipelines to work with the tech.
Financial: Productivity (CX, Utilization side effects) Business values: All Strongest effects: Reduce costs by fewer developer hours User: Release Frequency, Price - All productivity improvements affects price, as it can be used to delver the same value with lower costs on the provider's side. The productivity increase usually also manifests as an increase in the speed of development, which can in turn increase the release frequency Market: Cheap, Customer Service Organization: Workload, Attitude Developer: Work Efficiency, Work-Life Balance, Recognition
- Encourages or enforces the creation of high quality code: This mostly applies to frameworks, and libraries. It means the code created while using the technology as it is intended, should meet the definition of high quality. In practice it means using a set of well defined APIs, conventions and patterns, functions or methods and also tools that enforce the application of best practices, like linters.
- Protective measures: Features of the technology or employed practices that prevent programmer errors. Examples are: strong type checking, IDE autocomplete, function input validation.
Financial: Productivity, CX - High quality code usually leads to fewer bugs thus less frustration for the users and greater long term efficiency for the developers. Business values: All Strongest effects: Lower risk, On time and on budget delivery, Increased profitability User: UX, Release Frequency, Price - The price is affected by the lower amount of work needed to handle issues and maintain the codebase. Fewer rewrites and refactors will be necessary, saving on development costs and increasing it's speed. Market: High Quality, Cheap, Customer Service Organization: Workload, Attitude, Processes - Following and enforcing the recommendations can mean development process changes. Developer: Professional Preference, Work Efficiency, Work-Life Balance, Recognition
- Feature match: Besides getting the job done, it doesn't ship with unnecessary code or features, or it's simple to leave out the unused parts from the final product. When that's not possible it shouldn't negatively affect the quality of the product. In a migration situation it can be translated as feature parity with the existing solution. Besides these, it shouldn't focus on properties that are not important for the project like in some cases high performance or security. If it does, at least that focus shouldn't create additional complexity for the developers using the tool.
Financial: CX - 3, Utilization - 2, Productivity - 2, - The excess features can negatively affect the performance of the application. The value you get for the price of the tool is proportional to the number of its features you actually use, influencing the utilization of budget. Productivity might be hindered because of the additional included features through the excessive documentation, harder to navigate codebase and the time it takes to make sure the unneeded parts doesn't impede performance. Business values: All Strongest effects: Reduce costs by better budget utilization, Increased customer satisfaction User: UX - 3, Release frequency - 1, Price - 2 Market: Cheap, Customer Service, High Quality Organization: Workload, Attitude Developer: Professional Preference, Work Efficiency, Work-Life Balance, Recognition
- Reusability: The tool itself or the code created with it can be used again in other contexts than the original target of application, like new projects, screens, functions, paired with different technologies, languages, platforms etc... The support for reuse sometimes is a given based on the nature of the technology but many times it requires conscious effort from the authors to make it possible or effective. The more complete solution the technology provides for a real user need, the more reusable it is in general. So a full fledged product is infinitely reusable because it resolves a whole problem, while a library written for math calculations is only reusable when working with the given language and problem space.
- Cross platform support: One of the most fundamental versions of reusability is support for executing the same program on different platforms, classically on different CPU architectures and operating systems, but it can also mean virtual machines or cloud platforms. The other side of this factor is the lack or poor quality of this multi environment support. It's quite usual to have inconsistencies or issues across platforms for this kind of technologies, however these effects should be evaluated in the context of the Support category,
Financial: Utilization - 5, Productivity - 5, CX - 2 - Productivity is affected by the freed up development capacity not having to do the same task multiple times, but in my experience these gains are used to save on the costs of hiring extra developers instead of getting more work done. However the users can benefit from the reduced prices this enables. Business values: All Strongest effects: Avoiding costs by asset reuse - 5, increasing operational efficiency - 3, higher margins - 3 User: Price - 4, Release Frequency - 3 Market: Cheap - 4, Customer Service - 1, High Quality - 2 Organization: Workload, Attitude, Responsibilities, Processes - Everything can be affected, workload of course can be lowered by only having to implement things once. Attitude is as usual involved as with better reusability comes less work to do. Responsibilities might change based on how many environments does a developer will be tasked to handle. Processes of course can be greatly different compared to when it's not possible to reuse the assets. Developer: Professional Preference, Work Efficiency, Work-Life Balance, Recognition, Career Advancement
- Runtime environments: The environments that support deploying/running the resulting software should meet the project's needs in every relevant aspect like availability, costs, speed, support or having wide user adoption and market reach. In practice it means cloud infrastructure providers, different microchips or micro computers or a choice like whether the applications should be released on Mac or PC, iPhone or Android. This differs from cross platform support because there we talked about whether the evaluated technology enables the resulting software to run on multiple platforms and here we are examining how well the platform itself is capable of serving your use case and business needs.
Financial: Productivity - 3, CX - 3, Business Opportunities - 2 - Depending on how easy it is to work with the environments productivity can be affected. The delivery, update and runtime speeds as well as the system reliability can seriously affect the user experience. The chosen target platforms obviously limit or extend the markets the product is competing on. Business values: All Strongest effects: Lower operational costs, Lower costs of quality, Increased sales User: UX - 4, Price - 4, Release Frequency - 4, Support - 5 - It can literally change the quality of the support you provide through the quality of support available for your environment of choice. Market: Fast, Cheap, High Quality, Customer Service Organization: Workload - 3, Attitude - 3, Responsibilities - 3, Processes -3 - How easy it is to work with the environment affects the workload and attitude of developers. Based on the details of each environment some might involve handling tasks that others doesn't require bringing changes into the responsibilities. Developing and deploying for different environments can change the workflow in various ways. Developer: Professional Preference, Work Efficiency, Work-Life Balance, Career Advancement, Recognition, Safety - Environments with an excessive user base offers much longer expected job market viability.
- User interface: Technologies that offer out of the box UI elements should be evaluated against all UX considerations we discussed, including those that we can't affect as developers. I already described Accessible separately because that is a highly technical aspect, here I describe the collective effects of the rest. The more detailed breakdown is in Chapter 8.
Financial: CX - 5, Productivity - 1 Business values: Increase and Protect Revenue, Reduce Costs Strongest business effects: Higher revenue through increased number of sales thanks to the improved customer satisfaction User: UX - 5, Release Frequency - 1 Market: Fast, User Friendly, High Quality, Luxurious, Cheap Organization: Workload, Attitude - If the quality of the UI elements are lacking but the tool still gets adapted, it will take extra work to get them to an acceptable level. The developers might be inclined to adopt a tool if it's in line with their personal aesthetic taste. Developer: Professional Preference, Work-Life Balance - Based on their own taste and additional workload.
- Complexity: How simple or complex the technology is. On the most basic level it's affected by the number of concepts and building blocks the tool uses. The complexity level usually reflects the complexity of the problem the technology is trying to solve and the knowledge and experience of it's creators. Developer productivity and code maintainability is heavily impacted by this factor. Sometimes a complex solution offers a more comprehensive set of tools to handle a problem category than simple but more narrow in scope tools, which might be better suited for some use cases than others. It often becomes a trade-off between a well supported, but fixed, official way to do things vs. the freedom of choice often enabling the usage of innovative but less mature new approaches.
Financial: Productivity - 4 Business values: All Strongest effects: Better delivery performance enabled by increased development efficiency. User: Release Frequency, Price, Support - Complexity can speed up or slow down development affecting the time it takes to release the software, the costs of development and the speed of resolving issues. Market: Cheap, Customer Service Organization: Workload, Attitude, Processes - Processes are affected because the level of complexity sometimes involves additional tooling that needs to be integrated into the workflows or simply because it needs more time review and ensure high quality results. Developer: Professional preference, Work efficiency, Work-Life balance - They might like the approach of a more complex, more standardized tool set or prefer the freedom of choice. Work related consequences follow from productivity and workload as standard.
- Learning curve: How long does it take to become productive when adopting the technology for the first time. It's a composition of many factors as I already indicated at other properties, but most importantly it depends on the complexity of the tech, the level of it's maturity and support and how familiar the developers are with it.
Financial: Productivity, Utilization Business values: All Strongest effects: Better delivery performance enabled by increased development efficiency. Faster time to market that enables validation of ideas. User: Release Frequency, Support Market: Customer Service Organization: Workload, Attitude, Responsibilities, Processes - How easy it is to learn using the tool affects how much time it takes away from other work. It can of course make the process a smooth experience or a pain for the developers affecting their attitude towards the technology. If somebody has more experience they might need to pick up a new responsibility to help others adopting it. While that's in progress regular work processes might need to be adjusted. Developer: Professional Preference, Work efficiency, Work-Life balance, Recognition, Career advancement, Challenges - Ease of learning is a component of professional preference. The ramp up process will affect the efficiency of work, which can tip the balance of work life balance in any direction. Teaching a new tool to other colleagues or picking it up quickly are two good ways to earn recognition and potentially better chances of promotion. Learning a technology might just offer the challenge a developer is looking for.
- Safety : for the people and environment