- "How the heck did this code become this messy and long?" - "One if-statement at a time."
@EmilyBache-tech-coach2 күн бұрын
Absolutely!
@chinesischesser3 күн бұрын
Great video, I learned something again. Just a technical remark, I found it quite distracting that you micis in the frame with your face, would look much better it it was hidden
@EmilyBache-tech-coach3 күн бұрын
Thanks for the feedback!
@georgwagner55773 күн бұрын
Legacy Code.... brrrrr.... :D
@EmilyBache-tech-coach3 күн бұрын
Oh I enjoy the challenge of some good legacy code!
@SamOween3 күн бұрын
@@EmilyBache-tech-coach I wish I could gain this mindset
@dannym8174 күн бұрын
agree, pull request are not a right way to review code. But sitting with a whole team infront of a big screen once a month for a few hours and then go deeply into the code. Not to review juniors code especialy. But giving tips can never be wrong. But more about explaining design decisions and start discussions
@EmilyBache-tech-coach4 күн бұрын
Good suggestions, thanks
@clumsyjester4596 күн бұрын
We do code reviews for everything. Haven't had a bad experience so far. Seems like a company culture problem. We usually work in very small teams, often enough just 2 people. So it's pretty standard that even a junior reviews the CTO. Haven't encountered any ego problems, yet. If your company has toxic people, maybe start working on that or look for a different job.
@EmilyBache-tech-coach6 күн бұрын
I'm happy you have good experiences of code reviews.
@riccardo-9647 күн бұрын
Lest not forget that we're dealing here with enlarged egos and programmer divas most of the time, rendering all these "techniques" and "suggestions" useless.
@EmilyBache-tech-coach7 күн бұрын
Part of my job as a technical coach is helping good software developers realize they can be even better and get even more done if they work well in a team.
@CsyroxXx9 күн бұрын
Thats good !!! I will think how to implement this in our team.
@EmilyBache-tech-coach8 күн бұрын
Happy to hear that!
@Huey-ec19 күн бұрын
I like them just fine on teams when no one is bringing their ego to the table.
@EmilyBache-tech-coach8 күн бұрын
There are definitely better and worse ways to do code review
@jwolpert10 күн бұрын
Code reviews…not awesome. But very short regular code walks with the entire team (yes, including non-coders) focused specifically on what a developer thinks are the one or two most salient *functional* elements being worked can really help. As they say, “Every line of code can turn out to be a business decision, and every business decision that doesn’t understand the code is risking being a bad one.” I’ve seen marketing people come up with non-trivial innovations and catch what would have been a time consuming blunder, just by walking the code with a developer and applying common sense and their knowledge of the larger context. (By the way, “strong style” is great.)
@EmilyBache-tech-coach8 күн бұрын
That style of walkthrough with a team sounds great, glad you've had some success with it.
@dadlord68912 күн бұрын
At this stage we do have really cool software but like 90% of it is sucks. And it sucks grandiosely. To the point where I am struggle typing simple comments on KZfaq due to stupidity of the virtual keyboard on my tablet. And years doesn't change it.
@EmilyBache-tech-coach11 күн бұрын
Yeah, software is hard
@dadlord68912 күн бұрын
I had once this "code review" approach in a team I was working. It was the most miserable team I ever worked with. I see it so that your feature should just work, has and entry point and the scope of it's effects was easily determine and debugable. Well, I guess the closer you are to ECS and further from OOP - the easier your life. But what do I know
@EmilyBache-tech-coach11 күн бұрын
I'm all for avoiding miserable team experiences.
@aslkdjfzxcv977914 күн бұрын
but how am i gonna nitpick trivial stuff? 😆
@EmilyBache-tech-coach11 күн бұрын
If you only find trivial issues in code reviews that speaks well of your colleagues I guess.
@nymann924214 күн бұрын
Great video, would've liked to have heard a mention about mutation testing (as you did in the older "Introducing the Gilded Rose Kata and writing test cases using Approval Tests") as it was a concept that I really think compliments approval testing as we want to make sure we don't change behavior only the strcuture.
@EmilyBache-tech-coach11 күн бұрын
Yes, mutation testing is a useful approach. Couldn't quite fit it into this video tho
@countbrapcula-espana15 күн бұрын
Code reviews among "equal" peers is toxic and annoying. The solution to avoid the toxicity is owning your own company and do it your own way.
@EmilyBache-tech-coach11 күн бұрын
I'm all for avoiding toxic relationships with peers. I don't share your view on this solution though.
@robertgeifman16 күн бұрын
I am ashamed of say so, but I was so bullied by colleagues "offering help" by rejecting my changes so often, that I landed in a massive burnout, and am still not over the PTSD related to the code reviews, which went mostly about spaces vs. tabs and code formatting. I'd love to try pair programming, though I'm not sure it'll work for me taking into account that I'm on the autistic spectrum, and I get my best work done alone and in silence. Also I want to add that too much communication and collaboration is overrated, or at least not for everyone. Seeing for example the extensive threads on Swift forum, for example, I can't help but wonder when people have time to think, code and live in addition to writing all these messages. Seeing your great video I'd love to get your feedback on the above, to hear your perspective.
@EmilyBache-tech-coach15 күн бұрын
I'm sorry to hear about your burnout and I'm glad you'd be willing to try pair programming despite your reservations. I don't know a lot about autism but I have heard reports that collaborative programming works well for some people with that condition - see for example this experience report by Sal Freudenberg: cucumber.io/blog/bdd/inclusive-benefits-of-mob-programming/
@clumsyjester4596 күн бұрын
"tabs vs. spaces" and "code formatting" has no place in code reviews. There are automatic tools for that called "linters". A developer can run them locally to automatically fix 95% of the problems (with a single shell command) and then do the remaining 5% manually. A CI pipeline can check, that all problems have been fixed. Using code reviews for this is absurd.
@juanjosefarina16 күн бұрын
Code reviews are awesome. It just depends on leadership, and I guess some times leadership is awful. I'm lucky to have a great lead, and learning a lot with each CR.
@EmilyBache-tech-coach16 күн бұрын
I'm happy to hear you're learning a lot from your code reviews! Mentorship is really important in a team.
@dawnrazor16 күн бұрын
Why aren’t people more concerned with design skills rather than coding skills. Good design will always help with coding. There should be such a thing as design reviews rather than coding reviews. If you get the design right then the coding is dramatically simplified and you’re less likely to make bad decisions. But in the advent of agile which most companies are abusing and getting it wrong, the idea of upfront design has become anathema.
@EmilyBache-tech-coach16 күн бұрын
Agile design is done a little differently, it's true. I'm all for better design skills.
@temper828116 күн бұрын
Why should you have shared code ownership?
@LDiCesare16 күн бұрын
Because when the only guy who knows a critical piece of code gets hit by a car, you don't want to shut down the firm or lose months understanding their complex hardly readable code?
@EmilyBache-tech-coach16 күн бұрын
Or if someone wins the lottery, to put a more positive spin on it, you want to be able to continue to work with their code after they go off on their yacht.
@temper828115 күн бұрын
@@EmilyBache-tech-coach But that's not the same thing. Owning code does not mean someone else doesn't understand or isn't aware of how it works and what it does. For instance renting a house doesn't mean I own the house, but I do live in it. When someone says "shared-ownership" that translates to me as "shared responsibility". Shared responsibility is not obvious advice? Shared responsibility is not always good, so why is shared ownership of code recommended? Genuine question.
@EmilyBache-tech-coach15 күн бұрын
Shared ownership is recommended because it's been found to work better than the alternatives. That is certainly my experience.
@joergw16 күн бұрын
right, but also wrong. We rely deeply on PRs and code reviews, but if this is the answer for staffing or training you have asked the wrong question. There are additional techniques you can use, but all/most of them dont make code reviews unecessary
@EmilyBache-tech-coach16 күн бұрын
I'm not against code reviews - I'm trying to point out if it's the only mentoring or training activity going on in a team then you're missing out.
@SolidWorksMastery-hr4sg16 күн бұрын
i'm working on a startup as a solo developer , it's my first experience and i wish if some senior could review my code , i think it's a matter if someone is open for critics and want to improve and don't take other opinions personally
@EmilyBache-tech-coach16 күн бұрын
Working solo in a startup sounds really challenging! I hope you find a mentor who can help you.
@sergeynosov818017 күн бұрын
Code Reviews are also extra sets of eyes on the code; and precious due to that. Developers are people and make mistakes. We catch small mistakes or omissions in code reviews all the time. Also, during code reviews someone may point out a corner case the original developer has not considered.
@EmilyBache-tech-coach16 күн бұрын
You're right, code reviews are valuable for those things. It's not a replacement for mentorship and teambuilding though.
@ken-kd5vr17 күн бұрын
LGTM: Let's gamble, try merging 👍
@EmilyBache-tech-coach16 күн бұрын
I think most developers benefit from feedback from their peers before their code hits production. Feedback from actual users can have much worse consequences.
@manishm947817 күн бұрын
Great topic. I was thinking recently about how the team i'm in lacks cohesion and technical leadership. Every dev writes code in his own way. I try to follow what the senior most dev does, but he changes his mind from project to project and doesn't share his thinking easily 😄
@EmilyBache-tech-coach17 күн бұрын
Mentoring and technical leadership are so important!
@edgeeffect17 күн бұрын
Outside of work, I like to do projects in new languages or using different libraries... you know the sort of thing. And the one thing I really wish I had that I do have at work is a nice code review. When you're deep in the sea of "what the hell am I doing?" there's nothing like a team mate saying either "yeah, you're on the right path" or even "what the hell is this guk?!" it's all better than trying to draw my own map as I go.
@EmilyBache-tech-coach17 күн бұрын
To build something substantial it means collaborating with others - that can be rewarding too.
@i-am-the-slime11 күн бұрын
@@EmilyBache-tech-coachI disagree. The video game Animal Well was coded by one person. So we'mre quite a few others.
@kzelmer17 күн бұрын
Pair programming is great but many devs dont like to share the process with a colleague.
@EmilyBache-tech-coach17 күн бұрын
I see pair programming as a skill you can learn. It's not so much about preferences as skill.
@kzelmer17 күн бұрын
@@EmilyBache-tech-coach it probably is, but more of a soft skill than a hard skill
@georgwagner557715 күн бұрын
it's more like they are afraid of showing "bad Code" while missing the opportunity to learn :/
@raulcalvomartin297917 күн бұрын
Honestly. CR are great tool to communicate. If it doesn't work is because the people misusing it. in my experience when CR goes wrong is because of ego. Some people very often can argument about the feature but instead decide to make it personal because of antipathy towards the other or because they want to establish some authority. Let's face it. Is not about CR it is about a toxic culture enable by management.
@EmilyBache-tech-coach17 күн бұрын
Let's focus on practices that enable good communication and collaboration and get the right incentives in place so that's what happens.
@ericmedlock17 күн бұрын
I mean you can but it requires dedication and talent to do it right
@EmilyBache-tech-coach17 күн бұрын
Most things that are worth learning need some dedication to learn them.
@skipodap117 күн бұрын
I hate code review. So few opportunities for alignment and check ins. I prefer pairing.
@EmilyBache-tech-coach17 күн бұрын
I also prefer pairing! Ensemble is even better.
@SlowAside517 күн бұрын
Couldn’t a team push back on ensemble programming by saying that they won’t get as much work done because everyone will be working on the same thing, meanwhile all of the other tasks that need to be done will be sitting there idle? How would you respond to this?
@raulcalvomartin297917 күн бұрын
That's a good point. I even see more conflicts arising if everyone would work on the same thing. How long can a pair programming be maintain until it becomes a passive aggressive shit-show?
@EmilyBache-tech-coach17 күн бұрын
It's hard to measure programmer productivity. What I'm hoping to highlight is that when working as an ensemble a team can better align on technical practices and more easily share knowledge. Modern software engineering is usually more about learning about the problem to solve and managing complexity than simply completing the most tasks.
@renedekat35192 күн бұрын
@@raulcalvomartin2979 Hi, have you tried pair programming yourself? We did this as children before the Internet and before everyone had a computer at home. It was fun and we learned a lot from each other. Later in life I started doing it in my professional capacity, and it's still great. Not only do you learn a lot, it also reduces stress, because you feel supported by others about the changes that are made.
@akauppi217 күн бұрын
Code review is good for situations when there’s outside contributions coming in. Open source projects or PR’s from outside of the team. It’s not great for team-internal collab. They should know each other better than that.
@EmilyBache-tech-coach17 күн бұрын
Absolutely! Teammates need to collaborate closely
@janinefelten55322 күн бұрын
Do you have a link to the study you mentioned at minute 3? :)
@EmilyBache-tech-coach21 күн бұрын
It's a paper published by the ACM - you can find more about it by searching on google scholar. The title is "When, How and Why Developers (Do Not) Test in their IDEs" and Beller is the lead author.
@davide183725 күн бұрын
Wow, I found those refactoring tips pretty unique, and the way everything falls naturally into place near the end was so satisfying. I also had some fun trying to replicate this in Java although initially in a kind of not-Java way that would look as similar as possible to what you showed. You did a great job as always, I can't wait for the next part and eventually any new kata you manage to find.
@EmilyBache-tech-coach25 күн бұрын
Glad you found it helpful! I'm working on a Java version of this kata, it's going to be published later in the year, so watch out for that!
@davide183717 күн бұрын
Thanks, that's great news. I'll be looking forward to it and I'm eager to see how the refactorings can be improved even further with the power of object-orientation and classes.
@java_Marcelo-xx5nw26 күн бұрын
Thank you for share!
@bernhardkrickl519728 күн бұрын
I still don't get it. I get that with characterisation testing you just accept whatever the code does and nail it down by writing a test for it. Then I understand that with approval testing you think of what the code should do and write a test and then make the code do it. But what is the difference between that and regular TDD/BDD? Also, you didn't even precisely do that. You had a PNG of the result but the executed test didn't check against the PNG, instead you changed the implementation first to produce a red test and then adjusted the text files from your printer to make the test green, comparing it with your own eyes to the PNG. So, what in all this is the crucial part that makes it Approval Testing and sets it apart from other things?
@EmilyBache-tech-coach27 күн бұрын
It's similar to both characterization testing and TDD. I think you've done a good job actually of explaining the differences.
@skipodap128 күн бұрын
I think you bring more unique and clear content than just about anyone out there. This is great
@EmilyBache-tech-coach25 күн бұрын
Thankyou!
@EmilyBache-tech-coach25 күн бұрын
Thanks!
@georgwagner5577Ай бұрын
Too bad, I had to pause this vid. Will return later. But what I've seen so far was awesome. :) You're awesome, Emily!
@EmilyBache-tech-coachАй бұрын
Glad you liked it! Hope you enjoy the rest too.
@ricardoguzmanvelascoАй бұрын
Good session. Gonna use that with a team I'm coaching. From the content, we here in my dev group (The Guild from Spain) do like how maaany names in early stages of its naming process end up vanished, like inlined or the whatnot. That's why we came up with the most satisfying and writing-pleasant alternative to appleasauce: jitanjaphores!
@EmilyBache-tech-coachАй бұрын
It's a cool name, jitanjaphores! So long as everyone recognizes obvious nonsense then do whatever your team prefers.
@RoamingAdhocratАй бұрын
ever find yourself moving words out of the function name and into a parameter with a default value you'd never change e.g. `fn SendTpsReport_WithCoverSheet(TpsData)` becomes `fn SendTpsReport(TpsData, CoverSheet = true)` (or could be into a parameters object with a default value)
@EmilyBache-tech-coachАй бұрын
Interesting! I'm a little skeptical of boolean arguments but I think the point you're making would still stand with a more complex type too. The idea of the final steps of naming as a process is to make domain objects with encapsulation of their data, so probably something more like TpsReport.GenerateFrom(data).SendWithCoverSheet() ?
@RoamingAdhocratАй бұрын
I kinda feel this video should've been sponsored by NamedTuple. (Congrats on the sponsorship!)
@EmilyBache-tech-coachАй бұрын
LOL! Thanks
Ай бұрын
Really useful video thanks Emily !
@EmilyBache-tech-coachАй бұрын
Glad it was helpful!
@JhanaratoBhikkhuАй бұрын
As an exercise, I used an approval test with the Leaderboard Kata in Python. I pretty much did what you did in this video, in my case implementing __str__ on the Leaderboard class. The main issue I had was the lack of integration with PyCharm. I had to manually approve files. Not a deal breaker though.
@EmilyBache-tech-coachАй бұрын
That sounds like a good approach! I agree better tool support would help.
@JhanaratoBhikkhuАй бұрын
Thank you for bringing Fowler's book to life. Bravo!
@EmilyBache-tech-coachАй бұрын
Thanks!
@codeRightАй бұрын
Hi Emily, can you provide a link to the commit message notation you're using? Specifically, I want to know what the difference between "R" and "r" is when you're doing a refactoring commiit. I vaguely remember reading an article about this but can't remember enough to search for it. TIA
@EmilyBache-tech-coachАй бұрын
It's Arlo's commit notation github.com/RefactoringCombos/ArlosCommitNotation. R indicates more risk than r.
@ddanielsandbergАй бұрын
Hi Emily. In jetbrains products you can use ctrl+shift+arrows to move a function up and down without "jank-and-paste". Pretty sure Fleet and most other editors have similar features.
@EmilyBache-tech-coachАй бұрын
Thanks - you're right I could have used that. I didn't like the way it moved it one line at a time through the middle of the rest of the code though - it was difficult to see when I'd moved it to the place I wanted it.
@codeRight16 күн бұрын
@@EmilyBache-tech-coach I've started using this notation and I must say, it's very helpful when I'm sifting through my commit logs and trying to find something. One thing I'm finding a little hard to stick with is the tense of the commit message. I'm used to using past tense (?), e.g. "Added/Changed/Refactored" instead of "Add/Change/Refactor". It's not a biggie but I end up with some niggling inconsistency in the commit messages -- I know, it's bordering on compulsiveness. Thanks again for the learning.
@JhanaratoBhikkhuАй бұрын
Well that was a lot of fun. I finished all five katas, not including the paged HTML excercise. The two that tripped me up were the ISP and LSP. I really liked the way the katas lead you to the solution.
@EmilyBache-tech-coachАй бұрын
Very happy to hear you enjoyed doing these code katas!
@dbaltorАй бұрын
I'm so glad to learn that you've got your first sponsor. Will definitely have a look at their product. Huge congratulations! Your videos offer real value whilst being inspiring as well. Please keep going!
@EmilyBache-tech-coachАй бұрын
Happy to hear that! Hope you find Tuple's product interesting too.
@osman3404Ай бұрын
I use LLMs to analyze a large class or very large function and tell me what refactoring could be used and how the end result may look like. Then I use a real refactor tool to do the actual work
@EmilyBache-tech-coachАй бұрын
That sounds like a good approach
@vakeelkhan2968Ай бұрын
0:38 😊
@EmilyBache-tech-coachАй бұрын
Yeah it's good news isn't it!
@JhanaratoBhikkhuАй бұрын
Great video. I'm only a hobbyist these days and generally use Python. I'm already thinking about how to speed up my tests, especially faking interaction with Elasticsearch. I also just got a copy of "Working Effectively with Legacy Code" and note that you were included in the acknowledgements!
@EmilyBache-tech-coachАй бұрын
Using a test double instead of interacting with the real elastic search sounds like a good strategy, glad you found the video helpful. Yes I was a reviewer for Michael Feathers book back in the day. It's still a classic.
@JhanaratoBhikkhuАй бұрын
@@EmilyBache-tech-coach The book is indeed a classic. A second edition would be great!
@marcobaccaroАй бұрын
Well done, Emily. Good old classic content.
@EmilyBache-tech-coachАй бұрын
These classic techniques are new for a surprising proportion of the developer community :-)