What Coming to Code Taught Me About Data Science

of The Arrival of the Codea series of daily programming challenges released in December, for the first time. Daily challenges often contain two puzzles that build on the same difficulty. Even though these challenges and issues are not typical of data science workflows, I have come to realize that many of the practices, ways of thinking, and approaches that inspire can translate surprisingly well to data-oriented work. In this article, I look at five lessons I learned from following the The Arrival of the Code challenge this year and how they translate into data science.
to me, The Arrival of the Code it was a controlled practice environment to revisit the basics and work on my programming skills. You focus on important things as the distractions you would face in daily work are not there; you don't have meetings, changing needs, communicating with stakeholders, or coordinating more. Instead, you have a direct and binary feedback loop: your answer is either right or wrong. There is no “almost right”, no way to describe the result, and no way to sell your solution. At the same time, you have the freedom and flexibility to choose any method you see fit as long as you can arrive at the right solution.
Working in such an environment was quite a challenge, yet very rewarding as it also exposed practices. Given that you have very little room for ambiguity and cannot hide your mistakes, any mistakes in your work will be exposed quickly. Over time, I also realized that most of the failures I encountered had less to do with syntax, algorithm choices, or coding but more with how I dealt with problems before touching any code. The following are my key lessons from this experience.
Lesson 1: Design a Solution – Think Before You Code
One pattern that appeared over and over again The Arrival of the Code it was my tendency to go straight to work. When faced with a new problem, I was often tempted to start writing code immediately and try to come up with a solution as quickly as possible. Ironically, this approach often had the opposite effect. For example, I wrote deeply nested case-handling code that increased the runtime of the code without realizing that there was a much simpler solution.
Which ultimately helped me step back before I started coding. Instead, I started by noting the needs, inputs, and constraints. The process of commenting this down helped me find a level of clarity and structure that I had been missing when jumping straight into the code. In addition, thinking about possible solutions, explaining a complex solution, or working with pseudocode helped to make the necessary concept more formal. Once this was done, the act of using the code became much easier.
This learning can be translated to data science as many problems can be challenging because of unclear goals, well-defined objectives, or because constraints, and requirements are not well known in advance. By defining the desired results and brainstorming a solution before starting to write code can prevent wasted effort. Working backward from the intended outcome instead of forward from the preferred technology helps keep the focus on the actual goal that needs to be accomplished.
Lesson 2: Input Validation – Know Your Data
Even after taking this approach of mapping solutions and defining the desired solution upfront, another recurring obstacle arose: input data. Some of the failures I encountered had nothing to do with faulty code but rather assumptions about data I had made that didn't work. In one case, I assumed that the data had a certain minimum and maximum limit that turned out to be incorrect, leading to an incorrect solution. After all, code can be fine on its own, but completely fail if it runs on data it was never designed to run on.
This also shows why checking input data is so important. In general, my solution did not need to be completely revised, small adjustments such as introducing additional conditions or boundary tests were enough to find a correct and robust solution. In addition, preliminary data investigation can provide signals about the scale of the data and show which methods are possible. If you're dealing with large ranges, extreme values, or high flammability, it's very likely that brute-force methods, nested loops, or combination methods will quickly reach the limit.
Naturally, this is equally important in data science projects where assumptions about the data (implicit or implicit) can lead to serious problems if left unchecked. Investigating data early is an important step in preventing problems from spreading downstream where they can be more difficult to fix later. The key takeaway is not to avoid making assumptions about data at all but rather to make them transparent, documented, and tested early in the process.
Lesson 3: Read Fast – Improvement Over Perfection
Medium puzzles The Arrival of the Code they are usually divided into two parts. While the second often builds on the first, it introduces a new obstacle, challenge, or twist as the problem size increases. Increasing complexity often makes the original solution of the first part obsolete. However, this does not mean that the remedy in the first part is useless as it provides an important foundation.
Having such a working foundation helps to determine how the problem behaves, how it can be addressed, and whether a solution has already been achieved. From then on, development can be handled in a more systematic way as one knows which ideas no longer hold and which parts need to change to reach a successful solution. Refining a basic concrete solution is much easier than designing a “perfect” solution that doesn't seem right from the start.
In The Arrival of the Codethe second part appears only after the first has been solved, thus making the first attempts to find a solution that works for both parts absurd. This structure shows the obstacle that we often face in the workplace as one usually knows all the requirements in advance. Trying to anticipate all possible extensions in advance is not only speculative but also inefficient.
In data science, similar principles can be observed. As needs change, data sources change, and stakeholders refine their needs and demands, projects and solutions must evolve as well. Therefore, starting with simple solutions and iterating based on real feedback is more effective than trying to come up with a completely generic system from scratch. Such a “perfect” solution is rarely apparent at first glance and iteration is what allows solutions to converge into something useful.
Lesson 4: Design for Scale – Know the Limits
Although repetition emphasizes starting with simple solutions, The Arrival of the Code it also repeatedly points out the importance of understanding scale and how it affects the method to be used. In many puzzles, the second part not only adds logical complexity but also dramatically increases the size of the problem. Therefore, a solution with exponential or factorial complexity may be sufficient in the first part but becomes infeasible when the problem size increases in the second part.
Even if you're starting with a simple foundation, it's important to have a solid idea of how that solution will grow. Nested loops, brute-force calculations, or exhaustive search for combinations show that the solution will stop working if the problem size increases. Knowing the (rate) of the breakpoints therefore makes it easier to measure if a rewrite is necessary at any time.
This does not contradict the idea of avoiding premature fixation. Rather, it shows that one must understand the trade-offs that a solution makes without immediately adopting the most effective or horrible method. Designing for scale means being aware of scale and complexity, not having to develop blindly from scratch.
Relevance to data science is also provided here as solutions may work well for sample data or limited data sets but often fail when faced with “production level” sizes. Being aware of these constraints, being aware of potential limitations and keeping alternatives in mind makes these systems more robust. Knowing where a solution can stop working can prevent expensive redesigns and rewrites later, even if not done immediately.
Lesson 5: Be Consistent – Momentum Beats Motivation
One of the most overlooked aspects of participating in the Advent of Code had less to do with problem solving and more to do with “showing up”. Solving a puzzle every day sounds manageable in theory but in practice it was challenging, especially when faced with fatigue, limited time, or low motivation, especially after a full day of work. So trusting in a magical re-appearance was not a viable strategy.
Real progress came from working on problems every day, not from occasional bursts of inspiration. Repetition strengthened ways of thinking and dividing problems created momentum. Once that momentum was built, progress began to converge and consistency was more important than consistency.
Skill development in data science rarely comes from one-off projects or one deep dive. Rather, it is the result of repeated practice, careful data reading, designing solutions, iterating models, and error-correcting assumptions made consistently over time. Relying on inspiration isn't impossible, but having a routine makes it sustainable. The Arrival of the Code he pointed out this difference: while motivation is variable, the combination is consistent. Having such a daily structure helped turn solving puzzles into a habit instead of a desire.

Closing Thoughts
Looking back, the real value I got from participating The Arrival of the Code it wasn't from solving a single puzzle, learning new coding tricks but rather from making my habits visible. It highlighted where I tend to rush to solutions, where I tend to overcomplicate things and where slowing down and taking a step back would have saved me a lot of time. The struggles were a means to an end, the learning I got from them was the real value.
The Arrival of the Code it worked best for me when it was viewed as a deliberate practice rather than a competition. Consistently proving yourself, focusing on clarity over creativity and refining solutions instead of chasing perfect solutions from the start turns out to be more important than finding a single solution.
If you haven't tried it yourself, I'd recommend giving it a shot, either during an event next year or by solving past puzzles. The process quickly reveals patterns that transcend the puzzles themselves. And if you enjoy taking on challenges, you'll probably find it a really fun and rewarding experience.



