- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
Or SCM. I'm that, and often am the merge victim. ;-) Sometimes I have to ask the people who made specific changes to sort it out, because they know why they made certain changes, but 99% of the time I can resolve the conflicts myself. We've got great developers who are accustomed to doing merging, but sometimes we have situations where it just isn't practical -- like the time we decided to spawn off a patch release that would have the fixes intended for the next release in it. It got messy, and the developers were under a huge time crunch, so it fell to SCM.
Source version control is never useless. Even on a tiny project it can save your butt. And it takes far longer to rant about it than it does to use the damn thing, unless your company has implemented it in a massively stupid way. (We all remember the tale of Codethulu, don't we?) Larrys are the people who, in the interest of getting the job done, leave you up a creek without a paddle two years later because they not only couldn't see the value of SVC but stubbornly refused to use it even when told it was their job to use it. Like working in a grain elevator without appropriate safety equipment, it's faster, but sooner or later something awful is going to happen.
Admin
“Our agile team needs some strong management, and we think you’re right for the job.”
Don't you love a slash and hack temp being sold as agile.
Admin
It kinda becomes a question of what direction people were given. I think the role of professional devs in these matters is to present the decision-makers with recommendations and their costs so they can make an informed decision; for example, explaining the long-term benefits and short-term costs of source control and the associated risks of not doing so. If Lisa was backing the team in making changes that she knew would take time then blame really does fall on her shoulders - who on whoever was telling her that there was sufficient time.
But it does sound rather like somebody high upstairs saw some figures and made some "decisive" decisions to "fix" the situation.
Admin
Comment? Ain’t nobody got time for that.
Admin
I've seen this too. There is a terminology impedence mismatch here. Programmers think unit test means "testing a small piece of code"; managers think unit test means "test the order entry part of the application". To them, a unit is a unit of functionality, like a page in a web app.
Admin
Could not have said it better myself
If you want to guarantee a software project to fail select one or more of the following;
I have seen this many times. And every time time it leads to failure. It amazes me how management just doesn't get it.
Captcha Damnum; those damn knumbskull software hacks
Admin
Real unit tests (real... fully mocked unit tests...not integration tests) have a very low to negative ROI especially on young projects that dont have a stable set of business requirements.
Needing to pay back some technical debt is much better then never shipping a product.
The CI/TDD zelots are nearly as determental as the "dev on production" crowed when it comes to shipping an initial project. There has to be a balance of getting features out while not completely shooting yourself in the foot.
Has anyone ever worked in a place that has a fully functioning profitable product that was developed from the start using the strictest of development practices? (excluding giant corps that do multi million/billion dollar (Finantial/Medial/Military applications). Every tech company I have worked for has made its money by pushing a product out and are now hiring me to "do it right".
Admin
I see that mentality far too often. Managers love the idea of Agile; they get software every 2/3 weeks! But they forget about the high focus on testing, or refactoring, or pair programming, or having the customer be readily available, or not being able to add new features without removing something.. you know, all the things that make Agile possible.
My old job did this. The CIO decided we were going to be on a strict 3-week release schedule. What he didn't do was give us anything to facilitate those kinds of iterative designs, so what we had was releases that consisted of easy to fix bugs that we could do in time, so that we wouldn't have a release schedule with just 1 or 2 things in it.
This is why you have unit tests for developers and integration tests for managers, or use a tool like WATIN/WATIR or FitNesse to let managers verify that things work as expected.
Admin
Thats not completely true... Ive seen a few projects that break some of thoes rules saved by Heroic Programing .
Admin
Yes. Great products were produced on time.
If they'd hired someone better than you first time round, they'd have made their money pushing their product out just the same, but wouldn't have had to hire you at all.
Admin
Agree with this (including the ranting), except I'd add an issue tracker to the list, and maybe separating development from production environments.
Admin
There's a little saying I've heard many times in this business: "We don't have time to do it correctly now. But we'll have time to fix it later."
Later, of course, never comes. We are so busy fixing all the things that are being wrecked by that out-of-control forklift running around the factory, that we just don't have time to figure out how to stop the forklift.
Admin
I then realized that being a developer, I have a superpower to create a product that can be replicated an infinite number of times. So, I started my own company.
Admin
Any real examples?
Yep and im sure facebook, youtube, and twitter... the top applications in their vertical did it that way... oh wait they didn't! They got a product out... got capital and then spent real time and money on building out a solid codebase and infrastructure.
The last company I worked at got bought out by a larger company and the owner and those of us with options made quite a nice chunk of change. Theres quite the profit to be made being the first to market.
Nice attempt at a childish insult though.
Admin
I'll avoid discussing specific IT methodologies or politicians here, but in general:
If the project was 6 months behind schedule when the new manager took charge and after he's been here for a year it's 3 months behind schedule, to say, "Look, since this guy was put in charge the project is 3 months behind schedule! He's ruining us!" is, of course, grossly unfair. Things are better than they were, so he's improving the situation. Maybe he's not improving it enough, maybe someone else could do better, but he's improving it. He's done better than his predecessor.
On the other hand, if the project was 6 months behind schedule when the new manager took charge and after he's been here for a year it's 9 months behind schedule, to say, "Hey, you can't blame him, the project was behind schedule when he started" is equally inaccurate. Things have gotten worse under his watch. Whatever the faults of his predecessor, he has not fixed the problem.
Whenever a new person is put in charge of something, I say, Give him a reasonable amount of time to put his policies or procedures in place. If things have been going badly for years it's unlikely he can fix it all in his first day on the job. But if after he's had a chance to actually do something, things are better even though they're not completely fixed, he deserves at least some credit. If things are worse than they were before, then it's his fault. Saying that things were bad when he took charge is not an excuse if he has not made them better. If your predecessor screwed things up so badly that you have no idea how to fix it, then you're not the right man for the job either.
Admin
Admin
"Ain’t nobody got time for that" :)
Admin
I am that guy. Since the app was ASP, and option strict was not turned on, people were attempting to use the variable with the correct spelling and getting null values.
Bad bad bad. :(
Admin
"Quality can come later down the line" "You can always add the unit tests later..."
Spoken by someone who has never tried to add quality to a non-quality product, or bolt unit tests onto code that wasn't designed to be tested (seriously, there's a reason that "Working Efffectively with Legacy Code" doesn't fit on a double-sided sheet of paper). Code written like this is a throwaway, full stop. It costs much more to struggle (and fail) to insert quality where it didn't exist before. How developers don't recognize the sunk cost fallacy is a mystery to me.
"...when the money is coming in. No money, no company, no development, no job."
Um, that company is always going to look at ROI, and it's not going to pay people to rewrite software that already creates a revenue stream. The crap software will stay crap, and the next software will be crap, because they'll the minimum amount of work to "get the job done", ignoring every process that has been born out of the last forty years of mistakes.
This isn't about process wankery, it's about actually developing a product that doesn't tarnish your company's image straight out of that gate. If you're struggling to keep your company afloat now, then you probably won't have a job six months from now.
Admin
EXACTLY. This kind of "git r' done" mentality is good only for throwaway projects because there's NEVER time to go back and fix what you hacked together. Once the app is done, there will be more features to add, more bugs to fix, and more work to do that will preclude a full stop "Okay it's ready for launch, now let's refactor/add testing/add quality to what we had to hack up to meet the deadline". How people still have this attitude astounds me because it constantly gets shown that the problems NEVER actually get fixed.
Admin
All of the following depends on the system, so...
There's nothing wrong with source control as long as it doesn't get in the way. And it can get in the way. When you need to be agile, source control is mostly there as a means for maintaining a backup should major changes go horribly, horribly wrong. For everything else, keep the document open and a big, fat undo stack (10,000 undo level is fine). If no one complains for a week after the change, then it is probably fine to close the document and commit the changes to source control.
There's also nothing wrong with working on a live system in a small team of two or three people. Around 6-7 developers on the same project, however, source control pretty much becomes mandatory to maintain sanity. And around a dozen or so devs requires more enterprisey setups with separate dev/test and production environments.
Admin
I'll just assume you're kidding.
Admin
Wait, do you work at my company?
Admin
You unit test the high-level methods, which references everything else.
Say that you have a class with three public methods, two private methods, and five properties.
Theoretically, the properties may support what happens in the public instance methods, and the private methods will be called by the public methods. So just testing the public methods should cover the vast majority of the class.
Admin
No you are wrong.
If you startup a project, all that fashionable stuff will keep you on target. This project in the WTF was already doomed. There was no saving this project. There was no undoing the damage done. Management should have met with the stockholders to determine if they should just drop the project since no one was interested in seeing it to completion.
They made a scapegoat out of good developers and middle management, and now they are left with the same garbage that got them into the mess to begin with.
Besides, you don't put your internal tools devs mixed in with product devs, because then you have no way to acknowledge what benefits are coming from your internal tools. Even if actual work is crossover, you need to have a true cost-benefit of the internal tools separate from the product sales.
The problem with software engineering is that non of these internal tools and procedures have been codified in the actual cost of business.
No one hires a plumber, bids on a building project, etc. without determining an estimate. No engineer just starts hacking away at concrete to make those two big blocks of the bridge fit together because two teams built either side of the bridge.
We haven't codified the costs of planning software development as a distinct phase from actual building and deployment.
These are the true problems of software engineering. The vast majority of software engineering is not engineering at all, but just plain programming.
Nothing wrong with Agile, but it has to be weighed as the cost of estimate/engineering, and distinct from the cost of development.
Admin
This is the first time Nagesh, wrote a complete (well almost) sentence.
Admin
It's too bad nobody caught the well-hidden reference. http://www.youtube.com/watch?v=bFEoMO0pc7k
Admin
If Version 1 is utter shite, then no one is going to want to use Version 2, no matter how many pictures of cute kittens you add.
And as for adding features vs quality control, what good is having half a dozen more features if they're all half baked and don't work worth a damn? This is the difference between Microsoft's approach and Apple's. Microsoft goes for the bullet points on the box. Apple might leave some features off of version one, but that's because they recognize that you only have so much time in the day, and you can either spend that time making some features really, really good, or half-assing some other features.
Admin
Agreed, however, running something like that on a commit hook would be nice to keep the code somewhat consistent.
Admin
Herr Otto is right... in extreme fringe cases. What often happens is you never have time to go back to add tests later "when the money is coming in", because there will be other things that will bring more money in that push testing and good practices to the curb. That's why it's so important to have quality from the start; if you fall into the trap of "Spending time making the code good won't let us sell it fast enough" you're never going to be able to recover and get the time to do it right again.
I have never seen any place actually address quality concerns in a rational manner when there was a somewhat valid excuse to not address quality at the start. It's always been ignore quality now, and then ignore quality later because you've already shown that you can put out a "successful" version of the software without quality, so all of that high-falutn' quality stuff is rubbish.
Admin
And we have found the real wtf. Doing it right saves time. Doing it wrong takes longer.
I don't think that what this means is what you meant, but I agree with this. You can work a lot faster if you're not trying to untangle regressions - that is, if you write good unit tests.
No. Just no.
Admin
While a small team can work directly in production, there's usually almost no cost to doing things right.
And really, there's no excuse for not using version control.
Admin
I've used this approach quite effectively while working on various homework projects in the graduate school. Nothing beats a version control and a makefile that such that a checkout of a 'last good' tag followed by a "make submit" will generate the pdf and any needed attachments and email it or upload it where it needs to be mailed/uploaded, a minute before the deadline :)
Admin
That's some M. Night Shyamalan-level stuff right there.
Admin
Admin
Admin
Umm.
Admin
Unit tests don't require more hardware. You can test your mock objects, like SQL result-sets right now.
Waiting for the SAs to build another SQL server or an Apache instance to run integration tests, means you may not test at all.
Admin
But did they make you eat chuck?
Admin
Yes.
Many years ago I worked in a team of 6 developers who were designing a ballistic gunfire control system for on board ship. We used JSP/JSD, modular design including unit tests, based on a domain simulator which we just happened to have which had evolved over the course of some years, and a rigorously structured suite of documentation specifying its mathematical design. It was the first (worldwide) commercial shipping of a program written in Ada. We delivered it within budget and to the timescales. We plugged it in, turned it on and it worked first time.
It was admittedly military (naval, specifically) but it was not multi-million dollar - IIRC it retailed at a modest 6 figures. We delivered a few more of these babies.
Admin
Getting it out the door, with the intention of fixing it in V2, is the cardinal doctrine of the Church of the Spaghetti Monster. Management that is SNAFU enough to allow slap-dash project development is too SNAFU to ever see value in refactoring. One V1 is "good enough", You will be put to work doing something else. The app will be patched when there is a crisis, but only enough to avert the crisis.
Captcha jumentum: "Jumentum is a Robin Williams film, remade for a Latin-speaking audience."
Admin
"So, logging company, you are a long way behind on your deliverables (logs). That's OK, I'll cut to the chase and cut down trees faster as I won't be pissing about with all the trendy fashionable shit like chainsaws and front-end-loaders and mechanical log lines. An axe was good enough for me when I started as a lumberjack so I refuse to use anything else."
Admin
As for your point on Unit Tests taking time away from adding features - if you're really in the sort of shithole where you need to deliver something to fund future versions, then I'd suggest you shouldn't be focussing on adding features anyway - they're just gonna make an already pretty risky deployment even more dangerous....
If you ever are in the situation where it's "cut corners to deliver something...anything" then you really have to start questioning whether you really want to deliver anything at all. Releasing a bug-filled product migth get you some $$ in the short term (because the customer doesn't know better) but it seriously risks losing any credibility when you want to deliver an improved version - or (worse still) different software altogether. In this situation, I think the idea would be make fast bucks selling the buggy version, then start looking to bail out buy seliing your "very successful operation" before the backflak....
Admin
Like with anything else, you need to achieve a balance between quality and functionality - you'll rarely (if ever) develop the absolute best quality product and it's important to consider Cost of Quality vs Cost of Poor Quality (why am I having a Six Sigma flashback - or was it CMMI?)...
<offtopic> NB: Similar goes for security. You need a balance between security and functionality. The most secure computer is one that isn't turned on - but it's not much use to anyone. </offtopic>Admin
Depends what you mean "get it out the door"... Some things like full code coverage unit tests and TDD can be very time consuming in the short term.
However:
Will keep a project from becoming spaghetti with little to no additional overhead vs "hrrr...get er don!" when working with competent developers. This should also leave the code loosely coupled which should make implementing unit tests to prevent regretion trivial.
Developers do not need unit tests/TDD to write good code, and unit tests/TDD do not make bad developers write good code. When all other procedures are being properly observed all unit tests accomplish is alerting you when someone is repeating the same mistake twice (unit tests do not magically test all edge cases even at 100% code coverage).
On the comment about management/refactoring... it is the job of the team lead/ team architect to explain to management how not refactoring will effect there bottom line/timeline.
I get to use a line like this all the time: "Feature X will take 30% longer to be completed because we need to refactor system Y... if we dont all dev work henceforth will suffer a additional 20% time overhead from technical debt."
If they complain... or object... "If you think you can find someone who will be able to do this better and faster then me you should fire me and hire them".
PS: Note I dont think unit tests/TDD is bad... just not a cache all solution.
Admin
If when someone walks into a project it's 6 months behind after 12 months, and in the next 12 months (under their charge) slips another 3 months, then although they haven't fixed the issue they may have started to real in the slippage (or things might have just settled down). Sometimes it's not as easy as reversing the trend immediately. When you're reversing a train, you apply breaks and it gradually stops going backward, and then you can flick the reverser and go forward....
EG: a project has taken 12 months and is already 6 behind...(ie it should have been at this point in 6 months not 12). Suppose At the end of the 13th month, we are 6 months 10days behind - going at the old rate (of taking twice as long) we would have been more than 6 months 2 weeks behind... Suppose after 14 months we are 6 months 19 days behind...we're still slowing the slippage... 15 months and 6m 26days....vs 7.5 months 16 months: 7 months vs 8 months 17 months: 7 months 4 days vs 8.5 months 18 months: 7 Months 6 days vs 9 months 19 months: 7 Months 7 days vs 9.5 months 20 months: 7 Months 7 days vs 10 months....etc...
Sometimes, winning is reducing the slippage. Of course, eventually we want to eliminate the slippage altogether (and reverse it if possible) but a lot of it depeneds on miulestones not being set in stone...
I suppose in an ideal world, when you are appointed to a project that is behind, the first step should be to renegotiate the timeline...so you;re never in arrears. In reality, even if we wipe off the original amount of time we're behind, there'll still be a certain expectation that the various milestones still take the same amount of time - just with a different start date...
Captcha: ridiculudus
Admin
Admin
Admin
Aside from the attrocious spelling (I'm not surprised there was a sub-argument about missplet variable names) I find it a bit frightening at the willingness of people to cut corners.
Recently I built a house - well, I didn't, I paid someone else to do it. I wouldn't have been very happy if after moving in they said "Yeah, we didn't have time to build the frame properly, so we'll come back (in a couple of moinths (at your expense) to fix that up - oh, and the leaking taps we put in - we didn't think to check whether they worked because it was too hard to actually switch the mains water on, and by the time we did it was kinda too late. Actually, come to think of it, a couple of your doors don't hang straight either - but we didn't have time to get a spirit level out to make the frames square - you did want it built by April, after all, and that was more important than doing stuff properly (we don't know how we'll realign the windwows - maybe you just live with that, mk?".
While there is a certain specialisation in IT that is perhaps unique to the field (I'm not always convinced) the bottom line is still the same - things should be planned properly - and in the IT world this includes being comfortable that stuff works. This fundamentally includes using adequate checks and tests to minimise (read: attempt to eliminate) any chance of mistakes being made and a substandard product being delivered.
Perhaps one of the biggest issues in IT is that intelligent people (or at least those perceived to be intelligent) are at the bottom of the chain, not the top. This means they always think they know better. A brickie gets told to brick a house, and he whacks bricks and mortar around and gets the job done. A code monkey gets told to implement something and he takes a free license to redesign/recreate every working library known to man....DateTime, Data Structures, etc, etc, etc - unless you are very, very experienced and actually understand fully what you're doing, just use the existing ones - they have evolved from people a lot smarter than you working on them for squillions of years...and they've probably been tested far more extensively than you'll ever have time for....
captcha: commoveo - since my hair started falling out, I have started to wear a commoveo
Admin
I'm not.