OJ’s rants What would OJ do?

23Feb/0974

N Things You Don’t Want to Hear when Starting a New Job (where N >= 1)

Here are a collection of quotes that can drive fear into the heart of every developer. They're made worse when heard at the start of a new gig, as any hope of a brave new world is smashed before you even get a login!

  1. We are using Agile, but have made a few adjustments.
  2. We need to make some changes to an application in production, but we don't have the source code any more.
  3. How's your Excel/VBA?
  4. We'll worry about testing later.
  5. Make sure you abstract the database layer, just in case we want to switch from SQL 2005 to db4o.
  6. We make heavy use of enterprise design patterns, especially inversion of control and dependency injection. We don't want to be tightly coupled to anything.
  7. We have a Biztalk license.
  8. In the interim, can you please work on these reports?
  9. We use the latest and greatest technology, such as SQL 2000 and .NET v1.1.
  10. We have written our own framework and code generator.
  11. Have you ever written any Cobol?
  12. We have the work but it hasn't been approved yet.
  13. We use VSS 6.0 for Version Control. -- Inspired by M Princz (below)
  14. All testing is done by the BAs. -- Inspired by M Princz (below)
  15. We're using Great Plains for timesheets.
  16. We've got a stack of 3rd party UI controls that we don't use any more, but we have to link them in otherwise the back-end code breaks. -- Inspired by JoCo

There are lots more, but I've forgotten them. I'll be sure to add them as I remember.

