Lessons from a Decade of JavaScript Consulting: Bitovi’s 10 Core Principles

Brian Moschel by Brian Moschel

Lessons from a Decade of JavaScript Consulting: Bitovi’s 10 Core Principles

Brian Moschel Over the past 10 years of JavaScript consulting, We've honed in on 10 core principles that keep us laser-focused on delivering amazing applications.

posted in About ,Development on March 1, 2016 by Brian Moschel

Bitovi’s core mission is simple: deliver amazing applications.

 

Credit: Dodgeball Credit: Dodgeball

 

Over the past 10 years of JavaScript consulting, we've learned a lot via the time honored process of trial and error. We've honed in on 10 core principles (one per year!) that keep us laser-focused on our mission.

If you're someone who cares about delivering amazing applications, you might learn a thing or two from our experiences.

This article will explain who we are, what our 10 most important principles are, and how we arrived at them.

Who We Are

Bitovi is a company founded by two engineers: Justin Meyer and Brian Moschel.

 

A long time ago, at a jQuery Conf far, far away...

A long time ago, at a jQuery Conf far, far away...

 

We're huge nerds.

 

When in doubt, shave "JavaScriptMVC" into the back of your head.

When in doubt, shave "JavaScriptMVC" into the back of your head.

 

These 10 core principles, which reflect our hardcore nerd ethos, are Bitovi's manifesto for what is important. They serve as a company decision-making algorithm for how to operate.

Our Core Principles

  1. Do the right thing
  2. Think long term
  3. Control uncertainty
  4. Eyes on the prize
  5. Embrace open source
  6. Quality over quantity
  7. Invest in people
  8. Invest in design
  9. Set expectations
  10. Ask questions

A short description and how we arrived at each principle follows.

1. Do the right thing

Do what’s right, not what’s easy. Treat people, software, and clients with care and empathy and it will pay long term dividends.

This really is Bitovi’s original, and only, true value. Every other principle is derived from here. We will never compromise on this goal, even at the expense of a perceived short term loss.

Justin loves to talk about how his grandfather, who built homes, would fix every squeaky floorboard, to the point of obsession. Many believed he was crazy or wasting his time. But the result was his company slowly earning a reputation for extreme quality and attention to detail.

Good karma begets good karma.

karma

What this means to us

This mentality takes on many forms:

  • People: When an employee quits the week before year-end bonuses, the easy thing is not to give them a bonus, but the right thing is to reward them anyways for their hard work throughout the previous year.
  • Software: Tech debt - we record and eliminate it, at all costs. Add tests, documentation, keep things DRY, refactor when appropriate, etc.

2. Think long term

Invest in infrastructure, maintainability, and reusability. Never take a short cut.

After building several complex early single page applications, Justin and I realized that focus on maintainability and reusability was the key factor in low long term total cost of ownership.

Just like with any type of engineering, you can focus on fast and dirty, but you’ll certainly pay for it later. Or you can focus on setting a solid infrastructure, and see it pay dividends down the line.

What this means to us

In applications we build, we break down each page into small, reusable components. We often create an internally published UI widget library for our clients, containing documented, tested, and demo-able components that they can plug into future pages and applications.

3. Control uncertainty

Minimize external dependencies on our success, even if it means more work up front. Don’t be afraid to get dirty.

On one of Bitovi’s first projects, we experimented with widget libraries. As most experienced JavaScript devs eventually learn, packaged widget libraries get you 80% of the way, very quickly, and that last 20% takes forever or is impossible to achieve.

On the same project, we ran into several critical jQuery bugs, causing project delays. We learned how many bugs are in every single open source project, even those that are most actively maintained.

These experiences made us realize that the higher the percentage of your code that is treated as a “black box”, the higher the risk of project failure.

What this means to us

In order to minimize risk, we control uncertainty in two ways:

  1. Wherever it makes sense, we avoid dependencies on external projects and organizations by writing and maintaining our own code. However, we understand that it’s not reasonable to build everything from scratch.
  2. If there is a dependency, we are comfortable diving in and getting dirty when necessary.

This principle lead us to create DoneJS and its subprojects. Its also this unique factor that leads many of our clients to hire us, since a relationship with us means they control a larger percentage of their uncertainty, compared to working with Angular or React (you can’t hire Google or Facebook for JavaScript consulting).

4. Eyes on the prize

Never forget that project success is the ultimate goal, not small technology victories. Even if we’re hired as technology consultants, we’re really project success consultants.

In some of our early projects, we got wrapped up in silly technology battles.

We realized that some of the things we used to spend our energy on were not contributing a proportional amount to eventual project success.

What this means to us

As we got older and wiser, we re-evaluated priorities and remembered what the ultimate goal is – project success. This lead us to create the project success checklist and to form our own design department. You can spend two years building the most amazing, maintainable app in the world, but if it’s poorly designed and managed, the project still fails.

Yes, we’re a technology and design consulting company, but our consultants are trained and incentivized to aim for success, even if it means taking risks and rocking the boat.

We speak up about process, UX, team structure, and non-front end specific technology problems. We’ve threatened (jokingly) to email the CEO of Fortune 500 company if they couldn’t get us a dev server in a reasonable time.

5. Embrace open source

Open source is the bedrock of a thriving internet community. Always strive to give back to open source.

Everything we’ve been able to accomplish as a company, and largely as a community, is off the backs of thousands of engineer-hours of open source software development. Open source software launched the web into what it is today. It has forever changed the dynamic of the world.

We have a strong, sincere belief in the value of open source.

opensource

What this means to us

