In some sense, there is always a hypothesis, but this is not always a useful way to look at the situation.
A key thing in experimental work in computer science is that the specific results rarely matter. We are measuring the performance of implemented methods, but the implementations are imperfect realizations of theoretical methods, which in turn are imperfect realizations of some key ideas. We are measuring the implementations, but we usually want to judge the ideas. If the ideas are worthy, somebody may eventually come up with a better realization of them.
There are often huge systematic biases in the measurements. The implementation of one method may be of higher quality than the other. Or maybe one method is a straightforward realization of the ideas, while another contains many tweaks and details that improve its performance. Or when we are interested in computational performance, the relative results may depend on hardware. Then we are measuring the performance on yesterday's hardware, but we are really trying to make predictions about the performance on unknown future hardware.
Because of the systematic biases, experimental computer science is often only interested in large differences in performance. If you have to think about statistical significance to see the difference, the difference is probably not significant. In such situations, the choice of the method often depends on other factors, such as the ease of implementing, using, and understanding the method or adapting it to solve a slightly different task.
While statistical significance has a role in experimental computer science, it is not as useful as in natural sciences. After all, statistical significance is a tool for dealing with random variation in measurements. But if we already know the specific causal mechanism behind the method, and if we treat the data as a fixed quantity that can be reduced to a set of combinatorial and statistical properties, there should not be much random variation left. If we see significant unexplained variation in measurements, it often indicates that we have not found the relevant properties of the data, or that there are some issues in the method, the implementation, or the experimental setup.
So what does this mean in practice? Often the first step is simply running the methods with various kinds of data to see what happens. This may already give decisive results. One method may be consistently better than the other, or maybe the performance of the methods is similar on all datasets. In such cases, we probably want to repeat the experiments in a more rigorous manner, but there is usually no need for formulating and testing hypotheses.
On the other hand, if the relative performance of the methods varies significantly from dataset to dataset, it probably depends on the properties of the data. Finding the relevant properties is clearly a place for hypothesis-driven work. Or maybe the results were not what we expected. Maybe we expected, based on our theoretical understanding of the method, that the method should perform well with certain kinds of data, but that did not happen. The issue may be with the implementation, the experimental setup, or the data – or even with the theoretical understanding. In such situations, it can be helpful to clearly formulate the hypotheses before testing them.