(Sorry about the click-bait title)
There are literally dozens of technical decisions that must be, or can be made to develop an application. The question is when and how those decisions should be made if we want to get a high quality product to market most quickly. We maintain a predetermined list of technologies suitable for immediately starting development on nearly any application of interest to our client businesses and their customers and end users.
The prototyping application development approach reduces costs and delivers faster because many use cases and business questions are elaborated and addressed early in the design. This drives the set of features and enables filling the product backlog with perfect user stories-- i.e. ones which are easily understandable, discrete, independent, testable, and most importantly, small.
But prototype-powered development requires that developers are ready on day zero with a toolbox of reliable and high performance frameworks, components, patterns, and other technologies. This lets us spend all our time concentrating on the business and the user experience instead of researching, discussing, evaluating, debating, and selecting the technical tool chain.
By "tool" we usually mean a software library or external service providing built-in functionality needed by our application.
Criteria for Tool Selection
Replaceable
We must able to replace one tool with another without weeks of refactoring and programming. The scope of a tool should be such that we would replace it with another for a single reason. The only technical components exempt from this requirement are hosting platforms (e.g. Azure), programming languages, and frameworks (e.g. .NET).
Popular
We select only those tools that have also been selected by many thousands of other developers so that when development or deployment challenges are encountered, information on how to solve these problems can easily by found. Developers are either already experienced with, or eager to master the use of popular tools and components for career development reasons. Popular tools have documentation are often of higher quality; open source tools contain unit tests and usage examples.
Easily Integrated
By selecting a platform and framework, we typically get many tools "out of the box" that we won't need to individually install and configure. There should be a clear path for consuming lower level components, services, tools and libraries into our application.
Important
We integrate external tools or component instead of writing our own implementation especially when the tools have many possibilities for reuse, and are designed to solve complex generic problems with many possibly many edge cases.
As of April 2023, here is our current list of default tool/platform choices we show up with on day zero. with the expectation of each slashing many hours of precious development time from our prototypes and, ideally, our production applications:
Purpose/Vertical |
Component/Platform |
Cloud PaaS |
Azure |
CMS |
Wordpress/Peachpie |
CSS Framework |
Bootstrap |
Database (RDBMS) |
MySql, Connector/NET |
DI Container |
.NET 8 |
Domain/DTO Mapping |
Mapperly |
HTML embedded text editor |
SummerNote |
HTML/Js Data Grid |
ParamQuery |
Image Storage |
ImageKit.io |
Mobile App Type |
Progressive Web App |
ORM |
Dapper |
Payment Gateway/ecommerce |
Authorize.net |
Performance/Timing |
Benchmark.net |
PM Framework |
Scrum |
Project Management |
Azure DevOps |
Server OS |
Linux |
Service Testing |
VS (v17.5+) |
Services Framework |
Azure Functions |
Site/Health Monitoring |
Montastic |
SOA Service Bus |
Azure Service Bus |
Source Control |
Git |
SPA Framework |
Blazor Server |
Unit Testing |
xUnit |
Web/Services Server |
Kestrel |
Takeaway
To get started on a new project, it's important to have a list of "go to" tools and technologies that you've evaluated and selected beforehand to avoid spending a lot of time deliberating over these decisions at the customer's expense early in the project when it's important to show rapid progress. However, it is important to always stay up-to-date with, and informed of, trends, updates, and new options so that your list will be periodically updated.