Have you ever heard the expression, “you can have it cheap, fast or good – choose two”? This is an important concept to remember when contracting work out, especially software development. Here, we explain why the two options you choose are important and why you can’t have all three. In today's society, everyone wants things immediately. Instant gratification is trending to the point of being a way of life (thanks, Amazon Prime.) The faster we get something, the better. As new...

Building code and releasing code are not the same, despite what some may think. Most organizations become proficient at the act of creating software including writing code, adding new features, fixing bugs, etc. However, many struggle mightily when it comes to releasing what they’ve made into the world. I would argue releasing code is somewhat of an afterthought for most development teams; it continues despite the recent rise of the DevOps culture. In an effort to kick-start improvements in your...

The rise in popularity of open-source software has made the usage of third-party libraries nearly universal. Projects often use dozens of them and those, in turn, use dozens more. We want to avoid reinventing the wheel and if someone else has already solved a problem, it doesn't make sense for us to solve it again. The Good and the Not-So-Good At its best, open-source software provides solutions that have been thoroughly vetted by hundreds or thousands of users. Bugs have been...

At Phase 2, we not only value writing great software but also managing and delivering that software as efficiently as possible. As a software developer, if I could I would just write code all day and not think about much else. However, when writing production-ready code, the actual writing of the code is just one piece of the bigger pie. An efficient, stable, and dependable release pipeline allows us to focus more time on developing new features. It reduces the...

Espresso is a user interface testing kit that allows Android developers to simulate user interactions with their application and verify the results of those interactions. This kit helps ensure your app's very basic regression testing functions without bothering a QA team. However, there is a much greater potential of running into flaky tests when writing integration or user interface tests.  Flaky tests pass or fail inconsistently. Flaky tests exist because the test design contains something not accounted for. It isn’t always...