Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
Good morning everyone,
I hope I'm not posting this in the wrong place; I've been programming web projects, mostly in MVC and ASP.NET for consulting companies, but I always pick-up unfinished projects, so I gotta say, my experience in web development isn't as good as I'd like it to be. To improve my experience, I decided to accept building a project for a veterinarian clinic and I'm going to build the project in MVC.
There are a few things I'd like to know to make my project well structured and to avoid feeling lost in the process because I don't have as much time to research as I'd like to.
So the main questions I'd like to ask are:
When beginning a new project, where
should I begin? Making the
stylesheets? Should I go straight for
the code? If I make some planning,
how should I go about it then?
When building up the Media folder in
my project, if I decide I'll use
jQuery and the like, what files
should I really get? What's the best
way to implement jQuery in a MVC
project without having to mention it
in every page?
To make a sort of planning for
myself, complete with deadlines I
have to respect, what structure
should I use?
Well, I'm not good at designing at
all, and I often have to rely on
other people's CSS to make things
look decent, so how could I use this
project to improve that and still
make it look good?
I hope we can all share some experience in the matter at hand and make this topic help others who might be feeling the same weaknesses as I do.
Try to find a framework that suits your needs. If you want reusability, make sure you learn/understand the concept of the MVC pattern (OOP). I personally work with Zend-Framework which has a very big community.
(However, a good practice is building your own framework. Look at other frameworks and learn about the pro's and cons.)
Every project starts with an UML design: http://en.wikipedia.org/wiki/Unified_Modeling_Language
Don't try to invent the wheel again, for example: learn/play with the 960 css grid http://960.gs, jQuery and different database-types.
Documentate everything!
Test everything http://simpletest.org
use subversion for easy access of previous versions of your project http://subversion.net
book tip: http://www.amazon.com/Communicating-Design-Developing-Documentation-Planning/dp/0321392353
When you start building your code I suggest you start with register, login and authentication. After that: Internationalization and localization (see: http://en.wikipedia.org/wiki/Internationalization_and_localization)
Then create your CRUD's and so on..
EDIT:
Some other resources you might wanna have a look at:
Requirements gathering
Planning
Object-oriented design and Design Patterns
Configuration management
Programming (or Coding)
Web design and Usability
Documentation
Software testing
Web application security
Good luck!!
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
A number of the sites I've recently inherited are in various versions of FW-1 (a "light weight" Model-View-Controller framework for ColdFusion.) I have a functional grasp of it as it is in place, but I'm not seeing the advantages of using it in future development yet.
If you would, please briefly share with me specific experiences in which and how using MVC patterns or frameworks in a database driven web-development environment accelerated the development over what would have been possible in a more linear component function system.
If for moderation purposes only a technical question that can be "answered" is satisfactory, then it is "How does use of MVC patterns or MVC frameworks realistically or in practice accelerate development? (Examples appreciated.)"
I do use FW/1 for almost everything. The balance is done in ancient Fusebox which in some ways like FW/1. For me it has to do with
Encouragement of division of code
After you start doing MVC on any platform, code starts to just naturally divide itself. It is a model, controller, or view? Is this model transient or not? Should the model have a routing pattern? Is this really a view or a layout or a part of a nested layout?
Self documentation
I had over my code to another developer, they instantly know what kind of a thing they are dealing with. It is in certain directory, it has to be a certain kind of thing
Expanded lifecycle
application.cfc has its lifecycle. FW/1 expands it enormously. There are all kinds of places that certain types of code is just supposed to go.
Consistent URLs
The routing patterns defines what kinds of requests will work and which won't. It self-documents the app.
Last but not least
If you don't like all these features, great. Then just tap into the ones you do like. You can ramp up as desired.
I never heard about FW-1, so my answer won't be related with this particular framework. I have experience of CF9 and Railo with ColdBox and Lucee with CFWheels.
All the merits of MVC I found during my work in CFML (I don't want to provide you general answer related with other frameworks I know - Ruby on Rails or Django):
Models are related only with DB staff. Maybe it's funny, but that's how it supposed to be. Sometimes is not. I've seen a lot of legacy code, which meant to be models, but was everything in one place. If business logic in models is isolated from the rest it's easier to test it and maintain it. Also- separated models allows you to use ORM.
Controllers are way much thinner. If you need type less code to do the same job, you'll do it faster.
Templates are only to display what we need, but they don't contain any business logic inside. Keeping it in that manner allows my company to hire front-end engineers, which works on CSS, JS etc. and if they touch CF code, they touch ONLY templates. It would be very difficult for them to deal with all i one applications.
Also I found myself more productive when I know where's find a method which I want to use or simply fixing the bug. If you apply MVC, you can narrow easily possible area of damage when things go wrong and believe- they will.
TL; DR:
MVC makes your development faster, more robust and allows you to split work for different types of developers.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
We are currently starting a bigger project. What're your suggestions for best practices of workflow?
We are planning to rebuild from scratch (the existing product is outdated by years, regarding visual and internal design and programming). While the product functions (a Rails based web project) are already set, the question is: What is your workflow from here on? The most interesting part is: How and when do you do your screen design?
We are planning to do it in the following order:
"Pencil and paper" screen design: Just layout what the screens should look like and visualize the functions and visitor pathes
Hand out the layouts from point 1 to the designers, have a talk to them, and let them work in parallel to programming on the designs
First implementation, simple color-less HTML layout based on point 1 (automated tests, functionality, BDD, TDD)
Integrate the designs with the product prototype
Work out the rough edges together with the designer team to finalize the product
Release a beta product for the customer to test
Do you have similar workflows? Are there suggestions for improvements? But the most important for me: How exactly do you do point 1?
While this is not exactly programming-related I still think this should belong on StackOverflow as this is important for anyone doing bigger projects. From the past we know that good screen design is always a critical and hard point if trying to do that while programming, and even harder to deploy it after the prototype application has been created.
Update: I found Balsamiq Mockups to be a very helpful tool to do the mockups. Still there's an open question how one would best visualize visitor pathes.
Update: We had been successful using Balsamiq Mockups to create a design pleasant to the customer and we managed to successfully integrate this into the existing web content. The customer is so comfortable with the new ideas that he is planning to redesign the complete web site.
I like your workflow. It should lead to a decent result.
A few ideas here:
Let the designers know and understand your presentation model. What pages there are, what information and control elements will they have, what is the role of each of them, what is the purpose of the page and what message should it communicate to the user. If you let the designers work alone then they will design something to reflect their vision of the project and not your design. You'll end up redoing everything or trying to adapt one part to the other.
Users will only see and understand design. They know nothing of implementation. If they see a button they will think the feature is there. if you plan to go agile while cooperating with the users during development, hide out elements that are not implemented yet. Feed them results one step at a time.
If you can have users nearby do screen design together with them in iterations. There is not much work for designers yet, when you are basically deciding on the layout. All those colourful effects and polished buttons should be done after the layout is stable. Otherwise it will be a waste of the designers work.
I really like the model of extreme programming. When dealing with new products user requirements can quickly change over time and this is a proven method which keeps the design "up to date".
Have the users write up functions that they want for the application. And have the designers agree upon a general layout.
Write up a general wire-frame that both you and the user agree upon, I like to do this in smart draw or some sort of rapid gui development platform. (no functionality at this point).
Write the code for the GUI based upon the wire-frame and write sequence diagrams and class diagrams.
Based upon these design start to fill in the functionality behind the GUI
Release betas throughout the process of adding functionality to select users who can help guide future development
The benefit of this design is that at any point in time you can re-work the GUI and incorporate new functionality. The idea is to have a general plan at the beginning that can be adapted as user requirements change.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
Currently I'm working alone on a small project for University and I wondered: Does it make sense to apply methodologies (XP, Scrum) or parts of it? If only for experience? Or does it produce too much "overhead"? And if it does, which one would fit best?
Methodologies give the approach to tackling a development, to me it would still be applicable if there was one or 100 people on the project. The only difference as you being the sole developer would take on multiple roles within the development.
It's certainly an interesting idea to be able to sprint towards getting a set of goals done in a certain time. It might add some motivation to hitting a deadline, and preventing feature-bloat.
As any skill, project management side of development improves with practice, so I'd say it's worth trying out.
Worth noting that XP and Scrum are development methodologies not project management methodologies.
Development methodologies (such as XP and Scrum) govern areas such as requirements gathering, development techniques, testing and release.
Project management methodologies (such as PRINCE2) cover elements such as scheduling and planning, risk and issue management, project scoping and business case management.
But the accepted answer is right regardless. Unless you're the only person who will ever see the software, input into it, code on it or interact with it in any way at all, methodologies of both sorts will absolutely have something to offer and should be looked at. Even if you are the only person they can still be useful.
Some of this depends on where you intend to go with your work: you're working alone today, but are you planning (or at least hoping) to build something big enough that you will need help? If so, then it is good to get some practices in place upfront - not so much that it will slow you down, but something that you can build on when you create your team.
A colleague of mine, who has left architecting high-volume trading systems to build software for the iPod and iPad, has done some thinking about this now that he is a team of 1. You might find it helpful:
link text
If you are working alone, then pair programming may be a bit of a challenge. :) At the same time, having a story board and moving cards may be useful for others to see if they are connected to your project,e.g. end-users or project managers. My suggestion is to read up on various approaches and if it seems like it may work, do a trial and see how if it makes things better or not.
I have worked on projects by myself and you definitely need to play multiple roles. I'm a better developer now than before I worked on my own, and definitely I can integrate to any development team working with XP and Scrum since I made sure than when I worked by myself I would do the best practices XP and Scrum suggests.
The only thing you couldn't apply is pair programming. Besides that everything is possible playing multiple roles, it will enhance your development for sure.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I'm facing developing a new web app in the future and I'm wondering how to decide what framework to use. I've settled on Python as my language of choice. But there are still may frameworks to choose from! More generally how do you choose between different similar technologies that are still in the works as the latest round of web frameworks are? I'm curious what your process is for deciding on technologies you've never used.
Recognize that no choice is perfect -- or even very good.
No matter what you choose, someone will have a suggestion that -- they claim -- is better.
No matter what you choose, some part of your tech. stack will fail to live up to your expectations.
The most important thing is "shared nothing" so that the components can be replaced.
After that, the next most important thing is automatically-generated features to reduce or prevent programming.
Look at Django. Lots of automatic admin features make life very pleasant.
There are a number of things you can do:
Download the frameworks and build something similar with them for comparison.
Look for comparisons by other people, but attempt to understand the bias of the reviewer.
Observe the community at work, see what people are building and the issues they run into when using the technology. Forums, blogs, mailing list etc are good places to check out.
Go to conferences and meet like minded developers interested.
You can also take the approach of using stable versions rather than alpha bits. After a while you might move closer the bleeding edge. People associated with the project in question are generally more biased than those approaching from other platforms, be careful who you trust.
Consider the impact of using a bleeding edge framework versus an established one. Sometimes it's important to your customers that you are on one perceived as stable. At other times this doesn't matter. How comfortable are you with fixing the framework itself? Great developers will learn the internals, or at least know enough to keep things moving whilst a bug is sent to the framework mailing list etc.
Consider some general best practices in building abstractions and reusable code on the python platform. You may be able to save yourself some work in moving to another platform. However, don't be a reuse junkie as this can limit the effectiveness of your use of the framework. The 37Signals guys are right when they talk about extracting frameworks from working code rather than building frameworks from scratch.
I know this is an old posting, but I am in a similar situation (again) and I think there are other people who may want to look for different opinions, and hear of (somewhat) successful experiences.
Since baudtack mentioned Python, I will try to answer this along the lines of my experiences using Python. Here is what has been working for me:
determine the scope of your project - outlining what your application is supposed to be able to do without introducing any programming or design notes will clarify your goals greatly
determine how you would like to work with your code, stack and data:
a. what sort of programming paradigm do you want to work with? i.e. object-oriented, functional, etc. do you want to play to your programming style or do you want to follow somebody else's programming style?
b. use semantic web or not? do you want greater control over URIs and their design? (I found web.py great for this by the way - It is my choice to create REST APIs in Python)
c. do you want to be trapped by framework requirements, or do you want a better separation of the application from the web component, i.e. use a framework to utilize your application as a set of modules, for example. My problem with Django was that I ended up not programming Python, but having to learn more Django than I needed to. If that works for you, then that is the way to go.
d. data stores... some sort of SQL vs. non RDBMS (xml databases like eXist-db with full xquery support) vs. OODBMS vs. a combination of the above? how complicated do you need this to be? how much control/separation do you need to have over how data gets stored and recalled in your application?
e. testing: unit tests... thank goodness for python! if your web app has the potential to grow (as they often do), having a sane and coherent testing platform to begin with will help out a lot in the future - I wish I had learned about this earlier on. oh well... better late than never.
f. how much control over the server do you need? hosting considerations? how much control over an Apache instance do you need to have? OS specific needs? I found that using shared hosting providers like Webfaction has been great. I eventually found I needed greater needs for flexibility and bandwidth. In other words, what can you get for your budget? If you have USD50 to spend each month, it may be better to consider a virtual hosting solution like Linode....
Finally, I echo S.Lott's sentiments that no choice for a solution is perfect, and are subject to obsolescence.
Experience trumps hearsay. I've found that prototyping is a huge help. Make a prototype that uses the features you expect to be the most important for various frameworks. This helps route out any features that may not work "as advertised."
In general though, kudos for being willing to look at new technologies.
I have a set of criteria in different categories:
Activity & Documentation
Is there an active user base?
Is there an active development base?
Is the support responsive and information accessible?
Are there user and development guides and reference material?
These are essential, there needs to be traceability of all of these to build confidence in the solution.
Ease of use
Are basic features easy and complex features possible? I typically give a new framework a test drive and try to roll out a set of use cases to see how intuitive the framework is to use.
Is installation intuitive and simple for a local/dev installation and production deployment?
How is it backed up and upgraded?
What is the effort and UX for implementing a "Hello World" type blog post, static page, menu item, and plugin?
How are versions dealt with for the core & plugins?
Example (on the topic of Automated Testing/Continuous Integration solutions)
Several years ago I evaluated several Automated Testing solution. At the time Jenkins and TeamCity were front runners and in the end I chose TeamCity because of the UX, active user & development base and quality of accessible documentation.
Example (CMS for a blog)
This criteria is also why I prefer to use Wordpress over other options. While wordpress has its shortcomings, the user and development base is strong and active which leads to a software architecture with more potential to evolve over time and maintain its relevance and a development community that provides quality plugins and themes to choose from.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
We are starting off on a new from scratch implementation of an eCommerce solution and have decided on the framework to use too. There will be people joining the project who never really had any experience working on this framework. How should we go about doing the knowledge management/transfer? What could be the other challenges we need to be prepared for and how?
I can think of starting a WIKI with the most often needed content and addressing the most common roadblocks...Is that a good idea?
A glossary will go a long way.
Make sure that you and your team use the glossary when talking. There's no point having specific words for things if you don't use them correctly.
Stand up meetings each day should help with whatever roadblocks you have.
Make sure that your team has as high bandwidth communication as possible but also allow for quiet time where people can focus. Maybe have the first 15min. of each hour as a time when people can walk up to each other and ask questions etc. Then the other 45min is silent time. Reassess this to get a balance that everyone fits with.
I second the wiki recommendation - we have had a great deal of success using it to form a knowledge base and glossary for our projects.
Another technique that has worked well for us is creating a scratch repository (e.g. SVN, Git, etc.) for the purpose of technology ramp up spikes. We're currently working on an enterprise-scale project leveraging Spring's OSGi support, and we created several spike projects to explore different facets of the technology. This helped us grasp the technology before getting too encumbered by the business needs.
As far as challenges for which to be prepared? Expect the unexpected. Any time you embark on using a new framework/technology, you will run into roadblocks and your initial velocity will suffer. My best advice - simple determination. Don't give up on your framework at the first sign of stormy weather. Work through the issues. Eventually you'll clear most of the hurdles and your velocity will increase exponentially as the entire team gets more comfortable with the technology.
I think this is the ideal situation for a wiki. Let the developers choose which wiki to use, because they're the ones that will be using it!
There is this thread:
http://discuss.joelonsoftware.com/default.asp?biz.5.738060.3
You might consider Alfresco.com's open source solution for content management.
I think the Wiki is a good idea, but there is also no substitute for real code. To that end a good quality (reference) implementation of a single function, which shows all the layers in the code stack, ie from browser/form down to the DB and back again.