Everything we do is aimed at giving back to the open source community:

  • We write and maintain open source software.
  • We give lower rates for projects we can open source.
  • We give bonuses to consultants who are able to gain client permission to take pieces of their project and make them open source.
  • One of the biggest criteria in hiring Bitovi developers is their passion about being a part of a company that is involved in open source.

6. Quality over quantity

Slow and steady wins the race. Doing something fast is not worth it if it means doing it shitty. Similarly, hire only the very best - fit and talent.

For most of Bitovi’s existence, demand for our services has outpaced our ability to grow. Hiring talented engineers is difficult. We always knew it was important to hire smart people, but there were times early on when we were faced with a tough decision: hire someone now, or walk away from an amazing project. So we dipped our standards.

These experiences did not turn out well, and we learned from them. The people we hired in these circumstances ended up leaving, as they were overwhelmed with the mismatch between expectations and their skill level.

What this means to us

Bitovi is a remote company that provides top tier consultants to solve difficult problems. In order to maintain our stellar reputation and build the type of company we want, we only hire the best, even when that means turning down attractive opportunities.

Our devs seriously rock. I’m sure every software consulting company brags about their talented developers, but I can say without a doubt, our current group is a caliber that would be hard to match. I hear our clients echoing these sentiments quite often - like this from CALI director John Mayer about working with Manuel Mujica:

I love how focused on task Manuel/Bitovi is. Your work speaks for itself and you you do not blast us with how good you are - you just are that good and the proof is in the work - not in the advertising copy.

7. Invest in people

Bitovi’s people are it’s main product. Invest in them with technical training, growth opportunities, soft skill development, and space to explore interests.

Many consulting companies aim to fill staff augmentation roles. We don’t. We aim to be the most skilled consultants our clients have worked with. We want our amazing people to be the best form of marketing. The only way to do that is to hire great people and train them to be even better.

Unfortunately, many technology consulting companies view developers as temporary resources who will quickly move on to different opportunities, rather than as assets to invest in. In contrast, we’ve adopted a culture of learning, which has resulted in happier employees, higher retention, and improved output for our clients - everybody wins.

What this means to us

  1. New hires undergo a week of technical training right away, learning our technology stack, application development priorities, and consulting mentality.
  2. Once per year, we take a week off from client work, meet in a US city, and undergo a week of advanced technical training.

 

Annual technical training week in Chicago Annual technical training week in Chicago

 

8. Invest in design

The best engineered projects fail without a great design. Great design and UX belong side by side with great engineering.

Several years back, several consecutive client projects ended up not achieving success as products due to poor design. To give our projects their best chance at success, we realized we needed more control over the entire front end, not just the development.

What this means to us

To fill this gap, Tom Greever joined our team to build a practice of design: the UX and interface component we'd been missing.

 

IMG_1591-e1455693402780-1-598452-edited.jpg

Good UX really pumps Tom up.

 

Our designers' talent speaks for itself, but Tom wrote more about what makes our design team unique:

  1. Communicating Design Thinking
  2. Creating Documentation
  3. Providing Highly-Technical Solutions
  4. Moving Quickly

More than just having designers on a project team, great UX has become a core part of Bitovi’s culture. Even developers speak design and call attention to UX issues, which improves the quality of the applications we deliver.

 

Bitovi designed and developed m.samsclub.com Bitovi designed and developed m.samsclub.com

 

9. Set expectations

Work is often fuzzy, especially when you’re on a remote team. Set (and update) expectations responsibly, transparently, and honestly.

Every consultant knows that the most important part of your job is setting expectations and meeting them. Easier said than done! We quickly learned that this is a “soft” skill many great devs don’t have naturally.

Meetings often adjourn without clarity. Deadlines are often assumed or unspoken. And all of this is doubly so in today’s remote work environments.

What this means to us

Although software estimation is an inexact science, communication about expectations is not. We’ve developed guidelines to make sure a project owner is always as informed as possible.

  • Break problems into bite sized chunks and create an estimate for each chunk.
  • If there are unknowns that aren’t possible to accurately account for, acknowledge that honestly. Clear up the unknowns first, then update estimates.
  • After a meeting, send a short email summary with next steps and owners (i.e. Joe will set up a dev server by next Monday).
  • Be honest about potential delays, immediately, regardless of whose fault it is. There’s nothing worse than finding out a deadline won’t be met without any time to adjust.
  • Even if they aren’t explicitly asked for, always set expectations.

10. Ask questions

Build a mental model by asking questions - quickly, loudly, and shamelessly.

Frankly, many good developers have an aversion to asking questions. This is a result of:

  • perceived politeness
  • a desire to avoid looking inexperienced or slow
  • assuming your peers “get it” and therefore not wanting to waste their time

Justin loves to tell the story about his experience at Accenture building an interactive touch screen wall in O'hare airport. As a new developer, he leaned heavily on an experienced researcher that held a Ph. D. in the field of touch screens (well before iPads). He spent countless hours in the researcher’s office, asking him so many questions that he practically wrote the application for him. The moral of the story: despite cultural norms to be the strong, silent type, at the end of the day, asking questions aggressively gets the job done as efficiently as possible.

What this means to us

The best engineers have no shame when it comes to asking questions.

Bitovians are coached:

  • to build a gap-free mental model of every problem or proposed solution
  • to never spin their wheels when stuck on anything
  • to escalate problems quickly, whether a bug, broken tools, or an approach that isn’t working.
  • to lean on the open source team and other Bitovi consultants for efficient answers.

Our collective team efficiency is much more important than any one person not being distracted.

To the future

Our principles form our company identity. Regardless of which Bitovi consultants are part of a given project, you can expect these principles to permeate every interaction.

We’re proud of the progress we’ve made and look forward to sharing lessons as we continue to learn.

Bitovi group pic

Create better web applications. We’ll help. Let’s work together.