The art of making the right technical decisions
Every technology-driven business, no matter the size, needs the right technical and architectural experience to choose their technology stack effectively and balance the present and the future of their software product.
For companies that create digital tools, bringing more feature-rich and innovative products and services to the market is the goal. From a developer's perspective, choosing the right technology stack is a factor of success for every software project.
However, the process of designing the right architecture for a digital product, deciding which database will be used or choosing the proper data structure for storing records - all these decisions present many challenges. Getting your tech stack right from the start to facilitate scalability and finding and retaining top IT professionals in your development team are equally important elements of software development and delivery.
Just last year, we helped 20 organisations build efficient, reliable, and scalable products. We know first-hand how important it is to be able to sustain a high pace of delivery over the course of years through building robust IT systems. Today, we share how taking a strategic approach to shaping your tech stack will help you achieve goals with your software project.
Why do you need to choose the right tech stack for your project?
Making technical decisions is the process of choosing technologies, frameworks, programming languages, and other development tools to solve a given problem. These decisions can go a long way in making your life easier or miserable in the future.
The way you build your tech stack has much influence on your company, product, and development team. There’s plenty to consider where technology adoption is concerned. Each technology stack has its advantages and disadvantages, so it’s important to make sure to select the right tools that could help you the most with your project.
There are usually some trade-offs. Nevertheless, your choice of tools will always determine the type of software you can build and the kind of engineers you should hire. The decisions regarding your future tech stack are also going to influence:
- your system’s performance
- how easy it is to scale, e.g. add more users or storage as needed
- time to market
- the ability to add the right skilled people to your development team
- the cost of maintenance of your product
- how users will interact with your application
- how easily you can make changes to your project as it evolves
The elements of a modern tech stack
Tech stacks are the tools developers use to build software products. The basis and the heart of any advanced digital product is its corresponding backend - the server side, and the frontend - the client side. Beside these two basic components, we can distinguish categories like:
- Data storage and querying
- Servers and load balancing
- Monitoring and performance tools
- Analytics tools
- BI tools
Popular tech stacks
There are popular technologies and optimised frameworks that can help improve the performance of applications in terms of data management or can add a lot of ready-made libraries for developers to speed up the process of writing code.
You can get inspiration from popular companies' tech stacks, but since the number of available development elements is only growing, that basically means there are no two identical tech stacks.
In the end, everything you choose for your project has to fit your specific needs and all of the elements must work well together.
Pairing the right technologies together is one of the most critical decisions because it could make all the difference when it comes to increasing your business’s productivity and success.
By making the right choice, you help your developers accomplish more in less time. Speaking of successful products, let’s see good tech choices in action.
Tech stack behind innovative and resilient software
Businesses that implement innovations based on a specific technology faster leave the competition far behind. Let’s take a look at Uber, one of the fastest-growing companies in Silicon Valley history.
There are many competitors in the taxi industry, but the company has brought a revolution in car services all across the world. Uber’s use case proves that effective personalisation and relevant customer engagement strategies work. Data is very important for Uber. They build scalable streaming pipelines for near-real-time features. Their pipelines are fed with data about all rides, car requests, they even track drivers going through the city without passengers to know the traffic patterns.
On the product front, Uber’s data team is behind all the predictive models powering the ride sharing cab service, making the company the leader in the industry. Uber transforms and scales faster by leveraging the right technology to offer a unique customer experience.
On the Stackshare.io website, you can check the Uber tech stack that the company utilises today. Each stack decision has a link to the original source content and was created based on Uber Tech Blog and Uber communications. See the full tech stack here.
Technologies chosen by Uber to build applications and manage data
Technologies chosen by Uber in the DevOps area
Your tech stack choices and technologies have a big impact on how you scale both your team and your software. It determines your product success, the types of developers needed, and what they will need moving forward.
Designing robust, high-quality, and secure software solutions is complex and requires up-to-date knowledge on changing technologies, frameworks, and tools. It’s crucial for software-driven businesses to make an effort to involve the right individuals who have hands-on experience in implementing different software architectures and design patterns.
Successful software product needs the right team
Growing your development team is also impacted by your technology choices. Good software craftsmanship is the basis for a sustainable and efficient software development process. What’s most important is to get it right from the start, making software development a strategic priority, not an afterthought.
Sometimes it’s hard to find high-end IT skills in your organisation. The rate of IT adoption by companies has far surpassed the rate of availability of IT professionals. Software engineers, responsible both for designing and building your backend that handles the application logic and rules, and the frontend that serves as the interface for the users, might be hard to find at the pace your project requires.
Attracting new tech talent is hard from two perspectives. Firstly, it’s hard to recruit top IT candidates because they are usually passive candidates. There is a possibility that your next hire may already be employed and isn’t necessarily looking for a change. Secondly, staying relatively small allows you to move faster and be more adaptive, so scaling your team needs to be done at the right pace and with the right people.
Managing the inherent complexity of your existing technology, also making sure the composition of your tech stack is flexible and easy to change according to your challenges, expertise, and specific needs in the future depends directly on your development team skills.
Educate and train to make the right technical decisions
Your stack says a lot about your engineering and company culture. Everyone should feel confident in the tools they’re using, and that the parts of the system are robust and reliable.
You can always upgrade developers’ efficiency by allocating a budget to training your team. Fostering a culture where everyone follows well-established practices and has time and resources to dive into the IT community to learn and skill up creates a cohesive team. This is a habit we practice and preach ourselves.
Check our dev talks by Andrzej Ludwikowski and Jacek Kunicki.
Sometimes hiring external IT experts to help your development team get on the right track is also the way to go. The process should start with a careful examination of your business needs and end with a recommendation for the best strategy to successfully achieve your goals. When looking for an IT consulting partner, be mindful of whether there is an understanding not just of technical objectives, but also of your business goals.
Experiencing the paradox of tech stack choice first-hand?
Technology landscape is hard. There are multiple tools and frameworks to choose from when looking for the right one for your business goals in just about every aspect of software development. With so many tools to tackle digital transformation, how do you know when to choose:
- Server or serverless?
- Java or Scala?
- Kafka or RabbitMQ?
- Cassandra or PostgreSQL?
- K8s or Heroku?
- Microservices or a modular monolith?
- Event sourcing or CRUD?
- And so on…
Choice gives us freedom and flexibility, but also causes what psychologist Barry Schwartz calls “the paradox of choice”. There is a cost associated with making a choice: slower decision making, distress, and post-decision regret.
"In Schwartz's estimation, choice has made us not freer but more paralyzed, not happier but more dissatisfied."
When making your own choices, reading case studies about other organisations’ experiences can be a huge help (and big inspiration about what not to do), especially if their business functions and goals are comparable to yours. But social proof will never replace hands-on developers' experience. IT professionals can properly evaluate functional requirements and evaluate important aspects of possible solutions in such a way that in the end, everyone gains deeper understanding and settles for the most appropriate solution.
Let’s take a real-world example. The CNCF Cloud Native Landscape Project is intended to be a resource map to help businesses and developers navigate the cloud native ecosystem. You can easily filter and sort hundreds of cloud native projects and products and show details about them.
It can be very useful when trying to make sense of state-of-the-art cloud technologies, at the same time, it may sometimes be very confusing in the process of technical decision making for a specific solution.
Starting from the simplest one: “Should we go for a cloud-based applications design or design specifically for the cloud and optimise for the inherent characteristics of the cloud?” And ending at: “Which tool is right for which job?”, as the number of tools in the cloud native landscape has exploded in the past few years.
The Trouble with Cloud-Native Service Landscapes:— Glasnostic (@glasnostic) January 8, 2021
👉 Modern, complex, and dynamic environments are difficult to operate
👉 Their applications and services are no longer self-contained
👉 Prone to unpredictable behaviors at the application level#Devops#Cloud#microservices
Key elements of technical decision making process
The groundwork is laid if the different pieces making up your application are of high quality. Custom software must always be designed for a specific set of business needs. The goal is to have a good start, and while solving problems and properly managing the technical debt. The decision making process, even for the same problem, can be different, there is no silver bullet.
When making decisions in your software project, it is important to think strategically and have in mind a couple of rules that may be obvious but are easy to forget when dealing with challenging problems.
- If you're the one to give technical advice, have a long-term vision, use deep technical knowledge and your common sense.
- Understand that what worked for other teams might not be the right solution for your team. Rely on mature technologies that have been battle-tested and have strong communities. Avoid obsolete frameworks and remember that a new fancy technology doesn't necessarily mean innovation.
- There are critical technical decisions that are more important than others. You will spend more time and need more expertise when deciding on software architecture - the foundation that sustains your project - databases, frameworks, libraries, services, everything that your architecture depends on.
- Once you have made a decision, involve stakeholders. The biggest challenge is making sure your organisation is ready for a chosen technology and you have their back, as well as everyone feels a part of the process.
- There is a possibility of making a bad decision. You need to be ready that failing fast is an option. It's very costly and time-consuming to replace or revert a proposed solution when it's already deeply embedded in your process. Gather early feedback. It helps eliminate potential issues, as well as gain acceptance of your technical decision.
Conclusion: technical decision making
If you feel overwhelmed by the cluttered technology landscape, let us help you evolve your existing applications, rescue your software project or build your software architecture the right way.
When it comes to the nuts and bolts of developing robust IT systems, we have the right experience to scale up your software development team, development velocity and your digital product. Don’t just take our word for it.