... any suggestions?

  • http://itsginga.wordpress.com/ M Princz

    I have a few…..

    Requirements are for wimps
    Version Control??? our BA’s work closely with our developers
    Trust me I’m a scrummaster

  • http://itsginga.wordpress.com/ M Princz

    I have a few…..

    Requirements are for wimps
    Version Control??? our BA’s work closely with our developers
    Trust me I’m a scrummaster

  • http://buffered.io/ OJ

    Cheers Mike :) You inspired a couple more. I can’t remember the other ones we were talking about before. Hopefully they’ll come back to me in the next few days!

  • http://buffered.io/ OJ

    Cheers Mike :) You inspired a couple more. I can’t remember the other ones we were talking about before. Hopefully they’ll come back to me in the next few days!

  • http://keithjudge.com/keefsmusings Keef

    “We’re nearly finished, we just need you to help finish things” – then you go in and find the project is realistically barely past pre-production and slipping badly with no real sense of what the final product is going to be.
    “We have a very light management structure, we trust you code guys to do things sensibly”
    “Ah, you should get your PC/login/desk sometime in the next few days.  In the meantime…”

    My wife has come across the version control one Mike mentioned.  It’s nearly impossible to find a good technical author who understands the concepts of version control.  The VSS 6 one is a goodie too!

  • http://keithjudge.com/keefsmusings Keef

    “We’re nearly finished, we just need you to help finish things” – then you go in and find the project is realistically barely past pre-production and slipping badly with no real sense of what the final product is going to be.
    “We have a very light management structure, we trust you code guys to do things sensibly”
    “Ah, you should get your PC/login/desk sometime in the next few days.  In the meantime…”

    My wife has come across the version control one Mike mentioned.  It’s nearly impossible to find a good technical author who understands the concepts of version control.  The VSS 6 one is a goodie too!

  • TheNapoleon

    Well I have one too… 

    “Can you bring your own laptop? we are waiting for the previous contractor to return the one we lent him”

    Y.

  • TheNapoleon

    Well I have one too… 

    “Can you bring your own laptop? we are waiting for the previous contractor to return the one we lent him”

    Y.

  • Anon

    What’s wrong with number 5? db4o or the attemp to abstract the database layer?

  • Anon

    What’s wrong with number 5? db4o or the attemp to abstract the database layer?

  • http://buffered.io/ OJ

    @Keef: Damn, I can’t believe I forgot the login/getting a PC one :)
    @TheNapoleon: I haven’t heard that one before, but yeah that would indicate an issue!

    @Anon: There is absolutely nothing wrong with db4o. The unnecessary DB abstraction is the WTF. The point is that most people abstract the DB layer “in case” it changes, but it never does.

    I used SQL and db4o in my example because they are very different animals. Not because I feel either of them are bad choices (so long as they’re used in the appropriate places).

    Cheers!

  • http://buffered.io/ OJ

    @Keef: Damn, I can’t believe I forgot the login/getting a PC one :)
    @TheNapoleon: I haven’t heard that one before, but yeah that would indicate an issue!

    @Anon: There is absolutely nothing wrong with db4o. The unnecessary DB abstraction is the WTF. The point is that most people abstract the DB layer “in case” it changes, but it never does.

    I used SQL and db4o in my example because they are very different animals. Not because I feel either of them are bad choices (so long as they’re used in the appropriate places).

    Cheers!

  • Simon

    “Oh, you wanted to get paid *every* week…”

  • Simon

    “Oh, you wanted to get paid *every* week…”

  • http://buffered.io/ OJ

    @Simon: HA! Thankfully I’m yet to hear that one!

  • http://buffered.io/ OJ

    @Simon: HA! Thankfully I’m yet to hear that one!

  • http://www.shiftperception.com/ dan

    We’re so busy right now, we start at 7am, end at 9pm, and don’t stop for lunch breaks

  • http://www.shiftperception.com dan

    We’re so busy right now, we start at 7am, end at 9pm, and don’t stop for lunch breaks

  • http://blog.robertgreyling.com RobertTheGrey

    Haha very funny – I’ll add some in due course but first…

    I’m going to have to agree with Anon – number 5 is not a bad one. For example, on my current project (you know the one) the SQL backend has been abstracted away behind IRepository<T> because as soon as humanly possible, I’ll be testing and hopefully moving over to Amazon SimpleDB. But I don’t know SimpleDB very well (don’t be fooled by the name :) ) and so I want a full suite of integration tests that can verify my implementation of SimpleDB works the same way as my SQL server implementation did.

    Then of course SimpleDB could bite me in the butt a few months down the line when I realise there are issues I wasn’t aware of, and having abstracted the DB layer away, I am free to move back to SQL server or try something new….easy peasy eh?

    There you have it – my very good reason for abstracting the DB layer away :-)

  • http://robertthegrey.myopenid.com/ Robert Greyling

    Haha very funny – I’ll add some in due course but first…

    I’m going to have to agree with Anon – number 5 is not a bad one. For example, on my current project (you know the one) the SQL backend has been abstracted away behind IRepository<T> because as soon as humanly possible, I’ll be testing and hopefully moving over to Amazon SimpleDB. But I don’t know SimpleDB very well (don’t be fooled by the name :) ) and so I want a full suite of integration tests that can verify my implementation of SimpleDB works the same way as my SQL server implementation did.

    Then of course SimpleDB could bite me in the butt a few months down the line when I realise there are issues I wasn’t aware of, and having abstracted the DB layer away, I am free to move back to SQL server or try something new….easy peasy eh?

    There you have it – my very good reason for abstracting the DB layer away :-)

  • Tomas V

    “Overtime? No, never, we’re very good at keeping on schedule.. though weekends and evenings are expected close to deadlines. But that’s anywhere in the industry.”

    uH-HUH.

  • Tomas V

    “Overtime? No, never, we’re very good at keeping on schedule.. though weekends and evenings are expected close to deadlines. But that’s anywhere in the industry.”

    uH-HUH.

  • http://buffered.io/ OJ

    @Dan: you forgot the “plus we won’t pay you any more than 8 hours”.

    @Tomas: I had that one on my previous gig :(
    @Rob G: There’s always an exception to the rule. There are certain cases where you’re not building an enterprise application and you will/may require the use of other databases. But let’s be fair, how many enterprise-level applications have you worked on which have actually required a change of database?

    About 80% of the enterprise systems I’ve worked on have had the DB abstraction built in to the code base. 100% of those projects NEVER changed the back end database.

    My point is still valid. It is rare to get a new gig working on a system where changing back-end DBs is a REAL problem that needs to be solved. Most of the time, it’s just YAGNI.

    Cheers all :)

  • http://buffered.io/ OJ

    @Dan: you forgot the “plus we won’t pay you any more than 8 hours”.

    @Tomas: I had that one on my previous gig :(
    @Rob G: There’s always an exception to the rule. There are certain cases where you’re not building an enterprise application and you will/may require the use of other databases. But let’s be fair, how many enterprise-level applications have you worked on which have actually required a change of database?

    About 80% of the enterprise systems I’ve worked on have had the DB abstraction built in to the code base. 100% of those projects NEVER changed the back end database.

    My point is still valid. It is rare to get a new gig working on a system where changing back-end DBs is a REAL problem that needs to be solved. Most of the time, it’s just YAGNI.

    Cheers all :)

  • http://www.soulsolutions.com.au/ Bronwen Zande

    My god..i think i may have heard all of them!

    Or .. yes we said it’d be .net 3.5 but we aren’t allowed to use that yet so in the meantime we’ll use .net 2.0 and think about upgrading later

  • http://www.soulsolutions.com.au Bronwen Zande

    My god..i think i may have heard all of them!

    Or .. yes we said it’d be .net 3.5 but we aren’t allowed to use that yet so in the meantime we’ll use .net 2.0 and think about upgrading later

  • http://buffered.io/ OJ

    @Bronwen: Ah yes, that old chesnut. I had a bit of that recently too. Supposedly .NET 3.5 with ASP.NET MVC… but in the mean time we’re maintaining older .NET 2.0 ASP.NET webforms apps. Sure, it could be worse, but it’s nothing like what was expected!

  • http://buffered.io/ OJ

    @Bronwen: Ah yes, that old chesnut. I had a bit of that recently too. Supposedly .NET 3.5 with ASP.NET MVC… but in the mean time we’re maintaining older .NET 2.0 ASP.NET webforms apps. Sure, it could be worse, but it’s nothing like what was expected!

  • http://darrensmall.com/ Darren

    “Hi I’m the project manager…I wasn’t expecting you I didn’t know we hired anyone.”

    “Work on project A, but we don’t have any budget for that so bill your time against project B” … a few month later …”We are having this crisis meeting because the client for project B appears to have no confidence in us for some reason and has withheld further funding….”

  • http://darrensmall.com/ Darren

    “Hi I’m the project manager…I wasn’t expecting you I didn’t know we hired anyone.”

    “Work on project A, but we don’t have any budget for that so bill your time against project B” … a few month later …”We are having this crisis meeting because the client for project B appears to have no confidence in us for some reason and has withheld further funding….”

  • http://blog.robertgreyling.com RobertTheGrey

    @OJ – how many? 3 in the last 2 years including the one I mentioned, the the other two were inside a major bank (you know the one) … oh and to be clear, those two did NOT have the data layer abstracted and it was a major pain in the back-side :-)

  • http://robertthegrey.myopenid.com/ Robert Greyling

    @OJ – how many? 3 in the last 2 years including the one I mentioned, the the other two were inside a major bank (you know the one) … oh and to be clear, those two did NOT have the data layer abstracted and it was a major pain in the back-side :-)

  • Wonky faced ginger monkey

    Not quite related but still amusing:
    “I don’t need to write tests because I know the code.” Yoann
    “What are tests.” Some dude at Bank of America who should have known better.

    Back on topic:
    “Here is the team leader, he is French.” Eastabrooke
    “Yes you can use agile methodology for this project but can you write the spec and project plan first?” Same dude at Bank of America.

  • Wonky faced ginger monkey

    Not quite related but still amusing:
    “I don’t need to write tests because I know the code.” Yoann
    “What are tests.” Some dude at Bank of America who should have known better.

    Back on topic:
    “Here is the team leader, he is French.” Eastabrooke
    “Yes you can use agile methodology for this project but can you write the spec and project plan first?” Same dude at Bank of America.

  • http://buffered.io/ OJ

    @Darren: Really rings a bell doesn’t it :)
    @Rob G: I stick by my point. You might have a higher ratio than most, but I argue that most people put it in and bear the cost of maintaining it without the need for it.

    Don’t get me wrong, I’m not saying scatter references to SqlClient all over the code willy nilly. What I am saying is don’t abstract to the point where it’s painful to talk to the DB “just in case it changes”.

    It’s an example of a greater issue, where people just seem to abstract for the sake of abstracting using “we don’t want to be tightly coupled” as justification. Yes tight coupling is bad, but make a fucking decision.

    Databases are a slightly different case I guess, but the point is still valid. Don’t waste time maintaining a super-ignorant layer of abstraction when your DB is never going to change.

    @Wonky: Love it :) I didn’t suffer the first one, because at the time the Frenchman wasn’t the Team Lead! Sounds like the BoA dude…er… really knew his stuff!

  • http://buffered.io/ OJ

    @Darren: Really rings a bell doesn’t it :)
    @Rob G: I stick by my point. You might have a higher ratio than most, but I argue that most people put it in and bear the cost of maintaining it without the need for it.

    Don’t get me wrong, I’m not saying scatter references to SqlClient all over the code willy nilly. What I am saying is don’t abstract to the point where it’s painful to talk to the DB “just in case it changes”.

    It’s an example of a greater issue, where people just seem to abstract for the sake of abstracting using “we don’t want to be tightly coupled” as justification. Yes tight coupling is bad, but make a fucking decision.

    Databases are a slightly different case I guess, but the point is still valid. Don’t waste time maintaining a super-ignorant layer of abstraction when your DB is never going to change.

    @Wonky: Love it :) I didn’t suffer the first one, because at the time the Frenchman wasn’t the Team Lead! Sounds like the BoA dude…er… really knew his stuff!

  • http://blog.robertgreyling.com RobertTheGrey

    But the PM said it should only take you guys a day or so to whip up that prototype…
    Please can you just do this quick and dirty and I promise I’ll give you time after the release to go back and fix it
    Trust me, this time it’s definitely the final spec – nothing will change, even if they ask me to make changes I’ll tell them to bugger off…
    Don’t worry, that prototype will never make it into LIVE – we’re just going to use it as a proof of concept, you know a spike, and then if it works we’ll plan to do it properly from scratch…

  • http://robertthegrey.myopenid.com/ Robert Greyling

    But the PM said it should only take you guys a day or so to whip up that prototype…
    Please can you just do this quick and dirty and I promise I’ll give you time after the release to go back and fix it
    Trust me, this time it’s definitely the final spec – nothing will change, even if they ask me to make changes I’ll tell them to bugger off…
    Don’t worry, that prototype will never make it into LIVE – we’re just going to use it as a proof of concept, you know a spike, and then if it works we’ll plan to do it properly from scratch…

  • http://buffered.io/ OJ

    @Rob G: .. and that is why Excel and Access makes it ito so many production systems!

  • http://buffered.io/ OJ

    @Rob G: .. and that is why Excel and Access makes it ito so many production systems!

  • James R

    Real event : “We have written our own framework ” leads to the question “Is there any documentation?” Answer : “No, can’t you read the code?” Result; much pain as maintaining the app descends into a black art.

  • James R

    Real event : “We have written our own framework ” leads to the question “Is there any documentation?” Answer : “No, can’t you read the code?” Result; much pain as maintaining the app descends into a black art.

  • http://buffered.io/ OJ

    @James R: Then you find out that the “framework” was actually an old VB6 app that was “migrated” to .NET using a VB6->.NET conversion utility. Resulting in totall unmaintainable framework code!

  • http://buffered.io/ OJ

    @James R: Then you find out that the “framework” was actually an old VB6 app that was “migrated” to .NET using a VB6->.NET conversion utility. Resulting in totall unmaintainable framework code!

  • James R

    Ouch, you win! The conversion utilities are OK, in very small doses, but a whole framework?

  • James R

    Ouch, you win! The conversion utilities are OK, in very small doses, but a whole framework?

  • http://secretGeek.net/ lb

    “And don’t worry about coffee. We have a great big tin of Nescafe Caterer’s blend for you programmers!”

    “We’re not gonna need a contract for thsi. I do everything on trust.”

    “The CEO wrote the first version of the product himself. He still likes to chip in when he has time.”

  • http://secretGeek.net lb

    “And don’t worry about coffee. We have a great big tin of Nescafe Caterer’s blend for you programmers!”

    “We’re not gonna need a contract for thsi. I do everything on trust.”

    “The CEO wrote the first version of the product himself. He still likes to chip in when he has time.”

  • http://buffered.io/ OJ

    @lb: Man that last one is a perfect description for a gig I had in 2007. It was a VB app too!

    Chai would sign up for the first one ;)

  • http://buffered.io/ OJ

    @lb: Man that last one is a perfect description for a gig I had in 2007. It was a VB app too!

    Chai would sign up for the first one ;)

  • http://keithjudge.com/keefsmusings Keef

    My missus’ last job was one where the CEO wrote half the software himself, even to the point of rewriting what people had checked in that day during the evening!  Unsurprisingly, they had a high staff turnover.

  • http://keithjudge.com/keefsmusings Keef

    My missus’ last job was one where the CEO wrote half the software himself, even to the point of rewriting what people had checked in that day during the evening!  Unsurprisingly, they had a high staff turnover.

  • TheNapoleon

    @GingerBreadMilkingMachine (you know who you are): you never got my sarcasm. Although sometimes one would write a test just for the sake of writing a test… (i.e. I need to make sure my file has been created when I use File.Open)

    I remember some other ones:

    “You need to order all methods and properties alphabetically” – Over sized body builder team lead.
    “We cannot script web automated test because we don’t have time to do it” – Test team
    “Your estimates are too high, so I reduced them” – CIO
    “You don’t need regression testing, so I removed them” – CIO
    “We told the business that we will implement their product within two weeks, so your estimates need to fall into that period of time” – CIO
    “There is no code to test” – Web Devs from Portrait Software

  • TheNapoleon

    @GingerBreadMilkingMachine (you know who you are): you never got my sarcasm. Although sometimes one would write a test just for the sake of writing a test… (i.e. I need to make sure my file has been created when I use File.Open)

    I remember some other ones:

    “You need to order all methods and properties alphabetically” – Over sized body builder team lead.
    “We cannot script web automated test because we don’t have time to do it” – Test team
    “Your estimates are too high, so I reduced them” – CIO
    “You don’t need regression testing, so I removed them” – CIO
    “We told the business that we will implement their product within two weeks, so your estimates need to fall into that period of time” – CIO
    “There is no code to test” – Web Devs from Portrait Software

  • JosephCooney

    “we’re using (sharepoint|access|excel) as our back-end”
    “and then after we compile this one we have to crack open ILDASM and just touch up a few things”
    “we really don’t know how that bit works…but”

  • JosephCooney

    “we’re using (sharepoint|access|excel) as our back-end”
    “and then after we compile this one we have to crack open ILDASM and just touch up a few things”
    “we really don’t know how that bit works…but”

  • http://buffered.io/ OJ

    @TheNapoleon: Hrm.. I wonder who that CIO was ;)
    @JoCo: You’ve reminded me of another one! Plus the first one you wrote has appeared in the last 3 gigs I’ve worked on ;)

  • http://buffered.io/ OJ

    @TheNapoleon: Hrm.. I wonder who that CIO was ;)
    @JoCo: You’ve reminded me of another one! Plus the first one you wrote has appeared in the last 3 gigs I’ve worked on ;)

  • Wonky faced ginger monkey

    @TheNapoleon: I was just trying to get a rise out of you :-P childish, yes, but amused me for a while.

    I loved that alphabetical one. Rubbeeeeeesh! Still, it was the easiest couple of weeks I’ve ever got paid for.

  • Wonky faced ginger monkey

    @TheNapoleon: I was just trying to get a rise out of you :-P childish, yes, but amused me for a while.

    I loved that alphabetical one. Rubbeeeeeesh! Still, it was the easiest couple of weeks I’ve ever got paid for.

  • Wonky faced ginger monkey

    @TheNapoleon: I have run out of milk.

  • Wonky faced ginger monkey

    @TheNapoleon: I have run out of milk.

  • http://azure.snagy.name/ Steven Nagy

    Abstracting your database layer is not about being able to switch to a different db, its about testability. And decoupling.

    And you smell.

  • http://azure.snagy.name Steven Nagy

    Abstracting your database layer is not about being able to switch to a different db, its about testability. And decoupling.

    And you smell.

  • http://buffered.io/ OJ

    @Snagy: 90% of the time that is not the purpose. Speak to those who made the decision and you’ll find that they’re doing it “just in case”. I’m not against abstraction for the right reason IF it actually gets used. The overhead of abstraction for the sake of abstraction isn’t worth it in the long run if you don’t use it.

    For me, the jury is still out on altering the architecture of your code just to “make it more testable”.

    Yes, I do :) But you’re ugly, and I can wash. :D

  • http://buffered.io/ OJ

    @Snagy: 90% of the time that is not the purpose. Speak to those who made the decision and you’ll find that they’re doing it “just in case”. I’m not against abstraction for the right reason IF it actually gets used. The overhead of abstraction for the sake of abstraction isn’t worth it in the long run if you don’t use it.

    For me, the jury is still out on altering the architecture of your code just to “make it more testable”.

    Yes, I do :) But you’re ugly, and I can wash. :D

  • http://azure.snagy.name/blog Steven Nagy

    Firstly, I agree that people abstract for the wrong reasons. I’m simply telling you the right reason. Better to do it for the right reason, than not abstract because the reason chosen was wrong.

    Secondly, there’s not a lot of overhead these days. Think about Unity and IOC in general. We already have a half reasonable provider framework in .net: INCLUDING all the functionality we need to abstract our databases right off the bat. I would argue that there is almost no overhead at all.

    Then again, I’ll argue just about anything.

  • http://azure.snagy.name/blog Steven Nagy

    Firstly, I agree that people abstract for the wrong reasons. I’m simply telling you the right reason. Better to do it for the right reason, than not abstract because the reason chosen was wrong.

    Secondly, there’s not a lot of overhead these days. Think about Unity and IOC in general. We already have a half reasonable provider framework in .net: INCLUDING all the functionality we need to abstract our databases right off the bat. I would argue that there is almost no overhead at all.

    Then again, I’ll argue just about anything.

  • http://buffered.io/ OJ

    Better to do it for the right reason, than not abstract because the reason chosen is wrong.

    Erm, yeah that’s  a bit of a no-brainer. “Better do it for the right reason than the wrong one”. That’s a rather catch-all argument isn’t it :)
    I think about Unity and IoC in general and it makes me cringe. Enterprise abstraction. Not my cup of tea.

    There’s not a lot of overhead these days.

    I totally disagree. There is way too much. Attitudes like that are exactly the reason why we have machines gazillion times more powerful than the mid-90s, yet we still have applications that run as slow as the mid-90s too. We get faster with hardware and slower with software.

    Even if you work in enterprise software, you shouldn’t just assume that there are either no overheads, or the overheads can be compensated with hardware.

  • http://buffered.io/ OJ

    Better to do it for the right reason, than not abstract because the reason chosen is wrong.

    Erm, yeah that’s  a bit of a no-brainer. “Better do it for the right reason than the wrong one”. That’s a rather catch-all argument isn’t it :)
    I think about Unity and IoC in general and it makes me cringe. Enterprise abstraction. Not my cup of tea.

    There’s not a lot of overhead these days.

    I totally disagree. There is way too much. Attitudes like that are exactly the reason why we have machines gazillion times more powerful than the mid-90s, yet we still have applications that run as slow as the mid-90s too. We get faster with hardware and slower with software.

    Even if you work in enterprise software, you shouldn’t just assume that there are either no overheads, or the overheads can be compensated with hardware.

  • Paul H

    Late to the party but….HAhah! I think I have heard pretty much all of these in my current contract.

    at my last place I had a classic when I was about to start………’Can we push back your start date please as they guy who is sitting in your desk has not left yet!’

  • Paul H

    Late to the party but….HAhah! I think I have heard pretty much all of these in my current contract.

    at my last place I had a classic when I was about to start………’Can we push back your start date please as they guy who is sitting in your desk has not left yet!’

  • http://buffered.io/ OJ

    @Pads: That is classic :) I haven’t heard that one before.

  • http://buffered.io/ OJ

    @Pads: That is classic :) I haven’t heard that one before.

blog comments powered by Disqus