6
prioritized (product focus)? The answer is dependent on many factors, such as the project
expectation and release date. For example, if the project needs an algorithm suitable for
processing thousands of queries at a time from multiple users, then the optimal product may be
preferred over the MVP. However, if it is a lightweight project that is expected to release within
a week, it may be prudent to take the MVP approach over the optimal product, using the extra
time to focus on additional urgencies in the development process.
The project requirements themselves are another factor to be considered in the
development process, such as language barriers, structure (separation of concerns), and
modeling. Often, a project is to be developed exclusively in a certain language, for a certain
purpose, i.e., JavaScript for web development and C++ for game development. An algorithm
may perform differently in different programming languages, for instance the size (in bytes) of
certain datatypes may vary from language to language. Additionally, some algorithms may be
more difficult to implement in certain languages. For example, mergesort can be more
complicated to implement in Java than in Python, because in Java it is prudent to use an Abstract
Data Type (ADT) and a comparator (CompareTo) in order to ensure there are no type errors,
whereas Python would simply interpret the data types of the arguments and compare them
accordingly; essentially, doing so in Java can lead to extra refactoring (you need to implement an
ADT interface) which lengthens the development process and can overcomplicate the code just
to reduce the complexity of the algorithm marginally. Not only would this affect the code itself,
but it would also affect the existing models, documentation, and architecture of the software,
which can lead to the project becoming convoluted. However, if it is important to the project
(and not too late in the development process), then it may be prudent to implement the more
complicated algorithm early on, as this will lead to stronger and more reusable code.