As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
This is not a programming question per se, but here it goes. I am a senior CS undergrad, and I started an internship this summer for a mid-sized software company. I've done a few freelancing jobs before, but it's the first time I've been officially (more or less) employed as a software developer.
I've been asked to code an internal website from scratch to be used by separate teams in the company, and I've been given a lot of flexibility in designing it. And therein lies the problem: we've had several meetings and design reviews and everyone seems to have an idea on a new feature, and even conflicting ideas on how things should work.
So far my initial prototype has survived all of this, which is something I was told not to expect - but I knew I had a solid design. While I am not behind schedule, the work is progressing significantly slower than I had predicted. A lot of this has to do with loose specs and constant features requests and changes.
I am to deploy an alpha in a couple of weeks, which I thought wouldn't be a problem, but the way things are going I am not sure how that's going to work out.
Does anyone have any ideas?
Thanks in advance
You are asking a timeless question about (software) project management. There are careers made writing books on the subject.
I agree generally with rockinthesixstring on this.
If you don't have an effective project manager who can filter the customters' requests and manage their expectations, and say "no", then that will have to be part of your job.
Sometimes there is an art to not saying "no". Sometimes you can say it more like "As you see in the schedule, version 1.1 is going alpha next week. The feature list for version 1.2 is already set. I'll add your new feature to the top of the list for 1.3. But if you like, I can call a meeting with the other teams to see if we can reprioritize the 1.2 features."
As to conflicting ideas, if there is no other "decider", than that becomes part of your job as well.
Understand that not everyone will get their way.
Without an approach that addresses these sorts of issues you simply won't succeed by any measure.
I'd start by locking into the features that have been agreed upon and place all feature requests into some sort of project planning software (OnTime Perhaps). Then roll out the Alpha release with the agreed upon specs before moving onto the "we'd like" and the "bells and whistles".
You need to prioritize and triage feature requests, possibly even some of the ones you have already agreed too.
It sounds like product ownership is not clear (as can be expected with internal projects with multiple teams). You should probably run some form of planning game. If you have multiple stakeholders, you might give them each 50 points to vote on all the features in an iteration.
You, as developer, decide how large each feature is. The features with most points/size get into the iteration. If some teams are more important, give them more points. You should also spend some points yourself.
I would like to express my approval of James McLeod's post. The only justification anybody needs for wanting a feature is "user x might try to...". The difficulty is resolving contradictions between their opinions and somebody else's. The feature with a higher 'priority' as assigned by your project management process is the one that gets implemented, at the expense of its competitors if necessary. Ask the people suggesting features to go away and put something down on paper explaining the reasoning behind the feature and the circumstances they think might preclude its inclusion. Letting everybody else see what limitations they think their approach has could help break a decision deadlock. The feature whose case is stated more thoroughly 'wins'.
Related
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
We are starting to use Kanban and my boss just asked me a question, as one of two people with prior Kanban experience within the group, that I don't really know how to answer.
My previous experience and training with Kanban had developers pulling stories in from the backlog by priority, in our case that was the topmost card. However, my boss would like certain stories to go to the developers that have domain knowledge for particular areas. For example, let's say Joe has the most experience in working with Contracts and a contract story comes onto the board. He would like Joe to be the one to work on that particular story.
This, to me, feels a little "off" and could lead to some developers having significant extra work due to having worked in any given area of functionality. My previous experience with Kanban worked under the assumption that any developer should be able to pick up the next card and figure out what to do and that this practice would eventually eliminate any single functionality area experts and level out developer expertise over time. However, I can also see how using subject matter experts can help move a story through the process faster.
What is the most "Kanban" way of handling priority vs. expertise when it comes to pulling in the next story?
Every system I've ever worked with allows a little bit of developer-level of prioritization. If the next card has the absolute (top-down driven) priority, then you have to pick that card. Mostly, though, I tend to work in places where "these next 6 cards are up, pick the one you like". This gives the developer a little bit of room for type of work he or she prefers. Plus, it gives the developers a greater sense of ownership since they did get to pick (to some extent) the work they were doing.
Regarding your example, it's a little off base. In an ideal world any developer should be able to pick up any card. In reality, this isn't always true. If I give this project to Jim, it might take 2 days. If I give it to not-Jim, it make take all week. This is a sign! What information sharing is missing? How do you get the other developers to understand the Contracts component as well as Jim?
If the priority is a little bit gray, this stuff tends to work itself out. All the other developers know that Jim can handle the Contracts stuff. However, if Jim has no capacity, then someone else must take up the challenge. Kanban is supposed to alert you to blocked stories.
Kanban is great for visualizing work flow, limiting WIP, and exposing bottle necks.
Henrik Kniberg has a great book, 'Lean from the Trenches'. He talks through many techniques he has used in real world examples. He described one approach to having avatars (that represent developers) that can be placed over task to show who is working on what.
One idea for your situation, would be to use this avatar approach to pre-assigning who should work on a task in the buffer leading into development.
If those pre-assigned tasks are not causing bottlenecks and flow is natural, everything is good. If they are causing bottlenecks early in your flow, you have a problem, but now you have an easy way to visualize and see that it is the pre-assigning that is causing your bottle neck!
A Kanban system shall display the real process. If the manager is assigning stories to developer then the system should reflect that. This can be done in several ways, you could have a specific item for developer X or you can write the developers name on the card. Another option is to have one swim-lane for each developer.
However, all of this is probably not good from a "global" perspective. You should share your Kanban data with your boss. What are your lead-times, what is your throughput etc? Then you should invite the boss to the process improvment meeting. How are we going to improve our figures? Hopefully he sees that Joe probably will be a bottleneck if he is assigning tasks directly to him. Teach him Littles Law, teach him about bottlenecks and Lean in general.
Don't forget to make your policies explicit, that is, it should be written on the wall how your prioritzation policy looks like. Good luck!
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
What kind of software development (projects) can kanban be used for and what are the requirements to implement it? I was reading a lot about kanban and how great it is. But now i have to write a paper about it that focuses of the requirements for kanban, and especially for what kind of projects kanban doesen't fit. I couldn't figure it out yet.
KarlM gave a good overview.
I think Kanban can be used in any project, because it takes your existing process and visualizes it, introduces WIP (multitasking) limits, and uses pull to maximize flow and minimize lead time. My team recently migrated to Scrum and it's been a very smooth transition so far.
Kanban is especially good for situations in which a standard iteration doesn't make sense.
For example, you might not have frequent releases. Maybe you want to decouple one or more of your planning, demo, retrospective, or release schedules.
Good examples:
Maintenance project. Even though you might want to have 2-week (or whatever) meetings to discuss priority, retrospectives, etc., you're probably not going to demo or release every 2 weeks, and it's not likely you'll be able to commit to everything in the next 2 weeks anyway. Situations like this are so dynamic that the priorities shift every day, as new feedback comes from customers. Scrum or other iterative processes don't make sense in this case.
There is a real need for stories that are longer than your iteration length. Kanban, like Scrum, thrives with small stories (better flow, slack, etc.), BUT, unlike Scrum, it DOES at least allow large stories if really necessary.
Extremely fast-paced development. Continuous deployment. Iterations no longer make sense, because maybe you're responding to change lighting-quick, and maybe releasing multiple times a day!
See code.flickr.com:
Flickr was last deployed 4 hours ago, including 8 changes by 2 people.
In the last week there were 85 deploys of 588 changes by 19 people.
Do you think Flickr is doing 2-week iterations, or even 1-day iterations? I doubt it. Looks like they're in super-speed dynamic flow mode... Maybe Kanban, but definitely looks like they're in the Lean umbrella. (Kanban falls under the umbrella of Lean thinking, and continuous deployment was made popular by last year's book by Eric Ries, "The Lean Startup".)
It might not fit in the following environments:
Organizational culture can't get away from up-front planning, overwork/commitment, push instead of pull, fixing all of schedule, scope, and cost, etc. Kanban will start to provoke continuous improvement in an organization, and many are simply opposed to anything but the traditional overengineering, overdocumented, siloed, non-Lean, non-Agile approach that they know and love, which is waterfall. Some government contracts might also fall under this category, although I believe at least DoD is trying to advance Agile in its projects now. But some companies, if you tell them they need to do LESS (i.e., limit work in progress, have a clearer vision, get less stuff done faster, but therefore more stuff done overall), will have a heart attack. Many (most?) companies are addicted to overwork, and think SLACK (which is a fundamental Lean principle) is a 4-letter word. Unfortunately, queuing theory and theory of constraints is hard to get through some people's heads. :) So Kanban might not fit in those kinds of places. ;)
The requirements are, that everyone on the project agrees to use the principles and practices:
Principles
1. Start with what you do now
2. Agree to pursue incremental, evolutionary change
3. Initially, respect current processes, roles, responsibilities and job titles
4. Encourage acts of leaderships at all levels
Practices
1. Visualise what you do / knowledge discovery
2. Limit work in progress
3. Measure and manage flow
4. Make policies explicit
5. Develop feedback mechanisms
6. Improve collaboratively using models and the scientific method
If they don't agree to do that, they can't use kanban. Pretty clear.
Kanban is a tool for visualizing and improving existing processes. If there's a scenario in which it won't work, that scenario would probably have one or both of two properties.
1) There is no existing process or the existing process is such a disaster that it is not working at all and/or is constantly changing in a chaotic manner.
2) There is no will or opportunity to improve.
Lacking the second is not a deal-breaker. Kanban could still help with communication and coordination, and increasing clarity might lead to an increased desire to improve or help establish trust necessary to empower improvement experiments. That would be an example of a low-maturity Kanban implementation leading to a higher level of team maturity.
Kanban is a simple process tool. Applied well, it is good for any project, not just software - any.
In my opinion Kanban can be implement in any kind of organization and in any industry.
But...
the team must be ready for a change
the change must has an evolutionary character
the organization must be focused on cooperation instead of performing routine work.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
Note: I have seen this and tried to take as much from it as possible; but I believe my context is different.
I am working on a small-ish project. Call it Foobar. I'm wanting to get this done more organised..I've tried a few projects, mostly as an unorganised programming-as-a-light-hobby student. I'm trying to get more organised; 90% of those projects went after I either failed to document at all, or because I lost them.
As such, I've been thinking about getting version control/hosting going. Not only will it organise me more, but (a big if here) if it gets anywhere into a usable state, it will be easier for people to get.
The two places I'm considering are Google Code and GitHub. From the question I linked:
Google Code:
As with any Google page, the complexity is almost non-existent
Everyone (or almost everyone) has a Google account, which is nice if
people want to report problems using the issues system
GitHub:
May (or may not) be a little more complex (not a problem for me though) than Google's pages but...
...has a much prettier interface than Google's service
It needs people to be registered on GitHub to post about issues
I like the fact that with Git, you have your own revisions locally
From this I'm leaning towards GitHub, as Google Code doesn't look appealing to me.
For a small hobby project - basically making community features irrelevant - are there features that should take me over to one side or the other?
I prefer Google Code since it's just easier for my small personal projects. At the end of the day, for free projects, it's hard to steal time from family, friends or other commitments and the key to making small free projects a success is being realistic with your time. (Elsewise, you get the "80% done" problem.)
Google Code now has GIT support.
Biggest advantage of Google Code is that you don't need a website.
- The frontpage of the project is enough.
- You can add simple binary downloads in the Downloads section.
- In comparison, GITHUB's interface is REALLY confusing to non-programmers. Your frontpage is full of technobabble and so unless it's a coder's tool, you'll need a separate website.
- Marketing's really good- You get a good rank on Google and often you'll be picked up and sometimes reviewed by other download sites. There's no sense donating your time if no one can find your project.
If it is entirely a coder's tool (not just a handy IT tool), then perhaps GITHUB is better.
You say "I believe my context is different", but don't give any reasons why it is. As such, I can't offer you any specific suggestions other than the generic pros and cons, which are outlined in various documents and tutorials online.
My suggestion: pick a program first (git, Mercurial, or SVN) and use it. Find a hosting site that supports the software (at the time of this answer, GitHub for git, BitBucket or Google Code for Mercurial, Google Code for SVN) and use it. If you run into problems, switch to another one.
I've used all three, and typically the problem isn't the hosting, but the fact that you need to learn the program itself. All of the hosting providers listed here will suit you fine until you have a specific reason why it doesn't.
I would go with Github. The single reason for this is, that Google code shows your email and your full name (name only if you have google+ i think). And you cannot disable this at the moment.
Let's split the problem into two parts: for developers and for users.
In fact, if just terminal users are considered, both google code and gitbud has friendly interfaces, and as we all know, google is more well-known towards those who do not program.
But when we turn to programmers, git is more fashion and more comfortable(question?).
So, personally I will choose google code if I am planning an terminal user oriented product and github of course if I want to involve lots of potential collaborators of I was developing an complete programmers' product, like a API something.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm thinking about adding some kind of copy protection to one of my tools.
Do you have any experience with that?
Have you developed your own protection techniques or did you buy 3rd party software?
Do you think it is a viable method to increase sales? (In a private and/or corporate environment)
What do you do to prevent hassling your paying customers? In most cases it's the paying customers who suffer from a bad copy protection, and I don't want this to happen to my customers. (Even if that means accepting some freeloaders)
I'm especially interested in techniques which allow a trial or freeware version of your software for private use but limit the usefulness in a corporate environment.
Related Question: How do you protect your software from illegal distribution
Related Question: Protect .NET code from reverse engineering.
Related Question: Prevent the circumvention of copy protection.
Whatever technique you use, your software will be copied. The actual aim of copy protection is to prevent honest customers from being tempted to be unfair.
The minimum copy protection technique is enough. The maximum is not worth the time spent.
Moreover, I've heard that some developers provide user support to any user who asks, customer or not. The idea is that happy users may become faithful customers.
On desktop apps I've been using a Clarion Template (3rdParty, http://www.capesoft.com/accessories/secwinsp.htm).
With web apps, pretty much just been using the simple fact that the User has to log in, and tracking the activity. If they have an account, it means they've paid.
Desktop is a lot harder to track. As has been said, very easy to crack. Very much a case of:
Make it annoying for the Hackers, but as unobtrusive as possible for the Users
"The hardware is the dongle"
That was what we always said at my old job, and to some extent, it's also true at my present one. Basically, we sold physical hardware to run our software, which we gave away for free. This probably isn't feasible for all businesses, but it's a nice feeling to know you don't have to worry about piracy, because people are invested in the hardware, not the software.
As mouviciel mentioned, nothing is perfect. Aim to gently encourage users who might buy your product to buy it, and forget about the people who never will.
Some general tips:
Don't bother implementing your own protection, unless you have experience doing so. This is an area where paying someone who's specialty is providing some type of licensing/protection is probably worthwhile (just keep in mind it won't be perfect).
Choose a license key system that is difficult to keygen. Again, picking a pre-built licensing system will likely suffice. Creating your own from scratch will likely not.
Take the time to properly integrate whatever licensing system you choose. If you just "protect/wrap" your executable(s), the protection will quickly be removed. Most licensing/protection products offer easy integration tools/macros that make automated cracking much more difficult.
For corporate software, the best thing you can do is make it easy for administrators to ensure they are within the license boundaries (# of instances/installs, etc.). Provide a central place for them to verify this, and gently remind them if they go slightly over, before you take any more drastic actions. In a large network environment, software licensing can get very complex for the IT dept. Make their job easier and they'll thank you.
"The technical support is the dongle"
This doesn't apply to all applications, but for complex applications with higher price and lower sell volume, providing excellent support to your customers is the best way to be sure all your users are paying.
I know this post was submitted quite some time ago, but everyone always seems so negative when this subject is discussed. For obvious reasons I prefer not to say where I work but we use CodeMeter by Wibu-Systems US. We chose this as hackers didn't manage to hack this during a hacker competition.
Regarding all the questions you ask, it is really flexible and they offer a free SDK, which is how we tested before we purchased.
For some products we (have to) use hardware dongles. Although they give a prety good copy protection, they are a real hassle for our customers.
All other software is protected by a software key. And yes you can copy those. But we have very good experience that customers don't do that.
Without a key a program works normal, only you can't calculate the model and some print functions are disabled.
You do need to employ copy-protection for your software, but as others have said, make it as hassle-free as possible for your customers. Your aim should be to keep honest customers honest, and not make them go through hoops before they can finally use your software.
I would also advice against spending your time on coming up with your own licensing scheme, instead spend that time focusing on your actual product.
Consider using CryptoLicensing - it provides licensing, copy-protection, activations, machine-locking, trials, and other features.
DISCLAIMER: I work for LogicNP Software, the developer of CryptoLicensing.
Good software doesn't need a protection. Your software will ever be copied, no mather what protection you choose.
So the best way to avoid illegal copies would be to make your software user-friendly, so that your customers are happy and satisfied with your product.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I currently maintain 3 websites all revolving around the same concept. 2 of them are WinForms applications where the website gives a few basic details, and download links. The third is a web application to query data. I also have a forum (SMF/TinyPortal) that has been serving as a tech support/news hub for the three sites. The download traffic is decent, but I don't get a lot of hits on the support forums
I want to consolidate these three entities so that I don't have to duplicate announcements, upload data library updates to multiple locations, and also provide a unified look to the sites.
Fortunately my hosting account has both .NET and PHP support, so I've been looking into Drupal, Graffiti, DotNetNuke, Joomla, Community Server, and more. However, it has been hard for me to discern between what features included, supported, or just not part of the framework whatsoever.
Does anybody have a good evaluation of these projects (and others too) and can evaluate them for features/expandability/customization/etc.? I'm not necessarily looking for a "what's your favorite" but more of a feature set / target end user type evaluation.
If you want to quickly compare features on CMS's, then take a look at CMS Matrix - has practically every cms known to man on there.
Edit
To be a little more precise, from the site
CMSMatrix is the number one content management system comparison site on the Internet. It allows users to evaluate over 950 content management systems in 135+ different categories.
Go with N2 if you want to get up and running in no time with a couple of nice features packed. Also, it is really targetted against extensibility and clean code.
http://www.n2cms.com
"Open Source cms" has tons of them, and running demos with admin logins
DotNetNuke:
very flexible
lots of community around it
community tends to be fairly technical and can be hard to find useful end-user support
can be difficult to upgrade and to keep current versions available
fairly easy to program basic modules for
100s of available modules (free and pay)
documentation can be difficult to find and sparse in detail
easy to skin so your sites can have a unified look
1000s of pre made skins available.
hopefully this is along the lines of what you are looking for.
I've found that CMS Matrix (refer:iAn) can sometimes be a bit out of date but it is definitely a good starting place. Open Source CMS is a good resource (refer:mrinject). I'd lean towards something you can tinker with - closed source could back you into a corner.
If you're looking into .NET then MojoPortal is another option, as is umbracco etc. Search here on DNN and these others. I've found Drupal to be be more intimidating to approach. Also, it's forums are pretty basic. Joomla tends to want money for add-ins, as does DNN although there are freebies for both. Apparently the freebies fro Joomla can vary in quality - I never looked into it too closely.
I think the pick of the PHP crowd is Drupal - if you can invest the headspace for learning it. Drupal tends to be more developer-friendly than end-user friendly so if you're not a developer it is harder to grasp than something like Joomla. Apparently its codebase is better than Joomla.
Have a browse through the communities - you'll spend some time there so make sure they are to your liking.
If the site is quite simple then perhaps WordPress will suffice as it has a plethora of plugins and there are lots of template available for free or
I've been meandering down this path for a while now. My advice is to set up some test installs and roughly configure them to something that has what you want and then try using and and - important - try to break it. Installing them together on the same server is a good way to test the relative speed differences too.
Test drive them - it's the only way to tell which one works for you.
DotNetNuke out of the box contains a lot of features, content management, link management, documents list modules, forum modules, and items of that nature. There is also a very good third-party module and skin market out there for getting the enhancements needed to really get a full solution implemented.
With a little bit of time DNN can serve as a great foundation for a collection of websites. It also supports a multi-portal system that allows you to host more than one site off of the same code base which is very helpful.
The best part of all is that it is Free!
As you mentioned, there are plenty of options available, most of them have all the basic features. If you are looking for a simple setup, most may even be overkill for what you are trying to achieve. Which CMS you choose, may best depend on your preference for the programming language the CMS is using.
For some websites I maintain, I have used Typo3 (http://www.typo3.com/). The reason for my choice was the flexibility of Typo3, with its many (many!) plugins for all sorts of features, and for the ability to develop plugins yourself.
HTH,
J.
Assuming you're going open source, strong considerations are:
An active and knowledgeable community. <-- You don't want to be the only person able to support this CMS in 10 years time.
regular and simple updating techniques.
Your skill sets.
As a vendor, I find CMS matrix to be daunting. Its basically a list of every CMS under the sun, with a few generic ratings and reviews. Before selecting a CMS, I'd commit to a model first, then I'd investigate the various options that are available.
Open Source...has lots of user generated support, but often requires the assistance of outside developers for software maintenance and add-on installation.
Private installed solutions...can be easier to work with, but lock you in to one vendor for maintenance.
SaaS Model...still locks in to one vendor, but all updates are included and initial costs are minimal.