How to add paypal things to your website?

How to estimate website project cost when relatively inexperienced?

  • I have a client who has an existing website written in PHP spaghetti code and has been through a few developers. He wants to add features and upgrade to a modern framework (Django). The website is quite involved (tests, shopping cart, user authentication) and the requested features would add another layer of complexity (teachers and students). I have experience working with Django but I'm not confident enough to estimate the whole thing. Worse still, my client is non-technical and keeps asking for updates while remaining cagey about cost/ trying to lowball instead of considering technical difficulties. How does one proceed? Two things: 1) I'm new to project planning. I've worked as a full-stack developer before though this is my first time "dealing with a client" and discussing rates. The codebase is a mess and without clairvoyance of knowing what will break what, I've drawn up a functional specification and given a rough estimate (~100 hrs) though the client wants to hear total cost and has budgeted only 5-6K (a bit low in my estimation). I try to explain to him that testing, deployment (Amazon EC2), bug fixes, transitioning PHP to Django code/middleware, feature requests also play a role. Is it better to work hourly or project based in such a situation? Also, though he seems like a reputable guy, what prevents him from screwing me over, adding new features last minute outside contract scope or expecting functionality and then paying? I've already spent many (unpaid) hours setting up a development environment that have not been factored into total cost. Does one need a legal contract (begging the question of having agreed project budget/hourly rate) or can one split up the project into quarterly installments and get paid upon achieving milestones? 2) As I get better at this, is the next logical step incorporating as an LLC? I've been paid a W-2, Paypal, checks and cash for services as an independent contractor before though many friends have formed 1-person web-dev LLCs. Is there any reading material for this process to think in more business savvy terms? Thanks a bunch MeFi!

  • Answer:

    As a Django developer, this sounds like much, much more than 100 hours. There's no such thing as transitioning code from PHP to Django, unless the PHP code is already well structured along MVC lines, in which case you're just retyping it in Python instead of PHP, but why would you if it's already well-structured? If you're really dealing with spaghetti code, then tens of hours just to understand what's actually going on in the codebase should be expected. I wouldn't even try to set a fixed price on this, especially with a client who comes into it thinking he's got a cost already and it's about getting you to fit within it. I would say something like this: The scope and risk is too uncertain for a fixed price project. I'll bill hourly and invoice monthly doing a feature match implementation on a proper platform, providing per feature time estimates that are informational, not binding. We'll structure the project so that you own the code repository, so if we part ways halfway through you have certain possesion of all paid-for assets and can find another developer to take over. We'll take an agile approach where you'll always have functional code to see--first a shell site running on EC2, then something into which you can log in, then products to browse, then a cart, then checkout... The point of this approach, assuming he's a sincere customer, is to acknowledge up front that neither of you have a clue how much this will cost or how long it will take, but that you can work it in bite size chunks where you're confident estimating it, he's confident paying for it, and he's always free to walk away and hire someone else--which paradoxically increases his confidence in you. If you're paid hourly, then it doesn't matter if he changes scope or says "no, I want it another way", because you're getting paid for the work. If he says you didn't deliver and he won't pay for that, then you say "thanks for the work, another programmer can take over from here"; likewise, if he feels you're dogging it, he can say "thanks, we're done now, here's your cheque, another programmer will take over from here." The point of all this, and you should say this explicitly, is to minimize risk for both parties by keeping deliverables small and well-defined. If he says "how do I know you'll deliver good code?" you say "you can pay a more experienced programmer to spend an hour reviewing my code that took 20 hours, by giving him access to the repo." Acting fearless of review by someone else, of being fired suddenly, of losing a smaller-than-project-sized cheque, is key here. If he insists that you estimate it and provide a fixed price, you should probably walk away, but if you must, quote an estimate that covers your risk of unknowns, of scope creep, of unforeseen issues, and feel free to tell him that you're inflating your estimate in order to hedge against the risks he's forcing you to take. Tell him he can lower the price by sharing the risk via the previous method.

bodywithoutorgans at Ask.Metafilter.Com Visit the source

Was this solution helpful to you?

Other answers

Worse still, my client is non-technical and keeps asking for updates while remaining cagey about cost/ trying to lowball instead of considering technical difficulties. How does one proceed?I'm no expert, but... run away.

smcameron

the only thing you will get out of fixed price billing for this project is a very intimate understanding of why you shouldn't do fixed price billing.

lescour

