Engineering at MojoTech
MojoTech's core is deeply rooted in the practice of software engineering
One of the primary questions potential partners ask of MojoTech is whether or not we are capable of understanding an organization’s business goals and how we can efficiently transform those goals into working software users love.
There are many aspects of building software people love; human-centered design, effective project management — but at its core is the actual practice of building software.
We were founded by software engineers who wanted to create a company that helped people build their projects in an effective and robust manner. The heart of engineering, after all, is to provide tangible solutions efficiently. Technology and tools are just a means to this end.
Agile had become an almost meaningless buzzword in our industry, associated with posture at meetings, specific tools and process, no planning, and a touch of organized chaos. Which is unfortunate because at its root, the agile movement was not about process, but about values.
The very first tenant states:
Individuals and interactions over processes and tools.
While process is an important enabler of our goals, it’s never the goal in itself. We aim to focus on the solution, not the process and all of our practices are in service of delivering optimal value.
Our Engineering teams have built a lot of software, and we do have a robust base-process that bolsters our efforts to deliver the exceptional products. But focused requirements are first and foremost. Focused requirements mean that we don’t build before we understand. Without understanding the requirements, it is too easy to build the wrong thing.
We help determine what our clients and their users need, under the context of where they are going. We deliver working software early and often so we can respond to the emergent needs of a product. We look to understand the value of every feature we’re building so we can ensure we are building the right thing every step of the way.
Engineering is not a commodity.
There is a high rate of failure for projects in the software development field. One of the core reasons is a false notion that all software engineers are the same. They are not.
But, unless you are also a software engineer, it is difficult to sort the wheat from the chaff. It is even more difficult to assess quality if you are not able to be personally introduced to the folks who are building your product.
At MojoTech, our product is our Engineering Services, and so an inherent requirement for our operations is that we find, hire, and foster the best engineers, in-house, always.
And the results speak for themselves.
With more than 150 launches behind us, we have had the chance to develop much more than best practices in building software. Having gained a deep understanding, across industries, business models, and company stage, we can identify the commonalities and unique challenges of each project.
This insight allows us to shorten development cycles by leveraging proven, existing solutions to solved problems and focus our efforts on the key differentiators of your product.
MojoTech Engineering teams are flexible and able to meet the emergent need of your product. As the product evolves, we continue to optimize the size and makeup of the team to suit the technical, speed, and usability requirements of the project.
Peer code review is an integral part of our process. As professional software engineers, we believe that a strong review process helps us ensure that the code we are writing is of the highest quality. The agile principles sum it up best, “Continuous attention to technical excellence and good design enhances agility.” Code review promotes the ability for engineers (both ours and clients) to discuss, refine, and perfect the architecture and code required to meet product goals and requirements.
Our approach to testing software is comprehensive. We utilize both automated testing tools to exercise parts of the codebase, static analysis tools to review our code for things humans might miss, and we have an internal testing team to provide the human review of the product.
We also take advantage of the latest continuous integration and continuous delivery tools to optimize the delivery and deployment of your software product.
A client’s trust is a great privilege and a great responsibility. And for any product of substance, building software is a collaborative effort. Our engineers are experienced working on teams with engineers, designers, product managers, and stakeholders both at MojoTech and with clients. Successful products require teams that know and fulfill their roles and can collaborate with others on the team.
We strive never to let ideals get in the way of an effective solution. Excellent engineering demands thoughtful tradeoffs when good codes meets real business requirements.
Our engineers are practical; we instill the value of building the simplest thing that works. At the same time, when faced with difficult problems, we empower our engineers to take innovative approaches. Our shared goal is to make a product vision real, and that means we scale our practicality and innovation to the needs of the task at hand and the value it brings to our client’s product.
We pride ourselves on being able to articulate the pros and cons of available solutions and make smart recommendations in the best interests of our clients. We know that the “Perfect is often the enemy of the Good”. There are always several viable options when building software, and someone who tells you otherwise is simply selling you the solution that they want to build — or the only one they know.
The software engineering process is hard, because it’s at the interface between human engineers and sophisticated technology, and we’re continually working to make that process better.
Mojo engineers are professionals. They take pride in both their craft and the product of that craft. At the foundation, they care about delivering quality work.
We help foster their craft through collaboration with peers, conference attendance, in-house workshops, dedicated time to experiment and grow, community engagement, apprenticing and mentoring with peers, and contributing to open source software. All of these activities help them develop mastery of the technologies, tools, and engineering practices required to build and scale your product.