Some wisdom I read online a few years ago: "There are two types of code: Code that's perfect, and code that ships." It's true. I'm on our company's integrations team. While we have a development team that builds our company's products, our team is focused on implementing new customers and building custom integrations with the customer's other systems (not always code-based). As a self-taught dev, I know I have plenty of code out there that could have been written better by our dev team, or even by myself years later. But you know what? Some of that code has been in production driving important business processes for a decade and I haven't heard a peep from the help desk. Sure, maybe with optimizations those process could run a fraction of a second faster, but they don't need to. It's not perfect, but it works. That's what matters.
Great videos, Tim :) Every time there is a notification I see that you talk about questions that really bothered me (or still bother) at some point of time
Really helpful video Tim, it ties in nicely with your other video on estimating project completion time as it again nails down the focus on "priorities first", yet can still leave a window for quality improvement if there's slack time available. It partly broaches the topic of technical debt (roughly: sacrificing maintainability to meet a deadline). There's probably an inverse relationship between time given for a project and the size of technical debt. When discussing priorities, it's probably not the first thing on a customer's mind, but ease of maintenance might need to be part of that conversion, particularly if the deadline is tight.
When you talked about the money factor for people who do private projects, i think there's an easier argument to make then as said in the video. Namely, _it costs money to live. Every day you spend on your project is another day you spend money on the primal stuff: food, warmth, shelter, etc._ So yes indeed, everyone has an hourly rate no matter what you spend that time on.
Deploy the app when its functional and redeploy or use CI/CD when a new feature has been implemented, especially for personal projects. It something I have started to do with apps recently just to get demos of my skills out there.
Thanks man. Great stuff. I came to similar conclusions over the years and I am glad to see someone else using this approach. Thanks for sharing and encouraging people around you! Keep it up!
Hi Tim, I just started watching your awesome videos 3 days ago they are really amazing. I hope you talk about the security "Security Headers, Authentication and Authorization, SQL Injection,...and other security topics" and how to handle them to make our app as secure as possible. Thanks
Security is hugely important and I discuss it often, but I will add your suggestion to my list. Check these out - ua-cam.com/video/rFncI9yfY-E/v-deo.html; ua-cam.com/video/9QU_y7-VsC8/v-deo.html; ua-cam.com/video/kpSwmLlMu9E/v-deo.html
One of the points of the Agile movement is the definition of "Done". You need the criteria (sometimes defined via ATDD or BDD) to know when you must end, then once your application passes all those criteria, it's finished. While you reach that point you can also use the MVP or minimum viable product technique of Lean methodology, showing the client your advances in functional prototypes to learn whether what the client asked for is actually what he wants. Agile assumes there will be changes even with a signed paper so it embraces them, trying to detect them as quickly as possible so that any costly modification can be estimated and dealt with it correctly. You might get the money if you stick to the signed paper conditions but if the client is unhappy with your work because you decided to just appear on the last day with the fully working program and he doesn't like what he sees, he won't call you again. Which leads to my main problem with freelancer programmers, they usually don't care about technical debt: the important thing is to finish in time, deliver the product and move on. They are never forced to learn to refactor, they don't even need to know good practices, as even by brute force you can get a first working release. Compare that to in-house teams who have to deal with the code for years and where technical debt actually accumulates interest and has to be paid from time to time in order to continue working.
Good points. Remember, even in agile, changes cost time and money. If the product owner keeps making changes such that you don't get to the other "required" features, then you won't reach the MVP even near the targeted delivery dates. All changes have to be assessed based on the value they add verses the cost and impact on the target date for 'Done'.
This is a difficult topic! I have found a line in the sand that works. Often when I am writing a client-specific solution, it leads to the business case for a commercial version of the product. In this case, that insight can be documented in code with ToDo tasks prioritized as "future development". There is never enough time to spin this off into external documents. Comments can become a line in the sand that can stop the temptation of feature creep...
Please make a video about the importance of Data Structure and Algorithms for a Developer and basically how we can learn DS and Aglo. By the way, you are doing an awesome job. Love!
There are lots of online courses to practice this, try taking one. The practical Visual Studio knowledge that Tim teaches is targeted towards real-world issues not discussed anywhere else. Complicating the lessons with data structure and analysis would create a learning wall for new developers...
Hey Tim, I love your videos and I'd like to submit a video idea: How to comprehend with unexpected problems in development? Just to give an example, for the last month I've been working on refactoring a .Net Core - mongodb file management system that is using fs for file storage. I've encountered everything - learning a new framework (NestJS), migration scripts, cross-support (some dumbasses at work hooked the old file managment system up to a new product, so i had to ensure nothing hits the fan over there), changed api, host os migration... And this took A LOT of time. Much more than I expected to make it perfect and it can still improve in my mind. So do you have any advice on dealing with stuff like this?
Unrelated to the video (sorry but too excited not to share), I start my first software developer position on December 14th! Unfortunately the tech stack is Angular and NodeJS but I’ll still keep an eye on C# developments 😉. Thanks Tim for the software engineering practices you’ve taught me throughout the years, it absolutely helped me nail this job.
Hello Tim, do you have practical experience with the actor model? I have been using Akka.NET in my projects for some time, both in the backend and frontend area (fat clients based on C#/WPF). In my opinion, this is a fantastic runtime for all kinds of .NET applications, of course especially when issues such as concurrency, scalability, redundancy and resilience are important (but not only). Nevertheless, compared to many other topics in the community, surprisingly little attention is paid to this topic, not even here on UA-cam and also not in the context of micro service architectures. It seems to have only been a relatively exotic side issue for many years. Why is that? What is your opinion? A video on this topic would be a great thing! Thank you! Cheers, Felix
Many thanks for your tip, i have the same problem and I'm always deliver my work late and spent too much time while trying to be perfect :( and i can't quit this hobbit
Man, That came on time ... I just have started a project and I am banging my head in the wall trying to figure out the perfect clean architectural way to do it... that bugged me for the whole day without even starting... With that being said, I would appreciate if you can answer this question cuz curiosity is killing me at the moment So in a "WPF MVVM with EntityFramework Project": in a three-layer architecture we got, Ui ( Consists of View, ViewModel), BL (Models, ... maybe something else) (DA, ...) After long research, I found people doing CRUD operations in ViewModel, Which is something I don't understand (some people debate it should be in Model) ... if I want to adjust the data before I save it in the database shouldn't I do that in the BL layer ... and what should be in DA layer in case of EntityFramework... I found the DA layer probably nonexistent cuz EntityFramework does all the magic ... and Also if DA has some Code does it directly give it to ViewModel or to BL First, then BL handles it to the ViewModel?
Most of the time (not all the time) is useless to teach these topics to beginners because they think they can defy everyone, so they prefer to take the long path and start to really appreciate this information down the road.
Also important: when copying code from Stack Overflow, rewrite it so you understand it yourself :)
Important point, thanks
Some wisdom I read online a few years ago: "There are two types of code: Code that's perfect, and code that ships." It's true. I'm on our company's integrations team. While we have a development team that builds our company's products, our team is focused on implementing new customers and building custom integrations with the customer's other systems (not always code-based).
As a self-taught dev, I know I have plenty of code out there that could have been written better by our dev team, or even by myself years later. But you know what? Some of that code has been in production driving important business processes for a decade and I haven't heard a peep from the help desk. Sure, maybe with optimizations those process could run a fraction of a second faster, but they don't need to. It's not perfect, but it works. That's what matters.
Thanks for sharing.
A former boss of mine used to tell our customers “TQR - time, quality, resources - you only get to pick two”
Love it!
Great programmers are philosophers. Awesome video.
Truth!
Very accurate description of perpetual struggle and urge to make things perfect. Love the way you approach the topic. Cheers
Glad you enjoyed it!
On behalf of my development team and myself, thanks a lot, Emad from Libya.
You are all welcome
wow, the timing of this video is amazing. I'm having this exact dilemma right now for my project. So much code in it that I want to rewrite.
Glad I could help! Remember your Time/Cost/Quality priorities.
Hi,you are awesome.i liked your videos very much..I have one suggestion.can you please add a full tutorial of Xamarin Forms?
Added to the list of suggestions, thanks
@Anon Thank you ..
Great videos, Tim :) Every time there is a notification I see that you talk about questions that really bothered me (or still bother) at some point of time
I'm glad you find them helpful.
Really helpful video Tim, it ties in nicely with your other video on estimating project completion time as it again nails down the focus on "priorities first", yet can still leave a window for quality improvement if there's slack time available.
It partly broaches the topic of technical debt (roughly: sacrificing maintainability to meet a deadline). There's probably an inverse relationship between time given for a project and the size of technical debt. When discussing priorities, it's probably not the first thing on a customer's mind, but ease of maintenance might need to be part of that conversion, particularly if the deadline is tight.
Its a balance every developer has to account for, but rarely one a client wants to pay for.
Just the thing I needed for the day .... Thanks
You are welcome.
When you talked about the money factor for people who do private projects, i think there's an easier argument to make then as said in the video. Namely, _it costs money to live. Every day you spend on your project is another day you spend money on the primal stuff: food, warmth, shelter, etc._ So yes indeed, everyone has an hourly rate no matter what you spend that time on.
That is a great observation for all aspects of our life.
Thanks for giving the time to explain how to deal with trying to be perfect.
Glad it was helpful!
This will really help me thanks
Good to hear!
Very helpful. I'm working on a project now and this motivated me 🙂 Thanks
Great!
Deploy the app when its functional and redeploy or use CI/CD when a new feature has been implemented, especially for personal projects. It something I have started to do with apps recently just to get demos of my skills out there.
Excellent example. Huge value in that approach for your person portfolio. Remember to do an end-to-end regression test periodically.
@@IAmTimCorey I might need a refresher on where or how to learn/find end-to-end regression tests.
I always struggle with this.
Thanks for the video it was very helpful
Happy to help!
Perfect episode ❤️ thanks Tim
You are welcome.
An urge that I have been fighting for a long time. I always feel that I can make the application better. Great video
Glad it helped
your content is perfect trust me love you tim😍😍
if only...
Outstanding topics as usual.
Glad you think so!
You are a great person!
Just someone that tries to help, but thank you.
So real for me on this sprint. 😄
That is why sprints are timeboxed.
Thank you for this!! 👌
No problem!!
I always struggle with this :D
I was happy to see this video pop up in my notifications. Thanks, Tim!
Happy to help!
Thanks man. Great stuff. I came to similar conclusions over the years and I am glad to see someone else using this approach. Thanks for sharing and encouraging people around you! Keep it up!
Awesome, thank you!
Hi Tim,
great advices! This topic is my pain point number 1 😵
I've to watch this video every day I work!!
You got this!
exactly what I need to hear.. thank you for this
You're so welcome!
Thank you TIM !!
Welcome!
Things on my priority list:
1. Make stuff actually work
2. Make stuff work good
What if step 2 requires starting from scratch?
@@jokinglimitreached1503 See step 1.
@@darthfikus5206 Step 1 doesn't help step 2, if the code is fundamentally broken
@@jokinglimitreached1503 Au contraire, if code is broken step 1 is just the remedy.
Can be an endless loop.
Great explanation 🙂👍 This was necessary as it comes from a developer.
Glad it was helpful!
thanks tim!
No worries!
This is great topic and excellent video. I love to hear your thoughts on Agile in general.
Thank you! I added that to my list of suggestions
I think the way to keep quality and speed is to reduce the number of requirements. Less functionalities, same quality = less time, same quality.
it is a balancing act. Success come to those that do it well and keep the customer happy.
Hi Tim,
I just started watching your awesome videos 3 days ago they are really amazing.
I hope you talk about the security "Security Headers, Authentication and Authorization, SQL Injection,...and other security topics" and how to handle them to make our app as secure as possible.
Thanks
Security is hugely important and I discuss it often, but I will add your suggestion to my list. Check these out - ua-cam.com/video/rFncI9yfY-E/v-deo.html; ua-cam.com/video/9QU_y7-VsC8/v-deo.html; ua-cam.com/video/kpSwmLlMu9E/v-deo.html
One of the points of the Agile movement is the definition of "Done". You need the criteria (sometimes defined via ATDD or BDD) to know when you must end, then once your application passes all those criteria, it's finished. While you reach that point you can also use the MVP or minimum viable product technique of Lean methodology, showing the client your advances in functional prototypes to learn whether what the client asked for is actually what he wants. Agile assumes there will be changes even with a signed paper so it embraces them, trying to detect them as quickly as possible so that any costly modification can be estimated and dealt with it correctly.
You might get the money if you stick to the signed paper conditions but if the client is unhappy with your work because you decided to just appear on the last day with the fully working program and he doesn't like what he sees, he won't call you again.
Which leads to my main problem with freelancer programmers, they usually don't care about technical debt: the important thing is to finish in time, deliver the product and move on. They are never forced to learn to refactor, they don't even need to know good practices, as even by brute force you can get a first working release. Compare that to in-house teams who have to deal with the code for years and where technical debt actually accumulates interest and has to be paid from time to time in order to continue working.
Good points. Remember, even in agile, changes cost time and money. If the product owner keeps making changes such that you don't get to the other "required" features, then you won't reach the MVP even near the targeted delivery dates. All changes have to be assessed based on the value they add verses the cost and impact on the target date for 'Done'.
Hi Tim, thanks again for a great video. Just wondering if you have any upcoming Blazor videos planned?
I won't commit to specifics, but stay tuned.
Thanks for the great content
My pleasure, really!
Great advice!
Glad you think so!
Nice.. thanks ❤️
Welcome 😊
great video !! Thank you
Glad you liked it!
This is a difficult topic!
I have found a line in the sand that works. Often when I am writing a client-specific solution, it leads to the business case for a commercial version of the product. In this case, that insight can be documented in code with ToDo tasks prioritized as "future development". There is never enough time to spin this off into external documents.
Comments can become a line in the sand that can stop the temptation of feature creep...
Thanks for sharing
Please make a video about the importance of Data Structure and Algorithms for a Developer and basically how we can learn DS and Aglo. By the way, you are doing an awesome job. Love!
There are lots of online courses to practice this, try taking one. The practical Visual Studio knowledge that Tim teaches is targeted towards real-world issues not discussed anywhere else. Complicating the lessons with data structure and analysis would create a learning wall for new developers...
Added to my suggestions list.
Hey Tim, I love your videos and I'd like to submit a video idea:
How to comprehend with unexpected problems in development?
Just to give an example, for the last month I've been working on refactoring a .Net Core - mongodb file management system that is using fs for file storage.
I've encountered everything - learning a new framework (NestJS), migration scripts, cross-support (some dumbasses at work hooked the old file managment system up to a new product, so i had to ensure nothing hits the fan over there), changed api, host os migration...
And this took A LOT of time. Much more than I expected to make it perfect and it can still improve in my mind.
So do you have any advice on dealing with stuff like this?
Added to the list, thanks
Unrelated to the video (sorry but too excited not to share), I start my first software developer position on December 14th! Unfortunately the tech stack is Angular and NodeJS but I’ll still keep an eye on C# developments 😉.
Thanks Tim for the software engineering practices you’ve taught me throughout the years, it absolutely helped me nail this job.
Awesome! Congratulations! I hope you love it.
Hello Tim, do you have practical experience with the actor model? I have been using Akka.NET in my projects for some time, both in the backend and frontend area (fat clients based on C#/WPF). In my opinion, this is a fantastic runtime for all kinds of .NET applications, of course especially when issues such as concurrency, scalability, redundancy and resilience are important (but not only). Nevertheless, compared to many other topics in the community, surprisingly little attention is paid to this topic, not even here on UA-cam and also not in the context of micro service architectures. It seems to have only been a relatively exotic side issue for many years. Why is that? What is your opinion? A video on this topic would be a great thing! Thank you! Cheers, Felix
Whats your opinion in asp boilerplate or similar frameworks?
They can be great if you know what they are doing and agree with their choices.
Many thanks for your tip, i have the same problem and I'm always deliver my work late and spent too much time while trying to be perfect :( and i can't quit this hobbit
You can do it! I hope my talk helps you get there.
@@IAmTimCorey I hope so, many thanks for you
Man, That came on time ... I just have started a project and I am banging my head in the wall trying to figure out the perfect clean architectural way to do it... that bugged me for the whole day without even starting...
With that being said, I would appreciate if you can answer this question cuz curiosity is killing me at the moment
So in a "WPF MVVM with EntityFramework Project":
in a three-layer architecture we got, Ui ( Consists of View, ViewModel), BL (Models, ... maybe something else) (DA, ...)
After long research, I found people doing CRUD operations in ViewModel, Which is something I don't understand (some people debate it should be in Model) ... if I want to adjust the data before I save it in the database shouldn't I do that in the BL layer ... and what should be in DA layer in case of EntityFramework... I found the DA layer probably nonexistent cuz EntityFramework does all the magic ... and Also if DA has some Code does it directly give it to ViewModel or to BL First, then BL handles it to the ViewModel?
I'm so glad to hear you are a self-talker developer too 😂
Yep.
Any good app stores you know of for hosting apps apart from the big three?
Those are the best ones.
Most of the time (not all the time) is useless to teach these topics to beginners because they think they can defy everyone, so they prefer to take the long path and start to really appreciate this information down the road.
Please, say that it is not so! LOL ... I believe its worth sharing, even if just to plant the thoughts for that future you speak of.
11:50 thumbs up
Thanks!
We called that Developer Gold Plating.
yup.
👍
Thanks