...
LearningBuilder is primarily written in ASP.NET MVC using C#, with a decent amount of custom JavaScript. We haven't adopted a SPA framework yet but are keeping tabs on both Angular and React as candidates when we go that route. have started to leverage Vue.js in some areas of the app.
It is a large, but reasonably well-organized, monolith consisting of a handful of core assemblies plus the web project. Our long-term vision is less monolithic and more a federation of independent services working together. We've begun exploring that vision by using a message bus (RabbitMQ) and an "integration hub" to handle integration and process coordination needs.
...
As of this writing we have 5,854 unit and integration many thousands of unit tests and 195 many hundreds of automated UI tests. These tests can be executed via the command line, via the NUnit test runner, or within Visual Studio using R# or TestDriven.NET.
...
Currently we use SVN. We're hoping to switch to Git in 2018or Bitbucket soon.
Our general pattern is that most tasks are performed in feature branches and then merged into trunk once they are stable and are code-reviewed. We maintain release branches so that critical changes can be merged across multiple lines of development if needed.
...
Deployments themselves are handled through Octopus Deploy and are approximately 75% automated. Our IT/Devops team manages the deployment process.
Technical Principles
...
In addition to the core corporate values (outlined below), the technical team believes in the following:
- "Go slow to go fast". We are interested in long-term stable velocity over time. We achieve that by paying attention to fundamentals, writing clean code, and sweating the details.
- Diversity of thought / consistency of output. We value different ideas and problem solving strategies, but the code shouldn't suffer from multiple-personality disorder.
- Product features should be thin wrappers of business logic around a rich application framework. This means we prefer reusable components and patterns over feature-specific "stuff". We invest in helpers, wrappers, utilities, etc to eliminate as much boilerplate and repetition as possible.
- Automate all the things - ain't nobody got time to be doing repetetive repetitive tasks by hand!
- Innovate deliberately. We all love shiny new stuff, but not every task is the right time to introduce brand new ways of doing things. But when it is the right time, then look for the evolutionary leaps and not the incremental shifts.
- "It's better to build half a feature than a half-assed feature." (See #1)"go slow to go fast")
Core Values
Heuristic Solutions has the following core values:
- Pioneering - success often means heading out into the unknown. But don't just take risks willy-nilly; take calculated risks.
- Act intentionally - make decisions about what you do. Think heuristically. Anticipate the future. Leave breadcrumbs.
- Achieve excellence with others - teamwork matters. Engage others. Crave accountability.
- Show that you care - companies are made of people, not "resources". We build strong teams by caring about each other as people first, and coworkers second.
These aren't just words on a motivational poster in the corner; they are things that we truly believe in, and you'll hear them frequently as we do our work.