Detailed Notes
Welcome back to our podcast series! In this episode, Navigating Software Development Challenges, we continue our journey through Season 21, dedicated to empowering developers with essential skills and insights. Whether you're a seasoned coder or just starting, we're here to help you navigate the complex world of software development.
Over the years, we've witnessed the evolution of our focus from a broad spectrum to a more refined approach. Our goal is to assist developers in honing their craft, addressing common challenges, and, ultimately, delivering high-quality solutions to their clients.
In today's discussion, Michel and Rob delve into the art of problem-solving in the realm of software consulting. It's not uncommon for clients to find themselves in tricky situations, often due to factors like vendor lock-in or technology sprawl. As consultants and technologists, our task is to guide them out of these predicaments and set them on a path to sustainable success.
Navigating Software Development Challenges
One prevalent issue we've encountered is the tendency for companies, particularly non-technical ones, to rush into technology solutions without proper research or planning. This approach often leads to short-term fixes that fail to scale or maintain over time. Instead, we advocate for a more strategic approach, considering factors like the client's needs, budget, and long-term goals.
A case study shared during the podcast highlights the importance of thorough assessment and strategic intervention. In this scenario, Rob's company has a client who had been using a poorly maintained system built by a side hustle developer, resulting in numerous technical challenges and inefficiencies. By conducting a comprehensive analysis and implementing targeted solutions, we were able to revamp the system, streamline processes, and enhance overall functionality.
Leave The Code In A Better Place
Central to our approach is the concept of leaving code and processes in a better state than we found them. Whether it's fixing bugs, optimizing performance, or implementing best practices, our goal is to deliver tangible improvements that drive long-term value for our clients. Moreover, effective communication and documentation ensure a smooth transition and empower clients to manage their systems effectively.
As we navigate the ever-changing landscape of software development, it's essential to remain adaptable and innovative. By embracing agile methodologies, continuous improvement, and collaborative problem-solving, we can overcome challenges and deliver exceptional results for our clients.
In closing, we invite you to join us on this journey of growth and learning. Whether you're a developer, consultant, or technology enthusiast, there's always something new to discover and explore. Together, let's elevate the standards of software development and make a positive impact on the world.
Thank you for tuning in, and until next time, happy coding!
Additional Resources * What Goes Into Building Software - develpreneur.com/what-goes-into-building-software/ * The Importance of Writing Readable Code - https://develpreneur.com/the-importance-of-writing-readable-code/ * Coder or Developer Learning to Solve Problems - https://develpreneur.com/coder-or-developer-learning-to-solve-problems/ * Master Agile, Scrum, Sprints, and The Software Development Life Cycle - https://develpreneur-classes.teachable.com/p/software_development_life_cycle
Transcript Text
[Music] well hello and welcome back we are continuing season 21 uh for those of you that are podcast listeners the rest of you uh thank you for hanging out with us as you out on the YouTube channel we're continuing to talk through how to be better developers and this is really our focus is our focus is our Focus now we have drifted a little bit if you go way back uh I think develop andur is now seven or eight years old we' been around I think since 2016 2017 I forget when we originally uh launched but we have drifted we sort of started with a very tight Focus but then as we've added content and we've just sort of put stuff out there we've we've gotten very Broad and one of the things we want to do is bring it back down our avatars was not it was not an avatar it was like a Coliseum of avatars that we were servicing and so now we're trying to bring stuff down Avatar just for those you don't know it's your ideal customer it's like this is who you want to talk to it is defining your Niche down to one person and knowing that person as far as like how old are they what do they like to do what are their Hobbies what is their what is their day job like what is their commute like it's those kinds of things and we're not going to get too deep into that piece but if you go Google uh how do I Define my avatar or how do I create my business Avatar or my ideal customer those things you'll find lots of recommendations around that that's going to be some of what we discuss as we're building the the develop andur brand here uh today we're we are going to talk a little more technology we're going to talk or I guess more problem solving uh we have in the past we have discussed some of our current uh challenges and and some of the customers we' run into and this episode I want to talk about uh something we we actually find fairly often it is a customer that has gotten themselves into a bind of some sort for a variety of reasons we'll talk about but they've gotten themselves into you know sort of like got themselves in a bind they're in a little bit of a corner and they're trying to figure out a way out and how do we as a consultant as a technologist as a problem solver help them out of that how do how do we get them out of that corner and not only get them out of that but I think one of the best things we can do is set them up so they don't end up back there so that they are taking some steps to avoid getting back into that situation and there's a lot of different ways that you can you can be sort of uh pigeon hold and things like that there's vendor lock in there is uh essentially what I call technology sprawl where you just have got you've just grown and grown and grown and grown and You' just got 18,000 Solutions of technology so you may have like we've been places there's three or four people in the shop and there are 20 different technologies that they're trying to maintain which is just way way too much it it becomes more of a headache of Switching gears than it is you know actually solving anything and I think I'll start with before I get into like my you know my specific story that I did want to talk about that we did what is I go start with Mike like what do you what do you see as the most common uh like you maybe one or three issues that you've run into as far as like these businesses gotten themselves into because I know you've dealt with a lot of small businesses where they've sort of they just haven't done they haven't done what we would we would say the ideal solution is and so what are maybe some of like the the common pitfalls you've seen so interestingly enough so some of the ones that uh are one of the biggest problems I see a lot of companies doing especially non-technical companies that want to get into Tech where they want like a mobile app or they want like a desktop application or they want some type of techn uh technology Sol solution to their problem what a lot of them do is they go out and they do not do a lot of research they find the first product online that kind of meets their needs they buy it they implement it and now here we are 3 four years down the road and they have to hire someone to come in and maintain this because no one supports it anymore the company's either out of business they don't do proper updates or the software never did what they wanted and they have so much customization that it just doesn't work anymore it it's like a hot mess um that's one of the number one problems I have um number two is it's a startup or they're in that startup mentality and they want to do things cheap so they don't want to spend money and instead they go out and find all these open- Source possible solutions for their problem mishmash them together without much thought and quickly throw something out there uh the problem with those uh instances is they usually are hard to maintain or they do not scale so once the company starts to grow you run into a situation of oops this doesn't work we have to either go back and rewrite it or throw a lot of money and development time into this to actually make it work the way we expect it to work and probably the third thing um companies really have no freaking clue what they're doing and it's a hot mess from the beginning they hire people to do what they think they want and you you typically end up in that swing set scenario uh for those of you that probably might not have seen this uh Google swing uh what is it swing set problem or roller coaster uh design online you'll see a little cartoon which starts with a uh tree swing and ends with the customer really wanting a tire swing and that is kind of the third situation I find myself in where the company either pitches one thing and delivers something else or they totally read what the uh customer wants and they build something that doesn't meet the problem it's something that's a total waste of time yeah and I think that that that is probably the the biggest problem regardless is is that communication thing that you get from the you know that that tree swing uh and I think there yeah I think there's also the roller coaster example of that that are totally it shows you the difference the different things that are communicated and how vision being translated into reality can be uh not the same they can be very very different uh the one I want to talk about the example I've got is I think probably that second one a little bit these are it's a little bit that they you a little bit of a budget kind of thing but this is also something I've seen quite a bit particularly for for startups and small companies and I went to this customer contacted me and the initial issue was or initial request was they had a uh system they had uh they've been using it for a couple of years it was critical it was like it was time entry it was things like people get paid based off of this and they invoiced off of it I mean not directly but it was like this was core data for their business and it had been built by I think he went to church with a guy or was like a cub scout leader with him or something like that and so it's somebody he knew that was a developer and they're like hey I can go do this and so it was it was a side Hustle developer this you know the the guy that was doing it was just like hey I'm going to I'm I can write some code on the side I can give you a good deal we'll put something together and so he went with what he knew which happened to be uh it was it was my SE was my SQL was on the back end I want to make sure it may have been squl server now I'm trying to remember what the back end was originally it may have been actually SQL server on the back end U but then it was also it was classic ASP on the front end not asp.net classic ASP it was running on a just a uh a Windows server with just IIs and it was just basically like there's your code and the way that was his version control was Hey we back up the server every so often so there was no there's no Version Control there was uh just something we've probably seen quite a bit where the versions where it would be like a page and they would have a page with another number on it or it would have a date on it or you be like uh page uncore testing new thing you know stuff like that where it's like you look at the you look at the folder of files and you're like oh wow you've just been this is just a developer machine and they're just basically developing on the server which not usually a good approach that usually tends to be something that causes a you know causes some issues so coming into that I guess I'll put you on the hot seat a little bit so giving that little thing what would be your maybe like how do you that or maybe what would be your first recommendation to a customer when you walk into that kind of situation well the first part I would try not to laugh about the lack of Version Control but uh because from a developer standpoint especially like as a contractor or uh just a employee walking into a situation like that is never ideal right we don't want to see software in such a state that it's not maintainable uh so one of the first questions would be is what from so I'm going to take this a little bit from my company's perspective from my QA perspective so looking at from a software with QA in mind the first question I would be is okay who is the customer you're serving what is this application serving you know what is the problem you're trying to solve and from there I would basically Define the user story Define the use case that you're trying to solve with this software then I would go to the end product and say okay what is it that you are actually providing are you meeting this use case are you actually delivering something that meets what your expect expectations are at the beginning and then if you're not then you slowly walk peel back the onion and walk through the different stages and find out okay what do you have implemented what kind of Technologies do you have you know what's your stack and from there you look at is uh well that would be the first thing the second thing would be um what is your budget because if they come at me and say uh I have no budget I have no money you know this has to be start mentality this has to be open source so the first thing I would look at is are you using the right Technologies you mentioned SQL Server well uh my first comment there would be why are you paying for licenses if you can't afford it you know my SQL does pretty much everything you need switch over to something that's more open source my SQL postgress something like that uh in uh first of all ASP core or you know um basic ASP really has not been used in a while so that would be another red flly because finding developers to develop in that is going to be very expensive so the next thing you want to do is okay if you want to keep it as a scripting language javascript's pretty much the DEA facto maybe go with JavaScript maybe PHP maybe even python depending upon what it is that you need to push out the door uh and then kind of walk through the Technologies there the other thing I would definitely push would be get Version Control in ASAP and then uh if since they don't have Version Control chances are they probably have little or no QA in in process at all and I would probably at least instantiate some simple QA scripts out there to at least test the core functionality make sure that what the product is supposed to do is at least doing that you may not have negative test cases to test you know if it's breaks but at least test the basics to make sure it's going out the door correctly since you don't have virsion control because then you would at least know that what's going out works and then you can apply version control over that to say okay this is a stable version because if it doesn't work you're not stable so you're you're going to know right away okay this is basically going back to an alpha version yeah and that's it's interesting because that's you know even from a QA perspective if you if you flip that more to just a pure development perspective it's really the same thing uh I think the key there is you start off you don't come in and just like start ripping out code and changing stuff there's some key things you have to do is like get the context of what's going on there is make sure that you're clear on that and it's the first thing really is sort of like the the why why does this thing exist who is it serving how what does successful serving your customer look like which sometimes and this goes back to our our couple of the earlier points sometimes a business hasn't really thought through their process processes completely and they can be many years into business and still have uh gray areas within their processes or things that they don't really understand because they've spread that out across a couple of different uh employees or or departments and there's not really somebody that knows how it all plugs together it's sort of like a bunch of black boxes that are just tossing stuff from box to box as opposed to somebody being able to trace that all the way through I think that's one of the key things and that was one of the things I talked to them about I said okay you got this big sprawling thing it had oh like I want to say it had like two dozen maybe three dozen menu items and basically you think each of those was a page and some little like process to it and we talked about it and and talked a little bit about the budget it's like okay well what do you what do you want to do and I knew coming into it that he had a limited budget it was one of these things like this needs to be fixed in you know I think it was like 10 to 20 hours of work something like that and he had some key bus like the database every so often was just rewriting like it would do a mass update of the employee table and like all their times would get set to whoever the last one was that saved it uh which was interesting enough never could figure out how to reproduce it it would happen periodically had logs everything it like it was some feature of that structure that was part of why we went on to the the next project which was basically we solved a couple things there uh did a couple things to to get some backups going and to basically just develop just like Define a simple deployment process of okay let's take this code we're going to put it out into GitHub I think is where I ended up putting it or some git repository and that's where we're going to start doing our builds from instead of putting everything on that server and just writing code there we're going to have access so if there's a developer comes in they can always pull the code down and they can push it back up and then we have just a little it was just a little simple ant script that was essentially like just copy from point A to point B once you downloaded everything but then from there it would very quickly he's like well hey you know well what's what's really critical because this is something that's been built over a couple of years and now you want to essentially the recommendation was scrap it and start all over but that may not be valid but it actually turned out to me because he said well you know what I really only need like this this one function which was funny because it was actually like 10 functions but he was really like I just need employees to be able to enter their time and I like great that's like one page and we can do that the conversation continued and it was like oh well there's these lookup values and there's these computation values and so it's like that one page turned into one or two pages well it was one page for the user there's like 10 admin Pages behind it for the the configuration data and I think that's one of the things that you know I always want to recommend to say ask that extra question as far as like and then what or is that all or how about you know what happens in this case because when you do that then you can get those those details and then as you're as you're stepping in like this I think this is a a key point that you brought up as as well something we did is like try the best you can to leave it in better shape than you found it you know it's one of those it's like okay they don't have anything so at the very least you could get them some scripts that would be you I regardless of your skill level you could easily build a couple of scripts that are if you run this we'll copy the code from point A to point B so there's actually a production folder at least and a development folder that's separate and then also Version Control is so easy these days it's and it's so much easier to uh to share dat to share code out to track changes to not have 15 different copies of a file in there uh there's just so many there just so many benefits to that and it's so accessible uh if you don't have a GitHub account pause right here stop go sign up it takes like no time and people start it should be on your resume a lot of places now will request like can I get your GitHub you know ID or link to sort of see what you're even from you know if you do a lot of private stuff like what's your general activity and things like that um it gives you it's it's almost like having a LinkedIn page for developers is having that that GitHub thing and so that's what we did is it was it is it's like you go to the Y you figure out what the focus is and this is something I think from a a Consulting point of view and uh something we'll probably talk about in our in our next session here is how and it's also very uh indicative of the assessment audit type products that we've we're trying to build because that's what it was it was like just he was basically like tell me why this is broken I need this fixed can you do a couple of things to fix this piece because I know I've got this huge thing but I really want this one piece I just need it to work and so we did we extracted and I told them I said actually what I could do is you can leave all that other stuff there we built uh and I said you know what I can spin up a little python Jango app that's basically just going to point to the same database pull the data I've got like one or two forms and now it's like we're going to rewrite that page we're going to just pull that like none of the code that does that entry and that validation is there anymore we're going to rewrite the whole thing we're going to make sure that it's done in a manner that is much easier to maintain it's a current language in worst case you know if I had walked away it'd be like at least this key uh problem that he needs solved is in a modern language it's something that there's a lot of developers out there and it was in a you know set up in a case in a sense in a way that somebody could come in real quick and be like okay here it is here's the documentation here's how you run it here's how you get it here's how you launch it and you could you could swap developers in and out fairly easily so thoughts on thoughts on that because I know we had a good conversation before uh s Thor you're too sense at a couple of those things so I don't want to go too far down the rabbit hole on that one uh because that's a whole discussion in and of itself getting into the design process and building it because the uh one of the things in your case you had to get this fixed for them quickly right like they were in a bad State uh that's one of the things we'll probably discuss at a later point where there's the you know right now there's you know what can you do a little bit better and then the best way to do things but in this particular situation um the only thing I would uh like to add is by doing what you did you also set it up to a point where you could get them to a point of continuous integration where they could make a change copy like the development folder to P to roll it out the door so you actually started building some processes for them that it seemed that they didn't have at all and that's another thing that a lot of companies miss when they build software they don't think about the processes of developing the code testing the code deploying the code and maintaining the code um that whole software development life cycle kind of gets lost if you think about the agile environment if a company just says oh well we're agile we're just going to write code and deploy code without thinking through the process they get into trouble right yeah and I think that's a that is actually a very that's its own uh long conversation uh probably a religious conversation for some people is agile and how it what it does to the software development life cycle and technically if you really if you're paying attention and doing right agile does not change the software development life cycle you're still doing it you're doing it differently it's not like waterfall it's not as uh necessarily maybe distinct uh although I think there's still those distinct tasks still exist if you're doing it right like if you're if you're doing adinal and you're not doing requirements Gathering or design you're doing it wrong if you're not doing testing you're doing it wrong if you're not deploying it it's going to be obvious you're not doing it wrong because nobody's going to be able to use it it's like hey I I got all the way through why what what's wrong with this project oh well it's because you didn't get to the deployment phase and so nobody's actually able to access it which funny enough is you know that's one of the things that agile's like you know drawing points is we are going to deploy on a regular basis so you're going to have a useful deployment you know release at the end of effectively hopefully each Sprint is that you've got something that you can work with and I think that's that's something that I want to sort of as we're getting to this one is is there is a as you said sort like that rabbit hole I think we as developers often run into the problem that we especially as we get into you know once we've gotten past our first few years and now we we sort of we've done this before we've got some ideas we sort of are starting to settle into our ways of developing software that we feel we have like sort of our ideal and that we don't move off of that it's like well this is how it has to be done and that's not the case I mean ideally yes if we had unlimited funds and time then yeah there's all these things that we want to do but the challenge and I think what makes a successful consultant is being able to come in and meet the customer where they're at instead of saying you need this Enterprise grade solution it's saying okay you have a limited budget you have a limited time you have a couple of things that are on fire and need to be put out and so it's being able to come in and do that triage and do it in a way that is not just like slapping a Band-Aid on something but instead saying okay yes we have to slap a Band-Aid we have to stop the bleeding but let's try to do it in a way that is setting ourselves up for Success at some point now sometimes you're let me you just you're it's like you only have time to slap a Band-Aid on it move on it's like you can put out the one fire but you don't have time to do anything to like address the other fires but that's usually not the case usually if you take a second and instead of just panicking and going like oh we're just going to fix this bug which is probably how they got into that situation you think about a little bit you research a little bit like you said as you like explore that a little bit more like okay what what really you trying to do what really is going on here because sometimes then you're going to realize that now you're not just hitting your you're not just dealing with the effect you can actually go find the cause and either directly address that or at least put that on their road map to say hey this is why you're running into it uh which would be like a a perfect example would be people that don't do QA like hey if you keep having the same bug come up over and over again then maybe you should try like some testing of some sort maybe like a little regression test so that before it goes out to production you know that you broke it again or Version Control so you know that oh yeah we changed this section of code so we need to make sure that it actually works as opposed to throwing all your cat out there and go oh it's broken because it's broken is not a very useful way to debug stuff thoughts well and you know as developers and you mentioned this and this is something I think we you're probably going to hear us both say this a lot make sure you always leave the code in a better State than you started with don't half asset make sure you do a good enough you know make sure you do the job well enough if it's just putting out a fire if it's just fixing a little bug make sure the code is clean and concise and it's in a good place that you're not taking like 20-y old technology and still throwing in 20-y Old technology if you can do it with newer technology and do it right do it right yeah I think that that uh leave it better than you you found it is probably one of the most important things to do is it's a that's what particularly if you're going into a Consulting role if you can do that if you can come in and regardless of where you're at you know wherever you enter a prod project that you enter it and your work is an improvement on what was there at least as good as they had but usually if you can find a way improve it which is you know better documentation cleaner code better performing stuff whatever it is then that's going to help you as a professionally because then they're going to say Hey you know Michael came in and he did this work and it was so much better than the other stuff that we had uh it's also going to be more likely they're going to you know bring you back and say hey you did a great job on this we want you to work on that and that's sort of the moral of story The the happy ending we'll call of the project that I went into is it was originally think I said like it's like a five to 10 hour project at this point that was a I think now almost a year and a half ago that I first uh kind you know we first started working with them and it has turned into probably 250300 hours something like that that we've gone into it we've Rewritten the entire system we've added pieces to it it it is it's stable it actually from the customer point of view it is something that's probably I don't know I bet it's saved them easily you know tens of thousands I think probably you know hundreds of thousands of dollars because they were going to take that solution and replace it with something that was going to be much more expensive it was going to be much higher end it was going to be like a Salesforce or something along those lines but now they've realized that they can take that customized piece we cleaned it up we've really refined it over the last year and and helped them Define a couple of their processes but also added enough features that they're like no I don't think we really need that now we've got what we need and there are a few Integrations that they wouldn't you know they wouldn't mind having and they've actually a couple they would love to have that we can't because the provider the vendor doesn't allow integration but this is like a win-win win kind of thing is that we have come in we showed them and and the customer even said that was part of it he's like hey I want I want to if you can solve this little problem and if you can solve this little problem and I trust you then we're going to work on bigger problems and so we've built that trust we've built that relationship and now it's turned in a steady stream of work for us but also a steady stream of improvements for him and his organization and it's allowed us to have something that we've we've built and we are it really is at a point that we can walk away from it and we could just be like here you go here's all your pieces we've got a little bit of documentation left a little bit of handoff to their technology people but it's really to that point where it's like you guys can maintain it from here on if you want if you want us to add features we can do that and so it really is it's just like you it's one the things it's like good work is its own reward so I'll give you your the last two cents before we wrap this one up yeah one of the things and I like that you said that is not only Le the code in a good place make sure you leave with the customer in a good place make sure you have a good handoff make sure that you communicate what you did so if the customer does have to go out and find someone else to do the work they can hand it off to someone else cleanly so that they're not in a situation where oh uh you know this is another hot mess I need to come in and have this Rewritten you know if you're leaving it in a good place you should also leave the handoff in a good place and like you said Rob you know some additional documentation might be needed or maybe even just a quick uh little summary write up of what the work that was done and where it is and maybe a project structure excellent well said and we sort of run out of our time for this episode so I want to thank you guys for listening as always shoot us an email at info developer.com if you have any questions comments you can leave uh notes things up comments on the the site if you're on YouTube or you can also see leave them out on develop or or wherever if they allow comments wherever you are listening to podcasts feel free to do so always looking for more information and we're just here to serve you to help you guys become better developers that being said we're going to wrap this one up so go there and have yourself a great day a great week and we will talk to you next [Music] time
Transcript Segments
[Music]
well hello and welcome back we are
continuing season 21 uh for those of you
that are podcast listeners the rest of
you uh thank you for hanging out with us
as you out on the YouTube channel we're
continuing to talk through how to be
better developers and this is really our
focus is our focus is our Focus now we
have drifted a little bit if you go way
back uh I think develop andur is now
seven or eight years old we' been around
I think since 2016 2017 I forget when we
originally uh launched but we have
drifted
we sort of started with a very tight
Focus but then as we've added content
and we've just sort of put stuff out
there we've we've gotten very Broad and
one of the things we want to do is bring
it back down our avatars was not it was
not an avatar it was like a Coliseum of
avatars that we were servicing and so
now we're trying to bring stuff down
Avatar just for those you don't know
it's your ideal customer it's like this
is who you want to talk to it is
defining your Niche down to one person
and knowing that person as far as like
how old are they what do they like to do
what are their Hobbies what is their
what is their day job like what is their
commute like it's those kinds of things
and we're not going to get too deep into
that piece but if you go Google uh how
do I Define my avatar or how do I create
my business Avatar or my ideal
customer those things you'll find lots
of recommendations around that that's
going to be some of what we discuss as
we're building the the develop andur
brand here uh today we're we are going
to talk a little more technology we're
going to talk or I guess more problem
solving uh we have in the past we have
discussed some of our current uh
challenges and and some of the customers
we' run into and this episode I want to
talk about uh something we we actually
find fairly often it is a customer that
has gotten themselves into a bind of
some sort for a variety of reasons we'll
talk about but they've gotten themselves
into you know sort of like got
themselves in a bind they're in a little
bit of a corner and they're trying to
figure out a way out and how do we as a
consultant as a technologist as a
problem solver help them out of that how
do how do we get them out of that corner
and not only get them out of that but I
think one of the best things we can do
is set them up so they don't end up back
there so that they are taking some steps
to avoid getting back into that
situation and there's a lot of different
ways that you can you can be sort of uh
pigeon hold and things like that there's
vendor lock in there is uh essentially
what I call technology sprawl where you
just have got you've just grown and
grown and grown and grown and You' just
got 18,000 Solutions of technology so
you may have like we've been places
there's three or four people in the shop
and there are 20 different technologies
that they're trying to maintain which is
just way way too much it it becomes more
of a headache of Switching gears than it
is you know actually solving
anything and I think I'll start with
before I get into like my you know my
specific story that I did want to talk
about that we did what is I go start
with Mike like what do you what do you
see as the most common uh like you maybe
one or three issues that you've run into
as far as like these businesses gotten
themselves into because I know you've
dealt with a lot of small businesses
where they've sort
of they just haven't done they haven't
done what we would we would say the
ideal solution is and so what are maybe
some of like the the common pitfalls
you've
seen so interestingly enough so some of
the ones that uh are one of the biggest
problems I see a lot of companies doing
especially non-technical companies that
want to get into Tech where they want
like a mobile app or they want like a
desktop application or they want some
type of techn uh technology Sol solution
to their problem what a lot of them do
is they go out and they do not do a lot
of research they find the first product
online that kind of meets their needs
they buy it they implement it and now
here we are 3 four years down the road
and they have to hire someone to come in
and maintain this because no one
supports it anymore the company's either
out of business they don't do proper
updates or the software never did what
they wanted and they have so much
customization that it just doesn't work
anymore it it's like a hot mess um
that's one of the number one problems I
have um number
two is it's a startup or they're in that
startup mentality and they want to do
things cheap so they don't want to spend
money and instead they go out and find
all these open- Source possible
solutions for their problem mishmash
them together without much thought and
quickly throw something out there uh the
problem with those uh instances is they
usually are hard to maintain or they do
not scale so once the company starts to
grow you run into a situation of oops
this doesn't work we have to either go
back and rewrite it or throw a lot of
money and development time into this to
actually make it work the way we expect
it to work and probably the third thing
um companies really have no freaking
clue what they're doing and it's a hot
mess from the beginning they hire people
to do what they think they want and you
you typically end up in that swing set
scenario uh for those of you that
probably might not have seen this uh
Google swing uh what is it swing set
problem or roller coaster uh design
online you'll see a little cartoon which
starts with a uh tree swing and ends
with the customer really wanting a tire
swing and that is kind of the third
situation I find myself in
where the company either pitches one
thing and delivers something else or
they totally read what the uh customer
wants and they build something
that doesn't meet the problem it's
something that's a total waste of
time yeah and I think that that that is
probably the the biggest problem
regardless is is that communication
thing that you get from the you know
that that tree swing uh and I think
there yeah I think there's also the
roller coaster example of that that are
totally it shows you the difference the
different things that are communicated
and how vision being translated into
reality can be uh not the same they can
be very very different uh the one I want
to talk about the example I've got is I
think probably that second one a little
bit these are it's a little bit that
they you a little bit of a budget kind
of thing but this is also something I've
seen quite a bit particularly for for
startups and small companies and I went
to this customer contacted me and the
initial issue was or initial request was
they had a uh system they had uh they've
been using it for a couple of years it
was critical it was like it was time
entry it was things like people get paid
based off of this and they invoiced off
of it I mean not directly but it was
like this was core data for their
business and it had been built by I
think he went to church with a guy or
was like a cub scout leader with him or
something like that and so it's somebody
he knew that was a developer and they're
like hey I can go do this and so it was
it was a side Hustle
developer this you know the the guy that
was doing it was just like hey I'm going
to I'm I can write some code on the side
I can give you a good deal we'll put
something together and so he went with
what he knew which happened to be uh it
was it was my SE was my SQL was on the
back end I want to make sure it may have
been squl server now I'm trying to
remember what the back end was
originally it may have been actually SQL
server on the back end U but then it was
also it was classic ASP on the front end
not asp.net classic ASP it was running
on a just a uh a Windows server with
just IIs and it was just basically like
there's your code and the way that was
his version control was Hey we back up
the server every so often so there was
no there's no Version Control there was
uh just something we've probably seen
quite a bit where the versions where it
would be like a page and they would have
a page with another number on it or it
would have a date on it or you be like
uh page uncore testing new thing you
know stuff like that where it's like you
look at the you look at the folder of
files and you're like oh wow you've just
been this is just a developer machine
and they're just basically developing on
the server
which not usually a good approach that
usually tends to be something that
causes a you know causes some
issues so coming into that I guess I'll
put you on the hot seat a little bit so
giving that little thing what would be
your maybe like how do you that or maybe
what would be your first recommendation
to a customer when you walk into that
kind of
situation well the first part I would
try not to laugh about the lack of
Version Control
but uh because from a developer
standpoint especially like as a
contractor or uh just a employee walking
into a situation like that is never
ideal right we don't want to see
software in such a state that it's not
maintainable uh so one of the first
questions would be is what from so I'm
going to take this a little bit from my
company's perspective from my QA
perspective so looking at from a
software with QA in mind the first
question I would be is okay who is the
customer you're serving what is this
application serving you know what is the
problem you're trying to solve and from
there I would basically Define the user
story Define the use case that you're
trying to solve with this software then
I would go to the end product and say
okay what is it that you are actually
providing are you meeting this use case
are you actually delivering something
that meets what your expect expectations
are at the beginning and then if you're
not then you slowly walk peel back the
onion and walk through the different
stages and find out okay what do you
have implemented what kind of
Technologies do you have you know what's
your stack and from there you look at is
uh well that would be the first thing
the second thing would be um what is
your budget
because if they come at me and say uh I
have no budget I have no money you know
this has to be start mentality this has
to be open source so the first thing I
would look at is are you using the right
Technologies you mentioned SQL Server
well uh my first comment there would be
why are you paying for licenses if you
can't afford it you know my SQL does
pretty much everything you need switch
over to something that's more open
source my SQL postgress something like
that uh in uh first of all
ASP core or you know um basic ASP really
has not been used in a while so that
would be another red flly because
finding developers to develop in that is
going to be very expensive so the next
thing you want to do is okay if you want
to keep it as a scripting language
javascript's pretty much the DEA facto
maybe go with JavaScript maybe PHP maybe
even python depending upon what it is
that you need to push out the door uh
and then kind of walk through the
Technologies there the other thing I
would definitely push would be get
Version Control in ASAP and then uh if
since they don't have Version Control
chances are they probably have little or
no QA in in process at all and I would
probably at least instantiate some
simple QA scripts out there to at least
test the core functionality make sure
that what the product is supposed to do
is at least doing that you may not have
negative test cases to test you know if
it's breaks but at least test the basics
to make sure it's going out the door
correctly since you don't have virsion
control because then you would at least
know that what's going out works and
then you can apply version control over
that to say okay this is a stable
version because if it doesn't work
you're not stable so you're you're going
to know right away okay this is
basically going back to an alpha
version yeah and that's it's interesting
because that's you know even from a QA
perspective if you if you flip that more
to just a pure development perspective
it's really the same thing uh I think
the key there is you start off you don't
come in and just like start ripping out
code and changing stuff there's some key
things you have to do is like get the
context of what's going on there is make
sure that you're clear on that and it's
the first thing really is sort of like
the the why why does this thing exist
who is it serving how what does
successful serving your customer look
like which sometimes and this goes back
to our our couple of the earlier points
sometimes a business hasn't really
thought through their process processes
completely and they can be many years
into business and still have uh gray
areas within their processes or things
that they don't really understand
because they've spread that out across a
couple of different uh employees or or
departments and there's not really
somebody that knows how it all plugs
together it's sort of like a bunch of
black boxes that are just tossing stuff
from box to box as opposed to somebody
being able to trace that all the way
through I think that's one of the key
things and that was one of the things I
talked to them about I said okay you got
this big sprawling thing it had oh like
I want to say it had like two dozen
maybe three dozen menu items and
basically you think each of those was a
page and some little like process to it
and we talked about it and and talked a
little bit about the budget it's like
okay well what do you what do you want
to do and I knew coming into it that he
had a limited budget it was one of these
things like this needs to be fixed in
you know I think it was like 10 to 20
hours of work something like that and he
had some key bus like the database every
so often was just rewriting like it
would do a mass update of the employee
table and like all their times would get
set to whoever the last one was that
saved it uh which was interesting enough
never could figure out how to reproduce
it it would happen periodically had logs
everything it like it was some feature
of that structure that was part of why
we went on to the the next project which
was basically we solved a couple things
there uh did a couple things to to get
some backups going and to basically just
develop just like Define a simple
deployment process of okay let's take
this code we're going to put it out into
GitHub I think is where I ended up
putting it or some git
repository and that's where we're going
to start doing our builds from instead
of putting everything on that server and
just writing code there we're going to
have access so if there's a developer
comes in they can always pull the code
down and they can push it back up and
then we have just a little it was just a
little simple ant script that was
essentially like just copy from point A
to point B once you downloaded
everything but then from there it would
very quickly he's like well hey you know
well what's what's really critical
because this is something that's been
built over a couple of years and now you
want to essentially the recommendation
was scrap it and start all over but that
may not be valid but it actually turned
out to me because he said well you know
what I really only need like this this
one function which was funny because it
was actually like 10 functions but he
was really like I just need employees to
be able to enter their time and I like
great that's like one page and we can do
that the conversation continued and it
was like oh well there's these lookup
values and there's these computation
values and so it's like that one page
turned into one or two pages well it was
one page for the user there's like 10
admin Pages behind it for the the
configuration data and I think that's
one of the things that you know I always
want to recommend to say
ask that extra question as far as like
and then what or is that all or how
about you know what happens in this case
because when you do that then you can
get those those details and then as
you're as you're stepping in like this I
think this is a a key point that you
brought up as as well something we did
is like try the best you can to leave it
in better shape than you found it you
know it's one of those it's like okay
they don't have anything so at the very
least you could get them some scripts
that would be you I regardless of your
skill level you could easily build a
couple of scripts that are if you run
this we'll copy the code from point A to
point B so there's actually a production
folder at least and a development folder
that's separate and then also Version
Control is so easy these days it's and
it's so much easier to uh to share dat
to share code out to track changes to
not have 15 different copies of a file
in there uh there's just so many there
just so many benefits to that and it's
so accessible uh if you don't have a
GitHub account pause right here stop go
sign up it takes like no time and people
start it should be on your resume a lot
of places now will request like can I
get your GitHub you know ID or link to
sort of see what you're even from you
know if you do a lot of private stuff
like what's your general activity and
things like that um it gives you it's
it's almost like having a LinkedIn page
for developers is having that that
GitHub thing and so that's what we did
is it was it is it's like you go to the
Y you figure out what the focus is and
this is something I think from a a
Consulting point of view and uh
something we'll probably talk about in
our in our next session
here is how and it's also very uh
indicative of the assessment audit type
products that we've we're trying to
build because that's what it was it was
like just he was basically like tell me
why this is broken I need this fixed can
you do a couple of things to fix this
piece because I know I've got this huge
thing but I really want this one piece I
just need it to work and so we did we
extracted and I told them I said
actually what I could do is you can
leave all that other stuff there we
built uh and I said you know what I can
spin up a little python Jango app that's
basically just going to point to the
same database pull the data I've got
like one or two forms and now it's like
we're going to rewrite that page we're
going to just pull that like none of the
code that does that entry and that
validation is there anymore we're going
to rewrite the whole thing we're going
to make sure that it's done in a manner
that is much easier to maintain it's a
current language in worst case you know
if I had walked away it'd be like at
least this
key uh problem that he needs solved is
in a modern language it's something that
there's a lot of developers out there
and it was in a you know set up in a
case in a sense in a way that somebody
could come in real quick
and be like okay here it is here's the
documentation here's how you run it
here's how you get it here's how you
launch it and you could you could swap
developers in and out fairly
easily so thoughts on thoughts on that
because I know we had a good
conversation before uh s Thor you're too
sense at a couple of those
things so I don't want to go too far
down the rabbit hole on that one uh
because that's a whole discussion in and
of itself getting into the design
process and building it because the uh
one of the things in your case you had
to get this fixed for them quickly right
like they were in a bad State uh that's
one of the things we'll probably discuss
at a later point where there's the you
know right now there's you know what can
you do a little bit better and then the
best way to do things but in this
particular situation um the only thing I
would uh like to add is by doing what
you did you also set it up to a point
where you could get them to a point of
continuous integration where they could
make a change copy like the development
folder to P to roll it out the door so
you actually started building some
processes for them that it seemed that
they didn't have at all and that's
another thing that a lot of companies
miss when they build software they don't
think about the processes of developing
the code testing the code deploying the
code and maintaining the code um that
whole software development life cycle
kind of gets lost if you think about the
agile environment if a company just says
oh well we're agile we're just going to
write code and deploy code without
thinking through the process they get
into trouble
right yeah and I think that's a that is
actually a very that's its own uh long
conversation uh probably a religious
conversation for some people is agile
and how
it what it does to the software
development life cycle and technically
if you really if you're paying attention
and doing right agile does not change
the software development life cycle
you're still doing it you're doing it
differently it's not like waterfall it's
not as uh necessarily maybe distinct uh
although I think there's still those
distinct tasks still exist if you're
doing it right like if you're if you're
doing adinal and you're not doing
requirements Gathering or design you're
doing it wrong if you're not doing
testing you're doing it wrong if you're
not deploying it it's going to be
obvious you're not doing it wrong
because nobody's going to be able to use
it it's like hey I I got all the way
through why what what's wrong with this
project oh well it's because you didn't
get to the deployment phase and so
nobody's actually able to access it
which funny enough is you know that's
one of the things that agile's like you
know drawing points is we are going to
deploy on a regular basis so you're
going to have a useful deployment you
know release at the end of effectively
hopefully each Sprint is that you've got
something that you can work with and I
think that's that's something that I
want to sort of as we're getting to this
one is is there is a as you said sort
like that rabbit hole I think we as
developers often run into the problem
that
we especially as we get
into you know once we've gotten past our
first few years and now we we sort of
we've done this before we've got some
ideas we sort of are starting to settle
into our ways of developing software
that we feel we have like sort of our
ideal and that we don't move off of that
it's like well this is how it has to be
done and that's not the case I mean
ideally yes if we had unlimited funds
and time then yeah there's all these
things that we want to do but the
challenge and I think what makes a
successful consultant is being able to
come in and meet the customer where
they're at instead of saying you need
this Enterprise grade
solution it's saying okay you have a
limited budget you have a limited time
you have a couple of things that are on
fire and need to be put out and so it's
being able to come in and do that triage
and do it in a way that is not just like
slapping a Band-Aid on something but
instead saying okay yes we have to slap
a Band-Aid we have to stop the bleeding
but let's try to do it in a way that is
setting ourselves up for Success at some
point now sometimes you're let me you
just you're it's like you only have time
to slap a Band-Aid on it move on it's
like you can put out the one fire but
you don't have time to do anything to
like address the other fires but that's
usually not the case usually if you take
a second and instead of just panicking
and going like oh we're just going to
fix this bug which is probably how they
got into that situation you think about
a little bit you research a little bit
like you said as you like explore that a
little bit more like okay what what
really you trying to do what really is
going on here because sometimes then
you're going to realize that now you're
not just hitting your you're not just
dealing with the effect you can actually
go find the cause and either directly
address that or at least put that on
their road map to say hey this is why
you're running into it uh which would be
like a a perfect example would be people
that don't do QA like hey if you keep
having the same bug come up over and
over again then maybe you should try
like some testing of some sort maybe
like a little regression test so that
before it goes out to production you
know that you broke it again or Version
Control so you know that oh yeah we
changed this section of code so we need
to make sure that it actually works as
opposed to throwing all your cat out
there and go oh it's broken because it's
broken is not a very useful way to debug
stuff thoughts well and you know as
developers and you mentioned this and
this is something I think we you're
probably going to hear us both say this
a
lot make sure you always leave the code
in a better State than you started with
don't half asset make sure you do a good
enough you know make sure you do the job
well enough if it's just putting out a
fire if it's just fixing a little bug
make sure the code is clean
and concise and it's in a good place
that you're not taking like 20-y old
technology and still throwing in 20-y
Old technology if you can do it with
newer technology and do it right do it
right yeah I think that that uh leave it
better than you you found it is probably
one of the most important things to do
is it's a that's what particularly if
you're going into a Consulting role if
you can do that if you can come in and
regardless of where you're at you know
wherever you enter a prod project that
you enter it and your
work is an improvement on what was there
at least as good as they had but usually
if you can find a way improve it which
is you know better documentation cleaner
code better performing stuff whatever it
is then that's going to help you as a
professionally because then they're
going to say Hey you know Michael came
in and he did this work and it was so
much better than the other stuff that we
had uh it's also going to be more likely
they're going to you know bring you back
and say hey you did a great job on this
we want you to work on that and that's
sort of the moral of story The the happy
ending we'll call of the project that I
went into is it was originally think I
said like it's like a five to 10 hour
project at this point that was a I think
now almost a year and a half ago that I
first uh kind you know we first started
working with them and it has turned
into probably 250300 hours something
like that that we've gone into it we've
Rewritten the entire system we've added
pieces to it it it is it's stable it
actually from the customer point of view
it is something that's probably I don't
know I bet it's saved them easily you
know tens of thousands I think probably
you know hundreds of thousands of
dollars because they were going to take
that solution and replace it with
something that was going to be much more
expensive it was going to be much higher
end it was going to be like a Salesforce
or something along those lines but now
they've realized that they can take that
customized piece we cleaned it up we've
really refined it over the last year and
and helped them Define a couple of their
processes but also added enough features
that they're like no I don't think we
really need that now we've got what we
need and there are a few Integrations
that they wouldn't you know they
wouldn't mind having and they've
actually a couple they would love to
have that we can't because the provider
the vendor doesn't allow integration but
this is like a win-win win kind of thing
is that we have come in we showed them
and and the customer even said that was
part of it he's like hey I want I want
to if you can solve this little problem
and if you can solve this little problem
and I trust you then we're going to work
on bigger problems and so we've built
that trust we've built that relationship
and now it's turned in a steady stream
of work for us but also a steady stream
of improvements for him and his
organization and it's allowed us to have
something that we've we've built and we
are it really is at a point that we can
walk away from it and we could just be
like here you go here's all your pieces
we've got a little bit of documentation
left a little bit of handoff to their
technology people but it's really to
that point where it's like you guys can
maintain it from here on if you want if
you want us to add features we can do
that and so it really is it's just like
you it's one the things it's like good
work is its own reward so I'll give you
your the last two cents before we wrap
this one
up yeah one of the things and I like
that you said that is not only Le the
code in a good place make sure you leave
with the customer in a good place make
sure you have a good handoff make sure
that you communicate what you did so if
the customer does have to go out and
find someone else to do the work they
can hand it off to someone else cleanly
so that they're not in a situation where
oh uh you know this is another hot mess
I need to come in and have this
Rewritten you know if you're leaving it
in a good place you should also leave
the handoff in a good place and like you
said Rob you know some additional
documentation might be needed or maybe
even just a quick uh little summary
write up of what the work that was done
and where it is and maybe a project
structure excellent well said and we
sort of run out of our time for this
episode so I want to thank you guys for
listening as always shoot us an email at
info developer.com if you have any
questions comments you can leave uh
notes things up comments on the the site
if you're on YouTube or you can also see
leave them out on develop or or wherever
if they allow comments wherever you are
listening to podcasts feel free to do so
always looking for more information and
we're just here to serve you to help you
guys become better developers that being
said we're going to wrap this one up so
go there and have yourself a great day a
great week and we will talk to you next
[Music]
time