We literally just had this exact same sort of situation come in our office, on a much larger enterprise client, for a much larger project. It's not in our wheelhouse. We're a PHP shop, and they're asking us to integrate the interfaces of two different systems, both written in nasty Java with the ZK framework and Zul files with inline CSS and business logic and all sorts of nastiness. This is a $100k+ project, and I went to a meeting this morning and explained that this wasn't a good fit for us. Fortunately, we had some alternatives that would work for them, that would make it a better fit, and the client is fantastic and understands where we're coming from and trusting us, but what you're describing is a horrible client in the making. This is someone that will drive you nuts, lowball and nickle and dime, not understand why things take longer than you initially said (because as you get further into the awful code, the more you realize it's awful and horrible to work with and reverse engineer, etc) and the project will VERY LIKELY grow to be VERY UNPROFITABLE very quickly. YOU WILL LOSE MONEY ON THIS PROJECT is what I'm saying. Django's Python. It's nothing to do with the PHP this thing is written in, so you can't just reuse ANY of the existing code. You'll have to work backwards to fully spec the thing out, make sure you're bringing over the core functionality, and you'll have to do so on a budget. Let's look seriously at your 100 hour estimate. That's 2.5 weeks. You're saying that in 12.5 days you can have all this done? The reverse-engineering is work. It shouldn't be free. The confirming the specifications is work. The actual coding the entire thing in a completely different framework is work. So is validation. So is migration. So is any sort of design, or porting the existing application's design over. AND WE AREN'T EVEN TO NEW FEATURES YET! What you're describing isn't a small project. It's definitely not an "actual 100 hour" project. It's more likely something you quote 100 hours on, run to 250 or 300 or 450 hours, and then have to battle every step of the way for coming in so far over. The client has already been through this, doesn't trust developers, and it's because no one is giving it to him straight. Don't be the guy whose eyes are too big for his stomach, unless you're literally nearly on the streets and need the money. Instead, set and manage expectations at every single step. ALWAYS segment your quotes. Try to stay away from fixed bidding and explain that you're estimating things will take "between X and Y hours, probably on the higher end". Make sure X and Y are 3 times what you reasonably think they'll actually take. Keep him up to date every week so that the expectation management is a consistent, persistent process and not "better to ask forgiveness" because you won't get it. (For values of "forgiveness" that = more money.) There is such a thing as a bad client. There are clients that take up disproportionate amounts of your time, focus, energy, and sanity, and give nothing back. The "experience" is nice, I suppose, but only in the sense of fulfilling one of my favorite quotes: "Good judgment comes from experience. Experience comes from bad judgment." This is a bad judgment moment. You will end up regretting taking this project if you don't change your approach (and quote) entirely. You will feel bad because you are a good person and don't want to abandon the client or keep charging him. So YOU will end up eating it on HIS project because of HIS unreasonable demands and YOUR integrity. This is a mistake. Either run away from it entirely ("sorry, but I don't think I'm a good fit and that I can do what you're looking to have done within this budget, and I don't want to set unrealistic expectations and not meet them") or significantly alter your approach with him so that there are real milestones and a real budget involved. I'd honestly opt for the former. Learn the lesson of saying no to bad-fit clients now. It's a lesson I've taken literally 10 years to really learn. And I've never once come out better for those clients, except that I know what to FULLY AVOID and turn away now.

disillusioned

No offense, but you sound totally out of your depth as a consultant. You don't even know what you don't know about this project. Under no circumstances should you do this as a fixed bid. Aside from exhorting you to flee, my next best advice is to find a more experienced consultant, bring them the project, and ask them to take you under their wing and mentor you through it.

ottereroticist

Wow. Run away. If you're estimating 100 hours (2.5 weeks) to basically rewrite an entire site into python from PHP with extra features, you do not have the experience do do this yourself. If his budget is 5-6k, at the high end, thats only 50 bucks an hour as a consultant, which in my world (as a web dev who has been doing this for ages, but living in an area with a high cost of living) is a serious lowball. I'm on my phone and rushed, otherwise I'd go into a long spiel of how i do estimates. But the short version is break it down into tasks, estimate time and risk, multiply those together, and double the whole thing. Document all those features, as well as all assumptions as a 'contract' and any feature creep is met with a new estimate of cost. Also -- why django? Is he just looking for a 'modern framework'? Is that the one you suggested, or him? Ugh. There are just so many things wrong with this. Unless you seriously have no other options, and would be willing to work for months for the 5k, I'd just walk away. But on the other hand, horrible clients and projects like this is something we all do at least once in our careers as freelance web devs... It's how you learn when to run away. Good luck!

cgg

This will end extraordinarily badly. Leave. If you wish to help this client, I suggest that you instead try to find an existing service such as BigCartel or Shopify that covers 90% of their needs, and recommend it to them, and THEN leave. I would not, under any circumstance, take this engagement. There is very little chance that it will create business value for the client, and a very high chance that you will lose money, reputation, and time. Nobody will be happy. This is not a 100 hour project. And it is definitely not a $6,000 project. Explain to the client that upon further consideration, you've determined that you're not a good fit for the project. Move on.

grudgebgon

I've been writing PHP code for more than a decade and I've seen it done very well and very poorly. An entire app written in spaghetti PHP could easily take more than 100 hours to fully trace and convert to a manageable MVC spec. A previous project involved converting a pretty decent MVC PHP app to Ruby on Rails. That project took more than 100 hours despite the fact that I wrote the original PHP app and knew it inside and out. The fact that you've already got part of the app in Django and part in PHP is not a plus, it is a giant, blinking red flag. Knowing only what I've seen in this question, I wouldn't be surprised to see this be a 300+ hour project, start to finish.

toomuchpete

1) This isn't a great short-term deal for you 2) DO IT Having done projects like this for years, I would not agree to the 100hours nor the $5k. However, you should take this for the EXPERIENCE. You'll better understand where you made incorrect assumptions, etc. You'll learn. The next project will be better. The low $ is for your inexperience in managing a project. That's OK! Once you do a few you will get better and better, have proven yourself - you will get referrals and more work.

Sonic_Molson

This sounds like a bad client, can you contact some of the previous developers and ask them for advice. My guess is you will have a tough time getting paid if you take this on. Fatbird has it, this is business, structure this into agreed milestones on a T&M basis with payments at each milestone, do not proceed until you have received all outstanding payments. Further set a credit limit of say $1000, do not allow this client to owe you more than this at any stage. I do not expect the client to agree to this and that would be OK by me. Even if you get paid at each milestone, you will probably not get paid for the final one so make ongoing support and enhancement (inclduding cooperation with successive developers) dependant on being paid on full.

epo

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.