I think I'm coming to realise that one of my more unusual traits as a programmer - and one that has led me to preferring processes like TDD, is I'm obsessed with how code *looks and feels* before I can even make it work. My design process is more "how do I want to express this concept" than "how do I execute this task". Once I find the right form for a concept, I then work backwards and drive out tests that help me make it work. I think a lot of people do the opposite, and try make something work before finding its form. This is reflected in the phrase "working, readable, fast - in that order", but I think I've landed on "expressive, working, fast" ordering now. I'm not making a particular value judgement here - but I think finding the shape in everything is an aesthetic tactic you need if you're going to build software other programmers will consume. It's the design work.
I prefer a straight line Console app for the first spike, then throw it away and write tests on the second attempt that match the specs I discovered from the first spike. And then go TDD
You could very use the term ‘ergonomics’ when taking into consideration consumer and maintainer. Now with regards to software design, aside from a trivial problem, it’s something that does require a lot of experience. And when you combine software design when faced with uncertainty it requires even more to bring that evolutionary approach.
Same here. I start with, "what would a good solution to this problem look like?" and then work my way back from there. TDD is very compatible with that thinking.
I can totally relate to “obsessed with how code *looks and feels* before I can even make it work”. I find that the aesthetic is so important whether it is code, diagram or other artefact in communicating to others, if the form is right others can grok so much quicker.
For me, this is rooted in the philosophy that you get good output from happy people, and people who have to spend a lot of time reading code are "happiest" when they can grok things.
Principal software engineer
2moI feel like this is similar to how I work. Designing from the interface surface and typically following an aesthetic thread from simple to complex. Using the aesthetic to kind of... Litmus test the complexity if you know what I mean? If that's similar to what you meant, do you ever struggle with overly fixating on the aesthetic and losing sight a little of "KISS" and writing code juniors can work with?