Knowledge at work in software development: a cognitive approach for sharing knowledge and create decision support in life cycle selection