flyingmoose — 2012-11-20T14:01:05-05:00 — #1
I am posting this here because I'm unable to post under the General Web Development forum...
I have a small publishing company. We sell educational programs, and our main product is a patent bar review course.
Our current course is paper books, audio CDs, cardboard flash cards, and one software CD.
I would like to convert the course so that it's all on-line. I am concerned about both getting the project done, and getting support afterwards.
In my mind, the project consists of 2 parts.
The first part should take orders, and charge credit cards using authorize.net's option where the user is sent to their site, the information is entered and card authorized, and then some of the information is sent back. That way we don't have to deal with credit cards, PCI compliance, etc. The user will be able to create a login and password, and access a small subset of the material for free. The user will be able to purchase 2 versions of the course, one having an extra set of introductory videos (for a higher price), and the other without. The user should be granted access for 3 months (sort of like a subscription), with another 3-month term which the user can activate at some time in the future (either right after the first one expires, or later if the user chooses). The user will also be able to purchase additional 3-month terms for a lower price.
The second part will be the presentation of the online course. This will include a series of web pages (probably database-generated) that the user can access, audio and video recordings that the user can play, questions which the user can take (stateless), some kind of flash-card app. It will also need to pass the user name to our current online exam simulator (written in PHP) in a hidden HTML field. There may also be two revisions of the course at once (depending when the user will be taking the exam), so between the free, paid, and premium, with 2 revisions of each, we could have up to a total of 6 versions of the course at once.
It will also need some kind of editing functionality for the HTML content, having about half-a-dozen paragraph types, plus bold, underline, italic, and strikethrough. The content is currently in Adobe Framemaker, which produces fairly clean results when exporting to HTML.
I would like this to all be hosted on a RackSpace CloudSite web hosting account (which have databases available). I could do it on a server (virtual or real) if required, but I've maintained a Debian server in the past and I'd rather not take on that responsibility again.
I got a quote from a company I found on google for $75,000 for the project, and they wanted to implement it in .NET.
A few questions:
Should I use Linux/PHP or Windows/.NET? It's not much more complicated than your average porn site (selling access to content). My friend who does web design says he can do it for a few thousand in PHP, but if it's going to take $75,000 worth of development in Windows, it must be incredibly inefficient (I know nothing about .NET, only Linux)
How much should I try to design myself, vs. give to the programmer(s) writing this? I generally have a pretty low opinion of the design abilities of programmers, judging because most of the software I've ever used, even from big established companies, has many bugs, poor interface design, and doesn't seem like it was designed by someone who truly understood the business they were programming for. And this doesn't even take into account the many software projects that can't be finished.
Should I go with an individual developer or a software company? Do I really get 20 times the value from a company? I could hire an individual programmer for a lot of hours for the money a company wants to charge. And, how do I find a good programmer or company? It's notoriously hard to know how good a programmer is before you've worked with them, and failed software projects are incredibly common.
flyingmoose — 2012-11-20T14:18:52-05:00 — #2
Hey, I posted this in a different forum. Something is really screwed up here. And my post counter is wildly wrong.
guido2004 — 2012-11-20T14:21:33-05:00 — #3
Yes you did.
No it's not.
No it's not
I explained all in the post you made in general discussion about your posting problems.
flyingmoose — 2012-11-20T14:23:14-05:00 — #4
Ok, thanks. My friend, who has made thousands of posts here, said it's never happened to him. As I'm always saying, I swear I'm jinxed.
serenarules — 2012-11-22T01:00:21-05:00 — #5
You already have my input, though maybe posting so close to Thanksgiving wasn't the best timing now that I think about it. Heh. I'm sure that once it's over though, my other buddies on the Programming team will have something to add. Give it until some time next week to get real feedback.
molona — 2012-11-26T05:30:40-05:00 — #6
For that cash I'll do it! :lol:
Ok, ok, I'll be serious. I don't know why you've got such a high quote but it looks to me that's a bit high, in principle. But maybe that company had a good reason to quote like that. Did you compared prices with some other web development company with reputation?
Inefficient what? PHP? or .NET?
Each language has its own pros and cons. None of them is inefficient. In my case, I always go for PHP and Linux... not because they're better than Windows and .NET but because I can lower the costs of hosting and maintenance and also it gives me more freedom if I'm migrating. Let me expand on this a bit
Contracting a Linux server is cheaper than a Windows one (although if your company can afford those quotes, probably it is not much problem to you but in the end everything adds up) and while PHP works perfectly in Windows, .NET can have problems if you have a Linux server (basically, many objects and routines created with .NET are built only to work under Windows). And I love to have the freedom to move from one server to another without having to worry about annoying migration issues and have a wide range of options (in case that I want to move, of course). I hate to be limited by the OS.
If I use PHP, I can choose Linux... or Windows without any problem.
If I use .NET, it would be rare that I could use a Linux server... it is not that portable (basically for those objects that I talked about earlier)
Linux servers are, in general, more stable and less hacked (if anything because there's more information about Windows and most hackers love to annoy Microsoft). Although I would note here that the security of a server is really related to the skill of the guy that configured it.
Still... why would you choose programming language over the other? Well, because you need to hire someone that can do the job and you can trust, and it will depend on what he knows best. If he knows .NET you will follow that route. If he's better with PHP, then you will have a PHP site.
Of course, maintenance and future growing of the site is important, and how easy is to find someone to do those tasks in each programming language is another point to take into consideration.
Design should be given to a designer, not to a programmer. Still, this designer, ideally, should have experience with interfaces and with web... because the nightmare of a programmer is a designer that doesn't understand that the web .
Now, most programmers have enough knowledge of databases to do the job and will use a CMS which has already optimsed so you can save yourself the database expert there.
Whatever you're more comfortable with. You need to trust that they're doing a good job and that they will comply with your requirements. A company may offer more guarantees... but they can also fail as a solo programmer can (although he may not be that solo, some of us hire one or other two programmers when we feel that we can't do it on times)
You need to check what they've done before, the way they treat you, how they charge, their experience...
Of course, because this is a major job and you may want to put them to the test, giving them a small job that you may have pending and see how they handle it.
I hope this helps
serenarules — 2012-11-26T08:56:24-05:00 — #7
Thanks for replying Malona. When he asked about how much he should get involved in design, I am not sure he meant visual design, but rather, how much he should be involved in the overall programming (as well as interface design). The main issue here being that he actually knows something about programming and development himself. However, more advanced concepts, such as Domain Driven Design, he has little experience with. As such, a need arises on his part to understand it if the chosen developer is using it. In the past, everything he's had done was primarily in linear PHP, which he knew better, and made tweaks by him easier. However, those were simply one-task items, with little business complexity and no need for scalability. The main thing that has been missing from the equation for the project he mentioned is a good lead, well versed in both development and the business at hand. Communication was a mess, which I'm sure lead to most of the confusion.
flyingmoose — 2012-11-28T12:54:22-05:00 — #8
I guess what I'm proposing is that I be the designer. I have a degree in Computer Science, so I understand the concepts, but I haven't programmed in years. But my big advantage is that I know our products well and have finally banged my head on this enough that I figured out how to represent them online (such as, how interactive each particular part should be, how to organize everything, etc.) I think my biggest problem is that I don't say "no" enough to features and fancy ways of doing things that the programmers I've worked with suggest. I find that the simplest ways of doing things have the least amount of problems, so I have to balance making it simple for the user and simple for the programmer.
I'm just not sure what, exactly, I should furnish to the programmer in terms of a specification. I took a Software Engineering course, but it was very formal and low-level (probably because the prof had worked in aerospace). I want to design on a fairly high level so I need a programmer who has enough ability to go from that to the finished product without having the complexity run away on them.
oddz — 2012-11-28T13:36:42-05:00 — #9
What you would like to build sounds like a very involved web application. I don't think 75K is unreasonable for a custom web application. You could role the dice with a content management system modified to do what you want. However, any content management will never be as user friendly, scalable or optimized as a fully customized solution for the exact business needs. One important note about a open source CMS is that rarely can the workflow be changed. CMSs have a very specific work flow set forth to fit a generic model. It is that generic model that many times results in a convoluted interface for the end user. However, with a custom solution the work flow, interface, etc can be done in a way that best makes sense to the end user rather than being pigeon-holed into a generic interface.
molona — 2012-11-28T15:40:23-05:00 — #10
Design for the web is a bit different than designing for a desktop application. For sure, you may want to be involved in the design phase, know the elements that you want to add and the functionality that each of them will have. You can also guide the designer where you want those elements so they're easy to use and find.
But as for the visuals, unless you're decent, it is better to higher a good designer with experience in the web world. They will create a nice layout with matching colors. I say with experience on the web because some designers are great in graphics, and do think about how the layout will coded, how to use the smallest size for each image, and reduce the number of images as much as possible and yet create an elegant, usable design with lovely colors... and on top of that, they will be aware of things such as color contrast and readibility.
Most programmers can't design and that's not their work to be fair.
molona — 2012-11-28T16:02:50-05:00 — #11
As you say, it really depends on needs and specifications but with the current information I'm under the impression that you could use one of the CMSs out there and hack it accordingly.
flyingmoose — 2012-11-28T17:22:19-05:00 — #12
Can I have some examples of CMSs that you're talking about?
flyingmoose — 2012-11-28T18:10:21-05:00 — #13
Also, I don't know if it's allowed in this forum, but if it is, can I have specific recommendations for software companies?
molona — 2012-11-29T03:00:06-05:00 — #14
Joomla, Drupal, Magento... These are the three that I would start considering for a project like this.
Joomla and Drupal have lots of plug-ins that may offer the extra functionality that you may need. Any of them have the editing ability you mentioned by default.
Or, if you want to follow SitePoint's way (see learnable.com) you can even use WordPress.
Having said that, I assume that the company that quoted that price did have these CMSs in cosideration, and quoted for a new and fully customized solution for some reason.
Unfortunatey, no. If you need I can recommend a designer though. I worked with him and I can assure you that he has good taste, style and understands perfectly hues and saturations and... color contrast!
serenarules — 2012-11-29T07:15:01-05:00 — #15
Something that hasn't been touched on, and was a real problem before, was choice in frameworks and development practices. Assuming a custom solution is chosen, rather than a hack of a current CMS, several things needs to be considered.
1) Whether or not to use linear verses OOP.
2) Whether or not to use a framework (MVC, CQRS, etc...).
3) Whether or not to use domain/test driven design (in this case, domain being the business domain, not an internet domain).
One of the main issues that arose before was the desire of the client to develop top-down, beginning with UI sketches and discovering what is needed as things were written. While the developer wanted to model the business first in order to determine what actually needed first, such that less revisiting of the code would be required later. Of course this difference of style led to problems. When Flyingmoose asked about 'design process involvement' and 'fancy ways of doing things', this is the area he was referring to, mostly, not UI design per-se, as he was already working with a UI designer for that. And that gave rise to more issues in that the UI designer was unable to properly stub/test because the developer was not yet at the UI (in this case MVC) level, but still in the domain and services layers of a DDD implementation.
It might be a good idea to get a few comments listing what everybody sees as pros and cons of each of the related items above, so that others understand what is at stake better. Scalability and serviceability vs development speed and tweakability, etc...
At this point, I'll admit, I am the 'friend' he speaks of. I've worked with him for over 10 years now. I've redesigned his static site about five times and written several one-shot, stand-alone programs for him over the years. It was a real shock (and tested our relationship) when this particular project began to fall apart. It was I who suggested that he post here in hopes of getting some good non-biased input. The project wasn't all that difficult, the problems laying mostly with communication issues and disparity between what I thought was best for developing the application and what he was used to.
So if there is anything one can say to help clarify (not only for him, but others as well) the issues, their pros and cons, maybe he can make a more educated decision. I know, I for one, would still be willing to work on it, especially considering I've experience with his business model already, but saving the friendship is more important to me right now than a bit of work.
molona — 2012-11-30T04:17:03-05:00 — #16
I don't consider myself the best to answer but I will try
You propose tough questions... and I'm not sure that I can give a well written and clear answer.
I'm not sure that DDD is needed for a project like this. It is a complex model and in my personal opinion only worth to use with medium-to-big, diverse groups and long term projects. But then, my experience with this type of approach is limited and I like to keep things as simple as possible (although, up to a point, we all use DDD in a very intuitive way). If anything because problems will arise... they always do... and I don't need the extra complexity.
I've always been a fan of doing the backend first, and then the front, even more in the world of web development where speed and permace of databases and connections are everything... clients don't wait after all! Then, when the basics are working fine and dandy, concentrate on the design. My process being, very roughly, as follows:
- Define goals
- List the functionality requested
- Do a very rough sketch of the main pages, just to know where the main areas will be placed (navigation, ads, etc.)
- Do a mockup of the site (most customers need a visual guide, they're heavely worn that the outcome may differ of what they see)
- List the task to be done
- Set time frames
- Develop and deliver
My experience is that doing the backend first and the front after is faster than the other way around.
Some customers require that both are done at the same time but I find this a pain because when they get very annoyed (the site is not fully functional so you get lots "This doesn't work yet!" comments) and they keep on changing their mind over and over. You can't concentrate on one thing and therefore the whole project suffers and the quality may not be as high.
1) Whether or not to use linear verses OOP.
Linear is easier to understand (especially if you're not that familiar OOP) and to grasp but definately OOP has certain advantages for complex projects and anyway, if you use any framework it is more than likely that you will have to deal with OOP as many of them (if not all) use objects. With OOP you can create a class and then pass on its characteristics to a different class... if only for that, this is a time saver
2) Whether or not to use a framework (MVC, CQRS, etc...).
Not too sure how to answer this. A good framework will increase the efficiency and developing will be faster... but I don't use them that much. The reason is that there are so many out there, each of them with its own advantages and disadvantages, that I got fed up with trying to choose which one will be the best.
3) Whether or not to use domain/test driven design (in this case, domain being the business domain, not an internet domain).
In terms of feedback it is great in terms everyone that should be involved (coder, developer or designer is great) and everybody speaks the same language and terms. But I'm not really sure that it helps communication because defining a good model and creating the patterns and everything that DDD can be a real pain... creating the model itself doesn't need to be hard.. but definitions are always hard work. And also you need to make sure that the model is clean (meaning that non-domain concepts should leak into your domain)
Therefore I don't think that DDD is useful in all cases.
Not sure if I made myself clear.
serenarules — 2012-11-30T10:54:17-05:00 — #17
This right here was one of our biggest challenges.
As a developer who mostly worked with large firms in the past, comprising of teams of up to thirty, working on highly complex distributed applications for clients such as the USPS, Estee Lauder, and 911/EMS/Police dispatching for the states of Ohio and California, I am just too used to a certain set of tools and methodologies to affectively apply myself in a smaller situation. I think, perhaps, you're right in that he doesn't need these things. I do agree though that the backend needs to be done first. Well, after the anaylsis phase anyway.
stomme_poes — 2012-11-30T13:13:21-05:00 — #18
This is interactive? Lots of events triggered by users? Functional ftw.
Honestly, don't most people do whatever style works with the data available and what's to be done with it? If you have data objects, you write object-oriented. When you have (possibly async) events, you write functionally. When you have a chain of "first do this, then do that, then do that" then a procedure probably makes sense.
I agree with oddz that this sounds actually very complicated and because it's trying to replace physical learning tools (which, I dunno... don't people still want to bring flash cards with them when travelling, sitting in the waiting room, etc? No batteries necessary and all that? You can even write on them yourself? Are you really ditching all of the physical stuff?). Learning online (e-learning) to me always seems very tricky and complicated.
I do think that the moment there is something to test on real people, test it. I don't care if it's a cardboard cutout of a proposed web page. Test it. Refine it. Test it more. Heavy interaction makes me think designing and building a whole backend just wouldn't be possible even with the current user data the OP already has from the current products and experience in the industry.
The user-management stuff, though... that could all be done first, because there's little different here from any typical e-commerce really. Maybe this is why Magento was mentioned? (and, ew) Maybe instead of this project consisting of two phases... maybe it will really be two separate parts. One does the commerce. The other does the UI/learning/human junk. Besides sharing data and maybe a colour scheme, I'm not sure these two have to be the same system at all.
It would be really cool if someone from a large e-learning company could pipe up in this thread... like, say, someone from Learnable (hint hint)? Lydia? Udemy? They've all had similar obstacles and are in the same general area of work.
markbrown4 — 2012-11-30T17:42:36-05:00 — #19
molona and oddz have some very good advice here.
What you are proposing to build is a complex web application and it needs to be viewed as such, and not something that can be hacked together quickly by any developer for a few thousand dollars.
I guess what I'm proposing is that I be the designer. I have a degree in Computer Science, so I understand the concepts, but I haven't programmed in years.
This raises alarm bells for me, I've never seen it work well when the client gets heavily involved in the technical aspects.
You are the client and need to make the best decisions for the business:
- Make the right decisions about who to trust to build your application
- Make sure they're delivering business value
- Make sure they build the right features
If this doesn't sound like something you want to do then you may need to pick up the tools again and build the thing yourself, trust me though it's more complicated and will take more time than you are giving credit. If you don't want to spend 30k or more then building it by yourself might be the only option.
Should I use Linux/PHP or Windows/.NET?..Or Java, Python/Django, Ruby/Rails etc..
I've started judging technology stacks based on their products produced, open-source contributions and time to ship. Honestly, it doesn't matter what tech, as long as it's a good team.
What matters is that you have a knowledgeable team that can turn around a product quickly and there's no hidden gotchas like licensing fees for software and specific hardware requirements. An application like this will always be better if it's built by a highly skilled small team as opposed to a single person. You want a small team of three people that can release features and build the app incrementally. This allows you to see what is being built and guide new features being built without getting in the way. It lets you see how fast things take to build and you can make decisions based on that.
I would highly recommend you read through this book at least three times.
serenarules — 2012-11-30T20:23:30-05:00 — #20
I second both of these statements, based on my own experience working both as a solo contractor and as part of several firms.