Rootstrap Blog

Tag: Software Engineering

Total 8 Posts

Monolithic versus microservices, and all in between

Developers often decide whether to build monolithic or microservices architectures based on personal preference. This article tells you how to design the best platform for your client by considering both methods.

Monolithic all-connected platforms might serve a startup’s needs, but they often have problems with scaling to support growth. Architectures built with modular microservices work well for bigger enterprises, but they might be overengineered to require more resources than a startup can spare. This article explains how to incorporate both these build approaches to design a functional strategy from the start that evolves to fit each point in a project’s lifecycle.

Continue Reading

Data Demystified — Machine Learning

A bird-eye view of the machine learning landscape.

The main goal of this article is to cover the most important concepts of machine learning, and lay-out the landscape. The reader will have the vision to understand what kind of solution matches a specific kind of problem, and should be able to find more specific knowledge after diving into a real-life project.

I’ll start with a 60 years old definition, but still valid today:

The name is pretty self-explanatory, and the definition reinforces the same concept.

Continue Reading

The worst way to choose your development team

You might be tempted to select a dev team whose experience is the closest match to your project. This article tells you why that’s a bad idea and how to make the best choice.

There’s more to cutting-edge software developers than just prior work on a similar project. In fact, matching experience is the least important thing to look for. Agile processes, deep technical knowledge and skills, and verified success are the real indicators of a cutting-edge development team. This article explains the most important qualifications to look for and how to find a dev team that has what it takes to create not just a specific product but a lasting solution.

Continue Reading

DevOps — are your servers pets, cows or ants?

Evolving software platforms and their service needs can be compared to three types of animals that have increasing levels of autonomy and self-care.

The software platforms you create need a level of effort from you that changes as they become more complex. If you follow the agile process and make them increasingly automated, your platforms require less work as they evolve from one server, to many, to a server farm. To create a broad, relatable picture of what that changing effort looks like, this article compares the needs of each platform development level to three types of animals: pets, cows, and ant colonies.

Continue Reading

Build and grow cross-company knowledge

Culture is the way a company does things, its processes and values, and how it generates outcomes. It’s never easy to build, share, and promote knowledge across a medium-sized organization. That task requires leadership, rules, a strong culture, and having effective systems in place.

I’ve always been passionate about how knowledge sharing has a multiplier effect on the quality of what each person can deliver. I’ve seen junior developers, after a just few weeks, deliver higher quality work than what I could have produced years ago — even in a nonchallenging environment and even after years of experience.

Continue Reading

Ruby doesn’t scale

Why you should stop blaming a programming language for your low quality work.

I’ve heard too many times that Ruby on Rails (also called RoR) doesn’t scale. Guess what? Java doesn’t scale, .NET doesn’t scale, PHP doesn’t scale, and Node.js doesn’t scale. No programming language scales if you build terrible software with it.

In this article, I focus on Ruby, but the information is valid for almost any programming language. If you typically benchmark Ruby against other languages like Python or C++, it’s probably slower in most contexts.

The real question is not how long it takes or how many resources it consumes to run some algorithms like regex redux, binary tree searches, or reading DNA sequences.

Continue Reading

Software development is agile, not transactional

The dangers of considering software development as a transactional and commoditized business.

In today’s world, we usually exchange money for solid, tangible goods or well-defined services. That’s how material transactions work. As an example, we might buy a t-shirt for $50. That means you give someone $50, and they immediately give you the t-shirt. Or you pay a plumber $15 and hour. Then the plumber spends some time fixing your leak. In this case, there’s a high level of certainty that the problem will be solved.

Continue Reading

Code audits

An in-depth analysis of your system’s health.

For many projects, clients hire us to only run code audits. In other cases, we inherit legacy code, and going through a code audit is a requirement for working with us.

With time and repeated experience, we refined and strategized our audit process. It’s now a distinct work product that we offer to clients on its own.

As said, we often get projects that were created by other teams — sometimes in-house techs and sometimes offshore providers. In these cases, clients ask us to just take over the work or to only fix the problems. But we don’t work like that.

Continue Reading