Professional Software Development, Practices and Ethics
This is the slides of my talk in Marmara University Faculty of Engineering to undergraduate students. It is mainly about professionalism in software development, agile, scrum, test driven development, practices and ethics
Expert Software Engineer, Technical Coordinator Lead DEVELOper, Scrum Master Senior Software Engineer https://twitter.com/#!/lemiorhan http://www.linkedin.com/in/lemiorhan B.Sc. Marmara University, CSE, 1997 – 2002 M.Sc. Marmara University, CSE, 2002 – 2005 Lemİ Orhan Ergİn @ GittiGidiyor, eBay @ SONY EUROPE @ Bilgisayarla yönetim ve mühendislik @ Marmara University, Faculty of engineering Software Engineer
AUTHORS EXPERIENCE • Developing software since 2002 • Technical lead on development teams since 2005 • Certified Scrum Master since 2009 (trained by Jim Coplien) • Played scrum master role for more than 1 year • Participated Scrum teams for more than 50 sprints
PROJECTS ARE FAILING! SATISH GROUP INVESTIGATES If building engineers built buildings with the same care as software engineers build systems, the first woodpecker to come along would be the end of civilization as we know it. “Top 10 Reasons Why Systems Projects Fail” Dr. Paul Dorsey
The basic problem is LOW QUALITY SOFTWARE WHAT'S THE PROBLEM WITH SOFTWARE? • Lack of User Involvement • Lack of Transparency • Long or Unrealistic Time Scales • Poor or No Requirements • Bad Scope Management • Poor Development Quality • Poor Testing & Quality Assurance • Inaduequate Development Methodology • Poor Technical Knowledge and Experience 7th November 1940. Tacoma Narrows suspension bridge, in Puget Sound, Washington, USA http://www.answers.com/topic/galloping-gertie-large-image#ixzz1q2uRmnLK
CIA Gives the Soviets Gas COST: Millions of dollars Significant damage to Soviet economy (1982) Control software produced intense pressure in the Trans-Siberian gas pipeline Resulted in the largest man-made non-nuclear explosion in Earth’s history CIA operatives allegedly planted a bug in a Canadian computer system purchased by the Soviets The CIA sabotaged the software so that it would pass Soviet inspection but fail in operation
World War III… Almost (1983) Cost • Almost all of humanity Disaster • Soviet early warning system indicated the U.S. had launched 5 ICBMs • The human operator thankfully interpreted this as an error Cause • A bug in the software failed to filter out false missile detections caused by sunlight reflecting off cloud-tops
Wall Street Crash (1987) Cost $500,000,000,000 in one day Disaster “Black Monday”, October 19, 1987 Dow Jones lost 22.6% of its value S&P 500 dropped 20.4% Cause Trading programs generated a flood of sell orders, overwhelming the market Systems crashed and left investors effectively blind
Mars Polar Lander… err, Crasher (1998) Cost : $125,000,000 Disaster : After a 286-day journey from Earth, the Mars Climate Orbiter fell too far into Mars’s atmosphere, causing it to crash Cause : The software that controlled the Orbiter thrusters used imperial units (pounds of force), rather than metric units (Newtons) as specified by NASA
Sony lost 70 million user's details (2011) Cost : Reputation & Approx. 3.2 billion of dollars LOST, Re-branding PSN to SEN Disaster: PlayStation Network hacked and 70 million credentials, billing and user information may have been stolen Hacked TWICE! in a row Cause: External intrusion by a security breach
"The worst outcome is not failure — it’s mediocrity. Failure lets you move on, mediocrity stalls you and keeps you from reaching your potential. Pursue something so important that even if you fail, the world is better off with you having tried." Drew Houston (founder/CEO of Dropbox)
Features of a Waterfall Model Easy to follow For any size project Every stage has to be done separately at the right time so you cannot jump stages. Documentation is produced at every stage allowing people to understand what has been done. Testing is done at every stage.
Realities of Waterfall Model If requirements may change, the Waterfall model cannot work. It is impossible to make one stage of the projects life cycle perfect. Difficult to estimate time and cost for each stage of the development process. Constant testing of the design is needed.
Original Paper of Waterfall Model MANAGING THE DEVELOPMENT OF LARGE SOFTWARE SYSTEMS Dr. Winston W. Royce, 1970 The implementation is risky and invites failure
The Agile Paradigm emraces change, unpredictability and unforseen complexity as inescapable constants in all product development Traditional Customer knows what he wants Engineer knows how to build it Nothing changes along the way Agile Customer discovers what he wants Engineer discovers how to build it Things change along the way
The Agile Manifesto www.agilemanifesto.org Individuals and interactions PROCESS AND TOOLS WORKING SOFTWARE COMPREHENSIVE DOCUMENTATION CUSTOMER COLLABORATION CONTRACT NEGOTIATION RESPONDING TO CHANGE FOLLOWING A PLAN OVER OVER OVER OVER
Agile Principles - I • Our highest priority is to satisfy the customer through early and continuous delivery of valuable software • Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. • Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. • Business people and developers must work together daily throughout the project. • Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. • The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Agile Principles - II • Working software is the primary measure of progress. • Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. • Continuous attention to technical excellence and good design enhances agility. • Simplicity -the art of maximizing the amount of work not done- is essential. • The best architectures, requirements, and designs emerge from self-organizing teams. • At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
The Agile Practices Family • Extreme Programming (XP) • Crystal • Dynamic Systems Development Method (DSDM) • Test Driven Development (TDD) • Feature Driven Development (FDD) • Essential Unified Process • Scrum • Kanban • Lean
Time-boxed Activities Task are broken down into small increments (2-4 weeks), in which the team works through a full development lifecycle Minimizes the overall project risk Planning is easier with frequent release Allows project to adapt to changes quickly
People ınvolved are People ınvolved are replaceable resources replaceable resources Agile Teams are small (7 ± 2) Agile Teams are small (7 ± 2) EMPOWERED EMPOWERED Cross-functional & Self-Organizing Cross-functional & Self-Organizing
Agile Software Development Agile is an iterative and adaptive approach to software development, performed in a highly collaborative manner by self-organizing teams, with just enough ceremony that produces high quality software in a cost effective and timely manner, which meets the changing needs of its stakeholders.
If you want to move your project forward, the only reliable way to do that is to cultivate a deep sense of software craftsmanship and professionalism around it. Control is ultimately illusory ON Software development projects People who show up every day eager to improve their craft will ultimately succeed TOM DEMARKO
IT is an DISCIPLINE in software development that emphasizes the coding skills of the software developers themselves. It is a response by software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over code quality. Software Craftsmanship
Software craftsmanshıp Manifesto manıfesto.softwarecraftsmanshıp.org Individuals and interactions Community of professıonals WORKING SOFTWARE WELL crafted software CUSTOMER COLLABORATION Productıve partnershıp RESPONDING TO CHANGE Stadıly addıng value OVER OVER OVER OVER PROCESS AND TOOLS COMPREHENSIVE DOCUMENTATION CONTRACT NEGOTIATION FOLLOWING A PLAN OVER OVER OVER OVER
Agile Coach at Google where he is responsible for coaching Googlers to maintain the high level of automated testing culture http://misko.hevery.com/ “The secret of testing is writing testable code” Miško Hevery
ACM Code of Ethics and Professional Conduct http://www.acm.org/constitution/code.html Bitish Computer Society Code of Conduct http://www1.bcs.org.uk/DocsRepository/03200/3224/default.htm IEEE-CS/ACM Software Engineering Code of Ethics And Professional Practice http://www.computer.org/tab/seprof/code.htm Versıons of Code of ethıcs
Joint IEEE-CS/ACM Code of Ethics and Professional Practice • Built on 8 principles Public Interest Client and Employer Product Judgement Management Profession Colleagues Self • The principle of Public Interest is central to the code.
Public Interest Software engineers shall act consistently with the public interest. Approve software only if they have a well-founded belief that it is safe, meets standards, passes tests and does not diminsh quality of life, privacy or harm the environment. Disclose any actual or potential danger to the user. Be fair and avoid deception in all statements concerning software.
Software engineers shall act in a manner that is in the best interests of their client and employer, consistent with the public interest. Be honest about any limitation of their experience and education. Keep private any confidential information consistent with the public interest and the law. Not knowingly use software that is obtained or retained either illegally or unethically. Client and employer
Software engineers shall ensure that their products and related modifications meet the highest professional standards possible. Strive for high quality, acceptable cost, and a reasonable schedule, ensuring significant tradeoffs are clear. Ensure adequate testing, debugging, and review of software and related documents on which they work. Treat all forms of software maintenance with the same professionalism as new development. product
Software engineers shall maintain integrity and independence in their professional judgment. Not engage in deceptive financial practices. Disclose to all concerned parties those conflicts of interest that cannot reasonably be avoided or escaped. judgement
Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance. Ensure that software engineers are informed of standards before being held to them. Offer fair and just remuneration. Not punish anyone for expressing ethical concerns about a project. management
Software engineers shall advance the integrity and reputation of the profession consistent with the public interest. Promote public knowledge of software engineering. Be accurate in stating the characteristics of software on which they work. Take responsibility for detecting, correcting, and reporting errors in software and associated documents on which they work. professıon
Software engineers shall be fair to and supportive of their colleagues. Credit fully the work of others and refrain from taking undue credit. Give a fair hearing to the opinions, concerns, or complaints of a colleague. In situations outside of their own areas of competence, call upon the opinions of other professionals who have competence in that area. colleagues
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession. Further their knowledge Improve their ability to create safe, reliable, and useful quality software Improve their ability to produce accurate, informative, and well-written documentation. self
Ethıcs In Software development BE THRUSTable, Open & honest don't blame others don't try to be software god share your knowledge Use the fırst rule of cooperatıon: help others fırst! Learn and obey copyright lıcenses (GLP, CC, MPL, etc.) resolve patent conflıcts Be careful on copy & paste Do not steal code Reference to the orıgınal author do not change references to the orıginal author
Ethıcs In Software development Do not use cracked software Do not snıff network to catch credentıals Do not sell commercial code without permission Do not write backdoors or bugs on purpose Always encrypt passwords and credıt card data Do not sell or share users' data Report any bugs, any issues noticed Do not close a task until it is really done