====== Buzzword Bingo ====== //In progress from class discussion...// We identified some important buzzwords and then researched them together in class to try to understand some of the terms we repeatedly see when exploring software tools. ===== Full-stack Development ===== Development which involves both front end and back end development, working with PHP, HTML, CSS, JavaScript, etc. Full-stack development combines working with systems infrastructures, manipulating databases, API/back-end code, front-end, and project management (Agile, SCRUM, Kanban) * System admin - Linux, shell scripting * Search - Elasticsearch; * Caching - Varnish * Version Control - Git, Mercurial SVN * Back-end: Apache, PHP, MongoDB, SQL, MySQL * Front-end: HTML, CSS, JavaScript, jQuery, AJAX, XML, WebSocket Resources: * https://www.sitepoint.com/full-stack-developer/ * https://www.quora.com/What-does-the-term-full-stack-programmer-mean * http://www.pearltrees.com/t/company-picks/at-t/id5539108/item50626959 ===== Data-driven development ===== Data driven development is a model where the data controls the behavior, not the program logic. Uses: * modeling * analysis and prediction * data simulations ==== Flux ==== * used by Facebook * application architecture for client side apps PHP is a widely used scripting language used for server side Sources: * https://branch-blog.qlik.com/tools-and-platforms-for-data-driven-development-bb25d9c1e6ae#.oxtbihl5z * https://facebook.github.io/flux/docs/in-depth-overview.html#content ===== DevOps (software DEVelopment and Information Technology OPerationS) ===== A set of practices which encourages increased communication between developers and IT professionals to automate software delivery and infrastructure changes. An attempt to integrate the software development work-space into one cohesive group. image source: Wikipedia (https://upload.wikimedia.org/wikipedia/commons/0/05/Devops-toolchain.svg) * Plan— Define and plan metrics, requirements, release plan, and infrastructure. * Create — Designing, building, coding, and configuring the software development process. * Verify — Test and results determine performance of software release. * Package — Package configuration once the release is ready for deployment. * Release — Coordinate releases, schedule release approvals, release automation. * Configure — Infrastructure configuration, management, and provisioning databases and networks. * Monitor — Applications performance monitoring, end–user experience and response. Tools for DevOps include Jenkins (builds, runs test, push to production), ELK (logs ALL processes and environment happenings) and Github. ===== SRE - site reliability engineering ===== automating manual labor operations typically done by system administrators. Introduces mathematical formula to red/green light a software launch/update. Bridge disputes between dev and ops teams. SRE team sets a service-level agreement (SLA) that defines how reliable the system needs to be to end-users. If the team agrees on a 99.9% SLA, that gives them an error budget of 0.1%. * Focus is on scalability and reliability of systems * Automating operations using algorithms and software solutions * Created by google * similar to Devops * A group of people who oversee new developments/releases and make sure that they won't break anything that is already there * The process creates open communication between the developers and the SRE's that oversee the projects * Unlike operations, SRE's can code and develop software also. If not as many SRE's are needed, they can jump onto the development team =====Monitoring ====== Project managers monitor the progress of a project. Three levels of monitoring include: activity levels (daily progress), status reports (weekly progress) , and milestone analysis (monthly progress). Each of these levels helps keep each member of the team and its leaders aware of the project's progress and current status. If one of the levels reveals an inconsistency or a deviation from the project's end goal, the team leader can use that information to steer their team back in the right direction. "runtime monitoring is supported and encouraged as a fundamental principle. " "Monitors are automatically synthesized from formal specifications and integrated at appropriate places in the program, according to user-configurable attributes. Violations and/or validations of specifications can trigger user-defined code at any points in the program, in particular recovery code, outputting/sending messages, or raising exceptions." https://link.springer.com/chapter/10.1007/978-3-540-30482-1_31 Tools: Microsoft Project ===== Continuous Integration ===== ===== Metrics ===== Refers to the measurement of a particular characteristic of a software program's performance or efficiency. Metrics help estimate the progress, quality and health of a software testing effort. Examples of metrics: number of tests run and passed, number of defects, software development effort estimation (realistic predictions of the effort required to develop or maintain software), assessing performance of a server under heavy load There are three types of metrics: * Process Metrics: measures the process efficiency of the Software Development Life Cycle * Product Metrics: measures the quality of the software product * Project Metrics: measures the efficiency of a project team or any tools being used in the project JMeter: http://jmeter.apache.org/ Source: http://www.guru99.com/software-testing-metrics-complete-tutorial.html ===== A/B Testing ===== ("Split testing")- Used in applied marketing and business intelligence for assessing conversion rate optimization strategies. Executed by delivering unique content to similar user groups to determine the most appropriate conveyance of information. EXP: User group G a is split into pools X and Y. Group X is delivered landing page J, while group Y is delivered landing page K. Exit rates for landing pages J and K are 20% and 50% respectively. The A/B test has shown that landing page J is more effective at retaining users, and therefore should be delivered to users in group G. https://vwo.com/ab-testing/ TOOLS: Adobe Target, Optimizely, Google Analytics, Visual Website Optimizer "Conversion rate" - rate at which visitors to a site convert to "something else" i.e. a subscriber, etc. A/B testing allows for comparison of two From Johanna Goergen: "I'm a software engineer at Optimizely, a startup that does A/B testing and personalization. I'm on the application backend team and am mostly tasked with writing and maintaining the company's REST API. ... We provide a platform for companies to track the success of certain variations of their web/mobile apps through whatever metrics they want, such as conversions, clicks, page views, etc. We also even support full stack testing now so that they can track the effectiveness of certain algorithms vs others deeper in their code base." ===== Canaries ===== A canary test is a push of programming code changes to a small group of end users who are unaware that they are receiving new code. Since the new code is only sent to a small subset of users, a problem in the code will not have a huge impact. Chrome Canary is an example, new code is pushed constantly. Source: http://whatis.techtarget.com/definition/canary-canary-testing ===== Triage ===== Triage is the act of analyzing, understanding, and categorizing a specific set of defects, in preparation for making a repair scheduling decision. For a given set of defects, you need to determine how to act on them and proceed with repairs. The more serious defects, those with the highest priorities, receive action first, usually because of their import or because they are blocking further project activity. Source: http://www.informit.com/articles/article.aspx?p=2123715&seqNum=3 =====Monitoring===== Project managers monitor the progress of a project. Three levels of monitoring include: activity levels, status reports, and milestone analysis. ===== Branch Deploy ===== "Branching is an important tool in your development process, as it offers a very powerful way to let developers work in isolation on different aspects of a software project." "Branches let you easily maintain your “in-progress” work separately from your completed, tested, and stable code." There are two types of branch deployments: manual deployment and automatic deployment. In manual branch deployment, the developer builds a successful build and then manually deploys this build to a testing environment, e.g. a testing server. After thoroughly testing the code, the developer can merge the build back into the master branch. In automatic deployment, the developer can either set a specific time of the day when the build can be deployed into a testing environment, or can configure the VCS (specifically talking about Bamboo here) such that the code is automatically deployed upon completion of a successful build. The developer can then test the build and once it is tested, it can be merged into the master build. "Branch deployments should only ever be triggered into safe testing environments - they should never be triggered into production-like environments." Uses: SVN and GitHub (and other VCS) Sources: * http://guides.beanstalkapp.com/version-control/branching-best-practices.html * https://confluence.atlassian.com/bamboo/deployments-from-branches-407724097.html