The document discusses various types of anti-patterns that can occur in software development, including methodological, coding, object-oriented design, software design, project management, user interface, and organizational anti-patterns. It provides examples of specific anti-patterns like copy-paste programming, magic numbers, big ball of mud architecture, death march projects, and click-here links. The goals are to help recognize these ineffective patterns, understand their root causes like haste and ignorance, and implement better solutions.
This is basically a "lessons learned" talk. While dealing with resilient software design for several years meanwhile, I realized along the way that implementing a specific pattern like timeout detection, circuit breaker, back-pressure, etc. is the smallest of the challenges.
As so often in software development, the actual pitfalls that keep you from being successful with your project - here, creating a robust application - are not to be found in the area of creating code. Based on my experiences, the actual pitfalls are to be found in areas that are at best loosely related to resilient software design.
In this talk, I discuss some of those pitfalls that I have experienced more than once along my way. It starts with not understanding the goals of resilient software design, continues from a lack of understanding the characteristics of distributed system, over missing required feedback loops and deficiencies in functional design, to not understanding the trade-offs of applying resilience patterns, and ends with the problem of our continuous collective insight loss.
The main objective of the talk is to sensitize for the pitfalls. Wherever possible I also added some suggestions how to deal with the topics. Unfortunately, some topics neither have an obvious nor a simple solutions - at least none that I would know about ...
As always the voice track is missing and thus a huge part of the content of the talk. Yet, I hope the slides in themselves are of some use for you and offer some helpful ideas and pointers.
Micro Focus Software Delivery and Testing Jan De Coster Presentation on the Journey to DevOps in the recent Micro Focus #DevDay Copenhagen.
Micro Focus enables enterprise software organizations to build innovative software and accelerate application delivery to meet the needs of the business. Whatever the challenges and infrastructures, our core principle—of reusing what already works to minimize business risk while supporting modern software practices—has positioned our customers to be better prepared to support the digital transformation of the business.
Build, test and deliver innovative software faster with less risk.
April 2017.
Microservices Pattern Language
Microservices Software Architecture Governance, Best Practices and Design Pattern
Decomposition Patterns
Decompose by Business Capability
Decompose by Subdomain
This is basically a "lessons learned" talk. While dealing with resilient software design for several years meanwhile, I realized along the way that implementing a specific pattern like timeout detection, circuit breaker, back-pressure, etc. is the smallest of the challenges.
As so often in software development, the actual pitfalls that keep you from being successful with your project - here, creating a robust application - are not to be found in the area of creating code. Based on my experiences, the actual pitfalls are to be found in areas that are at best loosely related to resilient software design.
In this talk, I discuss some of those pitfalls that I have experienced more than once along my way. It starts with not understanding the goals of resilient software design, continues from a lack of understanding the characteristics of distributed system, over missing required feedback loops and deficiencies in functional design, to not understanding the trade-offs of applying resilience patterns, and ends with the problem of our continuous collective insight loss.
The main objective of the talk is to sensitize for the pitfalls. Wherever possible I also added some suggestions how to deal with the topics. Unfortunately, some topics neither have an obvious nor a simple solutions - at least none that I would know about ...
As always the voice track is missing and thus a huge part of the content of the talk. Yet, I hope the slides in themselves are of some use for you and offer some helpful ideas and pointers.
Micro Focus Software Delivery and Testing Jan De Coster Presentation on the Journey to DevOps in the recent Micro Focus #DevDay Copenhagen.
Micro Focus enables enterprise software organizations to build innovative software and accelerate application delivery to meet the needs of the business. Whatever the challenges and infrastructures, our core principle—of reusing what already works to minimize business risk while supporting modern software practices—has positioned our customers to be better prepared to support the digital transformation of the business.
Build, test and deliver innovative software faster with less risk.
April 2017.
Microservices Pattern Language
Microservices Software Architecture Governance, Best Practices and Design Pattern
Decomposition Patterns
Decompose by Business Capability
Decompose by Subdomain
Introduction to monte-carlo analysis for software development - Troy Magennis...Troy Magennis
Forecasting and managing software development project risks & uncertainty. Monte-carlo analysis is the tool of choice for managing risk in many fields where risk is an inherent part of doing business. This paper examines how to use monte-carlo techniques to understand and leverage risk in Software Development projects and teams.
Designing a complete ci cd pipeline using argo events, workflow and cd productsJulian Mazzitelli
https://www.youtube.com/watch?v=YmIAatr3Who
Presented at Cloud and AI DevFest GDG Montreal on September 27, 2019.
Are you looking to get more flexibility out of your CICD platform? Interested how GitOps fits into the mix? Learn how Argo CD, Workflows, and Events can be combined to craft custom CICD flows. All while staying Kubernetes native, enabling you to leverage existing observability tooling.
Organizations of all sizes using automation and agile methodologies to improve the speed and reliability of their software development initiatives. In this session we will provide an overview and demonstrations of the various ways you can integrate Black Duck Hub with your CI/CD tools to manage open source risks throughout development.
Minimum Viable Architecture -- Good Enough is Good Enough in a StartupRandy Shoup
I have spent the last decade building large-scale systems at eBay and Google -- and talking publicly about it -- and this presentation is about why a startup should completely ignore what I said! In an early-stage startup, it is not only not worth architecting for a future of massive scale; it is actively counterproductive. This presentation from the SF Startup CTO Summit outlines the common architectural evolution of a startup through the search, execution, and scaling phases, and discusses the appropriate technologies and disciplines at each phase. It ends with some real-world examples from eBay, Twitter, and Amazon to illustrate the point.
Modernization patterns to refactor a legacy application into event driven mic...Bilgin Ibryam
A use-case-driven introduction to the most common design patterns for modernizing monolithic legacy applications to microservices using Apache Kafka, Debezium, and Kubernetes.
Lessons from managing a Pulsar cluster (Nutanix)StreamNative
In this presentation, we will cover:
- How to performance test and optimize a Pulsar cluster. We will present how we load tested Pulsar with locust and, following this, how we tuned our configurations for our use cases.
- Event sourcing pattern with Apache Pulsar. Avro schema usage, compatibility choices and schema evolution on pulsar topics that worked for us.
- Bonus: How we source Apache Flink from apache pulsar and run our workflows.
By attending this webinar, you can expect to come away with:
- How to performance test a Pulsar cluster for your use case.
- How to leverage the highly configurable broker and Bookkeeper to suit your needs.
- Event sourcing patterns on top of Apache Pulsar.
- Avro schema usage, compatibility choices, and evolution.
- Familiarise with pulsar connector for Flink and possible use cases.
go-git is a 100% Go libray used to interact with git repositories. Even if it already supports most of the functionality it still lags a bit in performance when compared with the git CLI or some other libraries. I'll explain some of the problems that we face when dealing with git repos and some examples of performance improvements done to the library.
A Journey from Hexagonal Architecture to Event Sourcing - SymfonyCon Cluj 2017Carlos Buenosvinos
Event-based architectures such as Event Sourcing provide multiple benefits: scalability, complexity management, auditing, etc. However, let’s face it, getting there is quite hard. We lack skills, expertise and courage.
In this talk, I’m going to show you some tips and tricks to painless evolve your current architecture towards Event Sourcing, one small step at a time. We’ll start from an Hexagonal Architecture application and we’ll end up in the Event Sourcing doors. The path that we’ll follow is:
Hexagonal Architecture
Hexagonal Architecture with Domain Events
Stepping Stone Architecture (CQRS without Event Sourcing)
Event Sourcing
Talk level: Intermediate to Expert
Requirements: Basic concepts of Hexagonal Architecture (Entities, Repositories, Application Services, etc.)
Fan-out, fan-in & the multiplexer: Replication recipes for global platform di...HostedbyConfluent
This session will dive into our most successful (and unsuccessful!) multi-cluster event replication patterns.
An x-ray of the cross cluster distribution model that powers our globally distributed APIs will touch on the benefits that this model has provided in terms of client API experience, delivery agility and developer experience.
We will focus on recipes for effective use of Mirror Maker event replication to power platform distribution including the challenges of managing a 'fan in' event replication workflow - pulling events created in satellite clusters back to a mothership cluster for processing.
We will introduce the elegant technique of replication event multiplexing - which can be used to simplify the burden of managing a 'fan-in' replication topology by eliminating regional awareness from the application domain and improving replication health monitoring & observability.
Feature flags to speed up & de risk developmentLaunchDarkly
Feature flags are a continuous delivery best practice. Feature flags, gating features and being able to quickly reverse features enables development teams to ship more frequently. Learn how to use feature flags for opt-in early access, private beta, canary launches and dark releases. This talk will use a mix of case studies and best practices and will appeal to software teams who want to move faster and deliver features to end users quicker.
We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
Grokking TechTalk #33: High Concurrency Architecture at TIKIGrokking VN
- Speaker: Nguyễn Hoàng Bách - Senior Principal Engineer @ TIKI
Trải qua 9 năm xây dựng và phát triển hệ thống, đội ngũ engineer TIKI lần lượt phải giải quyết từng bài toán kỹ thuật khó khăn để hệ thống phát triển theo kịp tốc độ tăng trưởng của business. Đặc thù của hệ thống Ecommerce có một thách thức lớn là phải đảm bảo tính chính xác của dữ liệu nhưng đồng thời vẫn phải đáp ứng lượng truy cập lớn. Do đó High Concurrency Architecture có vai trò quan trọng trong kiến trúc tổng thể của TIKI. Nó cũng là bước tiến lớn của các kỹ sư TIKI trong 6 tháng qua.
Introduction to monte-carlo analysis for software development - Troy Magennis...Troy Magennis
Forecasting and managing software development project risks & uncertainty. Monte-carlo analysis is the tool of choice for managing risk in many fields where risk is an inherent part of doing business. This paper examines how to use monte-carlo techniques to understand and leverage risk in Software Development projects and teams.
Designing a complete ci cd pipeline using argo events, workflow and cd productsJulian Mazzitelli
https://www.youtube.com/watch?v=YmIAatr3Who
Presented at Cloud and AI DevFest GDG Montreal on September 27, 2019.
Are you looking to get more flexibility out of your CICD platform? Interested how GitOps fits into the mix? Learn how Argo CD, Workflows, and Events can be combined to craft custom CICD flows. All while staying Kubernetes native, enabling you to leverage existing observability tooling.
Organizations of all sizes using automation and agile methodologies to improve the speed and reliability of their software development initiatives. In this session we will provide an overview and demonstrations of the various ways you can integrate Black Duck Hub with your CI/CD tools to manage open source risks throughout development.
Minimum Viable Architecture -- Good Enough is Good Enough in a StartupRandy Shoup
I have spent the last decade building large-scale systems at eBay and Google -- and talking publicly about it -- and this presentation is about why a startup should completely ignore what I said! In an early-stage startup, it is not only not worth architecting for a future of massive scale; it is actively counterproductive. This presentation from the SF Startup CTO Summit outlines the common architectural evolution of a startup through the search, execution, and scaling phases, and discusses the appropriate technologies and disciplines at each phase. It ends with some real-world examples from eBay, Twitter, and Amazon to illustrate the point.
Modernization patterns to refactor a legacy application into event driven mic...Bilgin Ibryam
A use-case-driven introduction to the most common design patterns for modernizing monolithic legacy applications to microservices using Apache Kafka, Debezium, and Kubernetes.
Lessons from managing a Pulsar cluster (Nutanix)StreamNative
In this presentation, we will cover:
- How to performance test and optimize a Pulsar cluster. We will present how we load tested Pulsar with locust and, following this, how we tuned our configurations for our use cases.
- Event sourcing pattern with Apache Pulsar. Avro schema usage, compatibility choices and schema evolution on pulsar topics that worked for us.
- Bonus: How we source Apache Flink from apache pulsar and run our workflows.
By attending this webinar, you can expect to come away with:
- How to performance test a Pulsar cluster for your use case.
- How to leverage the highly configurable broker and Bookkeeper to suit your needs.
- Event sourcing patterns on top of Apache Pulsar.
- Avro schema usage, compatibility choices, and evolution.
- Familiarise with pulsar connector for Flink and possible use cases.
go-git is a 100% Go libray used to interact with git repositories. Even if it already supports most of the functionality it still lags a bit in performance when compared with the git CLI or some other libraries. I'll explain some of the problems that we face when dealing with git repos and some examples of performance improvements done to the library.
A Journey from Hexagonal Architecture to Event Sourcing - SymfonyCon Cluj 2017Carlos Buenosvinos
Event-based architectures such as Event Sourcing provide multiple benefits: scalability, complexity management, auditing, etc. However, let’s face it, getting there is quite hard. We lack skills, expertise and courage.
In this talk, I’m going to show you some tips and tricks to painless evolve your current architecture towards Event Sourcing, one small step at a time. We’ll start from an Hexagonal Architecture application and we’ll end up in the Event Sourcing doors. The path that we’ll follow is:
Hexagonal Architecture
Hexagonal Architecture with Domain Events
Stepping Stone Architecture (CQRS without Event Sourcing)
Event Sourcing
Talk level: Intermediate to Expert
Requirements: Basic concepts of Hexagonal Architecture (Entities, Repositories, Application Services, etc.)
Fan-out, fan-in & the multiplexer: Replication recipes for global platform di...HostedbyConfluent
This session will dive into our most successful (and unsuccessful!) multi-cluster event replication patterns.
An x-ray of the cross cluster distribution model that powers our globally distributed APIs will touch on the benefits that this model has provided in terms of client API experience, delivery agility and developer experience.
We will focus on recipes for effective use of Mirror Maker event replication to power platform distribution including the challenges of managing a 'fan in' event replication workflow - pulling events created in satellite clusters back to a mothership cluster for processing.
We will introduce the elegant technique of replication event multiplexing - which can be used to simplify the burden of managing a 'fan-in' replication topology by eliminating regional awareness from the application domain and improving replication health monitoring & observability.
Feature flags to speed up & de risk developmentLaunchDarkly
Feature flags are a continuous delivery best practice. Feature flags, gating features and being able to quickly reverse features enables development teams to ship more frequently. Learn how to use feature flags for opt-in early access, private beta, canary launches and dark releases. This talk will use a mix of case studies and best practices and will appeal to software teams who want to move faster and deliver features to end users quicker.
We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
Grokking TechTalk #33: High Concurrency Architecture at TIKIGrokking VN
- Speaker: Nguyễn Hoàng Bách - Senior Principal Engineer @ TIKI
Trải qua 9 năm xây dựng và phát triển hệ thống, đội ngũ engineer TIKI lần lượt phải giải quyết từng bài toán kỹ thuật khó khăn để hệ thống phát triển theo kịp tốc độ tăng trưởng của business. Đặc thù của hệ thống Ecommerce có một thách thức lớn là phải đảm bảo tính chính xác của dữ liệu nhưng đồng thời vẫn phải đáp ứng lượng truy cập lớn. Do đó High Concurrency Architecture có vai trò quan trọng trong kiến trúc tổng thể của TIKI. Nó cũng là bước tiến lớn của các kỹ sư TIKI trong 6 tháng qua.
Tracking Family Planning Spending Using the System of Health Accounts FrameworkHFG Project
Karishmah Bhuwanee traveled to Bali, Indonesia in January 2016 to attend and present at the International Conference on Family Planning at the request of the USAID Office on Population and Reproductive Health. This presentation helped promote USAID’s global leadership on the topics of results based financing in family planning supply chains, family planning inclusion in universal health coverage initiatives and the importance of resource tracking to improve family planning programming.
Exploration and production policies Of Oil & Gas in NorwayAbhishek Rajvanshi
Exploration and production of oil and gas in Norway, laws related to E & P, Petroleum laws, lease licence for exploration,Tax regime, reserves and production data
Technical Excellence Doesn't Just Happen--Igniting a Craftsmanship CultureAllison Pollard
The ninth principle from the Agile Manifesto states that technical excellence enhances agility, but when the codebase is ugly and the deadlines are tight, most teams don’t choose to refactor mercilessly, adopt TDD, or evaluate automated testing tools—unless they have the proper support. In our experience working with multiple teams in a single codebase, developers can feel victim to a legacy codebase if only a few people are writing clean code or refactoring; guiding them on how to decrease technical debt while delivering their projects helps "unstuck" their other agile practices. We will talk about the challenges we’ve seen with Product Owners, Managers, and Scrum Masters interacting with teams at various stages of agile+technical excellence and how a focus on technical practices sparked a wider interest in craftsmanship. Learn how can you influence the team towards the right practices while fostering their sense of ownership. Getting serious about technical excellence requires support from technical and non-technical roles, and we’ll share how we partnered as coaches to help an organization through a technical turnaround with some tips for others who need to do the same.
Automation: from local test to production deploy - 2020-11-05Alessandra Bilardi
CloudConf 2020 in Streaming
Talk about a sample of Automation Solution from local to production
https://2020.cloudconf.it/
https://github.com/bilardi/aws-saving/
https://github.com/bilardi/aws-simple-pipeline/
The business case for contributing codeZivtech, LLC
In the Drupal community we tend to talk about committing code to our public spaces (drupal.org, but also github) in terms of "contributing" and "contributions", and while much of it can be seen in that light, there are actually very strong business reasons for publishing your code and/or attempting to get your code changes committed to the open source project that you are working on.
We will be looking at several documents from the U.S. Military detailing their recommendations for contracting Open Source Software services, and will use those as a jumping off point to discuss the many benefits of contributing code. Some of the business reasons for public publishing we'll explore will include:
* The power of peer review. With enough eyes, all bugs are shallow, and with only a few eyes the stupidity knows no depths!
* Fork you! The costs associated with "hacking" both Drupal core and contrib modules and base themes.
* Take my code, please! Cost savings from committing patches.
* Professionals publish or perish. Using code commits as marketing towards clients or potential hires.
* It's so easy, even a child(ish person) could do it! How you can easily integrate patching into your development workflow.
This session will also include a walk through of how Zivtech handles code review, patches, and deployment processes and you will hopefully walk away convinced that all of your in-house and out-sourced developers should be publicly committing their work.
Deck used during the Kony Base Camp webinar on how to build Component-first Applications and the PubSub pattern.
https://basecamp.kony.com/s/article-detail/a042K000016N9XQQA0/tech-talk-componentfirst-applications
https://youtu.be/yb0yP0MnNNQ
Why Puppet? Why now? Can you get by without using any config management? You probably think don't have time, or that your project is too small. What can using Puppet really add? How can you justify investing time up front? Maybe you can just do it later?
Getting started with config management can often seem like a big project, especially if you only manage a few systems or have a small team. This talk will examine why you should use Puppet from the beginning. It will examine what you can do with Puppet that couldn't do otherwise, how much time it will save and why it's especially important if you think your project has even the smallest chance of scaling in the future.
Presented by David Mytton at Puppet Camp London 2015-04-13
During Kylin OLAP development, we setup many engineering principles in the team. These principles are very important to delivery Kylin with high quality and on schedule.
Drupal and its contributed modules provides an impressive amount of functionality without needing to write a single line of code by storing information in Drupal’s database tables. Unfortunately this poses a challenge for developers wanting to stage changes between servers. This talk starts to address these issues by describing the problem and presenting a variety of solutions as well as their pros and cons. I also discuss some possible paths to make this easier coming down the pipe.
Large Scale Architecture -- The Unreasonable Effectiveness of SimplicityRandy Shoup
Building distributed systems that work is hard. And scaling those systems by multiple orders of magnitude is even harder. Using examples from internet-scale consumer properties like Google, Amazon, and eBay, this talk deep-dives into the counterintuitive idea that the key to success in large-scale architecture is simplicity.
We first discuss simple components like modular services, orthogonal domain logic, and service layering. Next we discuss simple interactions between components, leveraging event-driven models, immutable logs, and asynchronous dataflow. Then we explore techniques that simplify making changes the system, including incremental changes, continuous testing, canary deployments, and feature flags.
In the final part of the talk, we show how all these ideas work together with specific architectural examples from Amazon, Netflix, and Walmart.
You will take away actionable insights you can immediately put into practice in your own systems.
Scaling a High Traffic Web Application: Our Journey from Java to PHP120bi
What makes an application scale? What should you worry about early on and what can wait?
Over the last 3 years, Achievers has learned many lessons and gained fundamental knowledge on scaling our SaaS platform. CTO Dr. Aris Zakinthinos will present and discuss the decisions we’ve made including language choice, server architecture, and much more; join us while we share tips, tricks, and things to absolutely avoid.
Throughout the evening you will have the opportunity to talk to the development team behind the Achievers Platform and ask questions on scaling best practices.
Leandro Melendez - Switching Performance Left & RightNeotys_Partner
Since its beginning, the Performance Advisory Council aims to promote engagement between various experts from around the world, to create relevant, value-added content sharing between members. For Neotys, to strengthen our position as a thought leader in load & performance testing. During this event, 12 participants convened in Chamonix (France) exploring several topics on the minds of today’s performance tester such as DevOps, Shift Left/Right, Test Automation, Blockchain and Artificial Intelligence.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Globus
The Earth System Grid Federation (ESGF) is a global network of data servers that archives and distributes the planet’s largest collection of Earth system model output for thousands of climate and environmental scientists worldwide. Many of these petabyte-scale data archives are located in proximity to large high-performance computing (HPC) or cloud computing resources, but the primary workflow for data users consists of transferring data, and applying computations on a different system. As a part of the ESGF 2.0 US project (funded by the United States Department of Energy Office of Science), we developed pre-defined data workflows, which can be run on-demand, capable of applying many data reduction and data analysis to the large ESGF data archives, transferring only the resultant analysis (ex. visualizations, smaller data files). In this talk, we will showcase a few of these workflows, highlighting how Globus Flows can be used for petabyte-scale climate analysis.
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
Globus Connect Server Deep Dive - GlobusWorld 2024Globus
We explore the Globus Connect Server (GCS) architecture and experiment with advanced configuration options and use cases. This content is targeted at system administrators who are familiar with GCS and currently operate—or are planning to operate—broader deployments at their institution.
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
5. Confidential
• … a common response to a recurring problem that is usually
ineffective and risks being highly counterproductive.
Anti-pattern is…
• … a common response to a recurring problem that is usually
ineffective and risks being highly counterproductive.
6. Confidential
• Process, solution, actions — obvious, but ineffective
• Alternative solution — working and effective
Anti-pattern includes
20. Confidential
• If all you have is a hammer, everything looks like a nail
– “Law of the instrument”
Golden hammer
21. Confidential
• Look at the problem from another point of view
• Look at another technology
• How many patterns do you remember?
Golden hammer — solutions
23. Confidential
• Battle for the performance from start
– Repeat for every line you add
– Sacrifice the design if needed
– No need to measure with performance tests!
Premature optimization
24. Confidential
• A simple design is easier to optimize
• Measure your performance
• Optimize worst points first
• Mind the 80-20 rule
Premature optimization — solutions
25. Confidential
• Forget about that performance!
– Design is über alles
– Don’t bother caching
– Copy heavyweight containers
– …? (Add your option)
Premature pessimization
28. Confidential
• Be aware of existing solutions, libraries etc.
• Don’t be afraid of them
• But be sure you understand them
Reinventing the square wheel — solution
37. Confidential
• Add MORE complexity to the solution
– essential complexity: we have a hard problem
– accidental complexity: we have made a problem hard
Accidental complexity
45. Confidential
• Strategical: provide yourself with diagnostic tools
– Use logging
– Keep stacktrace
– Document steps
Shot in the dark – solutions
46. Confidential
• Just fix and commit: we have QA anyway, no need for self-testing
• Just use this class: there are hardly any restrictions
Blind faith
57. Confidential
• Cause: desire to hide complexity
• Solution:
– simplified message for user
– detailed message in log
– show errors depending on environments
Error hiding — solutions
58. Confidential
• Just keep adding lines to the method
– Using labels made it even more spicy in olden days
– But you still can do it with IF’s just like that
Spaghetti code
59. Confidential
• “Clean code” practices
– E.g.: methods not longer than a screen
• Use metrics to stay warned!
Spaghetti code — solutions
63. Confidential
• OK, OK, I got it. No more business logic in code!
– Let’s move everything to… database?
Soft coding
There’s definitely something wrong here…
73. Confidential
• No!
…says Liskov’s substitution principle
• Ellipse.stretchX()
– Can not be replaced with Circle!
Circle-ellipse problem
74. Confidential
• Return success/failure value; or raise an exception
– OperationNotSupportedException
• Return the new value (no change for Circle)
• Allow for a weaker contract
– stretchX() also calls stretchY() (Surprise!)
• Use immutable objects
• Question the hierarchy
– Circle.asEllipse()
Circle-ellipse problem — solutions
75. Confidential
• Let your modules depend on each other
– Enlarge your coupling!
Circular dependency
79. Confidential
• Any benefits?
• Clear separation between logic and data
• “Pure fabrication” pattern support
– “Service” classes
Anemic domain model
89. Confidential
• Be suspicious about start…(), init…() methods
• Don’t reveal your class details
• Use “Template method” pattern
Sequential coupling — solution
92. Confidential
• The way the system is designed
– on architectural level
Software design anti-patterns
93. Confidential
• More features, less benefits
Software bloat
• Plug-ins (extensions, add-ons)
• Similar anti-patterns?
94. Confidential
• Architecture?
No time for this!
Big ball of mud
• Reasons:
– business pressure
– developers rotation
• Symptoms
– bugfixing as a main task
– maintenance nightmare
95. Confidential
• Everything can be improved
a bit more
– when should you stop?
Gold plating
• Efforts distribution
• Pareto principle (80/20)
98. Confidential
• Everyone knows the project is going to fail
– But the truth is hidden to prevent project cancellation
• Alternatively: unreasonable deadline
– And unnecessary overtime work
Death march
99. Confidential
• Rely on heroic efforts (of one or more persons)
– Even base estimates on them
Hero mode
• Solutions:
– Make honest estimates
– Distribute tasks
– Don’t reward heroic behavior
100. Confidential
• “No-no, we cannot do anything in this module without John!”
• “I don’t know about it. Ask Mary, she has written all this code.”
• “I like to work alone. It’s just my way of working.”
Lonely rider
• Solutions:
– If you have an irreplaceable person — replace him ASAP
– Knowledge sharing
– Peer reviews
– Mentoring to less experienced
developers
101. Confidential
• Pay too much attention to measurement data
– Due to your ignorance or on purpose
Metric abuse
• Solutions:
– Ensure that everyone understands metrics meanings
– Remember: metrics are means, not goals
102. Confidential
• Seagull manager
– flies in,
– makes a lot of noise,
– craps on everything
– and flies out again.
Seagull management
• Solutions:
– … show him this definition?
105. Confidential
• “Measure thrice and cut once”
– Some people prefer to measure even more times…
Analysis paralysis
• In software development: long phases of
– project planning
– requirements gathering
– program design
– …
106. Confidential
• “Two heads are better than one”
– The more heads, the better?
Design by committee
• Many contributors, but no unifying vision
107. Confidential
Escalation of commitment
• English proverb: “Throw good money after bad”
• Examples:
– Bidding wars (“Dollar auction”)
– Trying to revive the inevitably dying project
108. Confidential
• Use a vendor you can’t change without losses
Vendor lock-in
• Examples:
– SIM locking
– Gift certificates
– Sony Memory Stick
– External service or framework
• Solution:
– Isolation layer
111. Confidential
• Use link text that does not correspond to the target
“Click here”
For downloading demo version, click here.
For reading the online documentation, click here.
You can download demo version
or read the online documentation,
112. Confidential
• Open your menu on hover, not on click
– And hide it once the cursor is out
– That will train visitors’ fine motor skills. And patience.
Hover menus
113. Confidential
• Make important icon/link too small
– Yes, fine motor skills again
Tiny targets
► Gadgets
► Buildings
► Food
▼ Transport
► DeLorean
► Hoverboard
Only bullets are clickable
Добрый день, меня зовут Андрей Уваров, я Java-разработчик в компании Return on Intelligence. Приветствую вас на вебинаре про антипаттерны в разработке ПО.
==00:05==
Пара слов о том, чем мы сегодня займёмся:
Начнём мы, естественно, с того, что
-- дадим определение, что же это такое, антипаттерны
-- выясним, для чего их вообще изучать
-- поймём, что приводит к их появлению
И потом разберём примеры наиболее часто встречающихся АП
Их много, как и паттернов, но можно выделить группы
Пойдём, поднимаясь по иерархии, от низких уровней к более высоким
От написания кода и до управления проектами
Немного обсудим вопросы, которые у нас обязательно возникнут
Теперь ещё буквально пара слов о том, как будет построен вебинар
Довольно большой объём информации, и чтобы эффективнее использовать наше время, я попрошу записывать вопросы и задавать их в конце раздела
В конце вебинара у нас специально запланировано время на обсуждения и любые вопросы по всему материалу
Итак, начнём с определения, что такое АП...
Антипаттерн – этоооооо...
Часто встречающееся плохое решение известных проблем.
Например
Мы слушаем тренинг
Открывается новый слайд
Читаем его, пропуская то, что говорит ведущий
Не получается толком ни то, ни другое
Это и есть антипаттерн
Можно и иначе –
готовим тренинг
пишем на слайде много-много текста
потом читаем его или, наоборот, рассчитываем, что написанное уже всяко доведено до слушателей, и говорим совсем другое
всё равно неудачно получается
Шаблон поведения, вроде бы естественный, напрашивающийся, но на самом деле приводящий к ухудшению ситуации.
Мы все знаем про паттерны – это когда у нас есть проблема, и мы делаем что-то, чтобы её решить.
А антипаттерн – это когда есть проблема, мы делаем что-то, чтобы её решить, а получается только хуже.
Описание АП включает
-- некий кажущийся очевидным ответ на проблему, в лучшем случае бесполезный, а то и вредный
-- альтернативное решение, работающее и доказавшее свою эффективность
-- Говорить про паттерны мы будем в виде вредных советов, паучок на слайде как раз и будет нам их давать.
Для чего изучать АП?
«Знать врага в лицо»
Понимать, что некая ситуация является известной проблемой, сложной или простой, но, как правило, решаемой.
«Говорить на одном языке»
Использовать одну и ту же терминологию при обсуждениях, поиске информации, обмене опытом.
Достаточно сказать «у нас тут образовались магические числа», и собеседник понимает, о чём речь.
Аналогично с паттернами.
«Вовремя распознать проблему»
«Не наступать на известные грабли»
В своей работе мы и так достаточно часто встречаемся с «граблями» -- неожиданно возникающими проблемами. Хорошо бы вовремя заметить хотя бы те, по которым уже потоптались до нас.
Что вообще приводит к такому шаблонному и ошибочному поведению?
Спешка
Помните его девиз? «И так сойдёт»
Невежество, незнание
Лень
Самонадеянность
«Мне некогда и неохота что-то там учить, справлюсь и так»
==00:10==
Со вводной частью мы закончили, давайте перейдём непосредственно к примерам конкретных антипаттернов
Начнём с группы, условно названной «методологические»
Способы, приёмы нашей работы
Именно методология программирования
Начну с самого, самого известного и самого всеми любимого антипаттерна – «копипаст»
Паучок даёт вредный совет: просто копипастите нужный фрагмент кода туда, где он тоже требуется
Известный АП, все мы знаем, что так делать плохо... А, собственно, почему? Если вкратце, в двух словах сформулировать?
-- сложность поддержки кода
Посмотреть на проблему с другой точки зрения – может, там хоть резьбу увидите?
Подумать про другую технологию – пересмотреть свой ящик с инструментами (у вас ведь ящик? Не один только молоток?)
Ближайший пример: вы знаете много паттернов? Если их считанные единицы, вы и будете применять в основном их
Закону инструмента легче противостоять, если инструментов в арсенале много
Чем больше, тем лучше
Преждевременная оптимизация
Займёмся ею с самого начала
Добавили строчку – стали думать, как оптимизировать
Если нужно, пожертвуем и дизайном, лишь бы ускорить
А раз оптимизируем всё и сразу – то не нужны и пифоманс тесты
Проще дизайн – проще оптимизировать
Прежде всего измерения, не надо вслепую
Если уж оптимизируем, то сначала там, где особо нужно
80/20
Иногда можно уйти в другую крайность
Дизайн превыше всего
Кэширование никому не нужно
Копируем объекты не задумываясь
...ещё варианты? Как можно ухудшить пифоманс?
Кот как бы говорит нам: соблюдаем баланс
Не бросаемся в крайности
Изобретение квадратного колеса
Два аспекта – и то, что изобретаем уже существующее, и то, что оно получается хуже
Знать о существующих решениях
Не бояться применять (+ АП «Сделано не здесь»)
Но понимать, что именно делаешь (+ «Карго-культ»)
Закончим на этом с примерами методологических АП
Если у вас возникли какие-то вопросы по уже услышанному – самое время их задать, я постараюсь ответить
Подстерегают нас, разработчиков, буквально каждый день во время нашей работы
Самый «низкий» уровень, но проблемы здесь могут влиять на проект целиком.
Как им противостоять?
Только постоянным стремлением к улучшению
Баобабы проблем лучше выкорчёвывать, пока они маленькие
Идеология «Чистого кода» (Роберт Мартин)
Предлагает улучшать код понемногу, в процессе работы над задачами проекта.
Следите за чистотой кода
Разберём некоторые наиболее популярные антипаттерны
Не стоит вглядываться в этот код, это пока ещё не антипаттерн, а просто ретро-картинка про кодирование
Например:
double total = 1.13 * price;
Вместо этого:
public static final double TAX_RATE = 1.08;
(…)
double total = TAX_RATE * price;
Причём тут надо очень строго оценивать необходимость константы, при малейших сомнениях – лучше определять её. Этой ошибки, кстати, не избежал даже Роберт Мартин в «Чистом коде».
«Число 5280 – количество футов в миле – настолько хорошо известно и уникально, что читатель сразу узнает его, даже если оно будет располагаться вне какого-либо контекста.»
Забавно, да? Вот в следующий раз, когда вам захочется использовать 86400 прямо в коде, без константы – вспомните этот пример.
Видели такой код, правда?
Перед вами антипаттерн «Искусственная сложность»
В отличие от essential complexity, естественной
Причины:
Например, изменившиеся бизнес-требования. Было многоступенчатое ветвление, часть веток стала неактуальной. При исправлениях ограничились формальными точечными изменениями. А дерево решений на самом деле уже можно упростить до простого if-else.
Решения:
* Избегать «хитрого» кода (замысловатого) (помните, может, в программистской юности высшим шиком считалось написать такой код, чтоб был коротким, совершенно непонятным, но делал сразу кучу вещей)
Все время спрашивать себя: а то ли я делаю
«Чистый код», опять же
Программирование методом карго-культа (использование без понимания)
Пример: юнит-тест на простейшие сеттеры и геттеры, или на возврат замоканных данных.
Технологии «для резюме»
Популярная разновидность сегодня: Found on Internet («скопипастил со стэковерфлоу»)
Думаю, большинство из вас знает, что такое карго-культ, но на всякий случай вкратце расскажу...
Ну, какое тут может быть решение? Только одно – эволюционировать, для начала из coding-monkey хотя бы в Гомера
Выстрел наугад
Пытаемся угадать источник проблемы
Не используем логи, стектрейсы, не пытаемся воспроизвести у себя
Лечим симптомы -> например...
Пришли неожиданные данные на вывод – подправить их и показать что-нибудь осмысленное, не разбираясь, откуда неожиданность
А неожиданность, например – от заглушенной ошибки в предыдущей обработке (пустой catch)
Не надо так!
Выстрел наугад
Два аспекта решений:
-- тактический: понять суть проблемы перед тем, как бросаться решать. Устранять корень ошибки, а не «заметать пыль под коврик».
Выстрел наугад
Два аспекта решений:
-- стратегический: обеспечить себя инструментами диагностики
Логирование
Анализ стектрейсов
Документирование шагов, приведших к ошибке
Слепая вера
-- в свои силы как программиста: «да должно заработать, там же всё очевидно»
-- в силы других программистов: «ну, метод же вроде делает примерно то, что мне нужно, какие там ещё особенности»
На веру ничего не принимаем, если нам нужно, чтобы что-то было в определённом состоянии – убеждаемся, что так и есть
Непонятно, рабочий это код или уже никем не используемый
Даже если до этого куска кода дойдут руки – скорее всего, к тому времени он уже устареет, рассинхронизировавшись с остальным проектом. Чаще всего окажется проще выкинуть его и написать свежий.
Поток лавы
Масштабная подсистема, модуль, функциональность, на которую постоянно натыкаются, но которую боятся тронуть, потому что непонятно, сколько это займёт и на что повлияет.
Само всё обычно только ухудшается
Конечно, переделать – избавиться, отрефакторить, оптимизировать.
Снизить риски можно тестами
Картинка
Этого д.б. достаточно
* Причина: желание скрыть сложность
Крайности – не самый хороший вариант. Не нужно вываливать на юзера дампы памяти (помните в Win95 сообщение об ошибке с кнопкой Details?).
* Но хоть указать проблемную область стоит. Например: «не получилось создать файл по такому-то пути», и юзер уже примерно понимает, что можно сделать.
А вот стектрейсы ему не нужны, в отличие от вас. Так что логи наше всё.
А ещё можно по-разному показывать ошибки на прод и девел энвайрноментах.
Чистый код, практики – метод не длиннее страницы, например
Метрики для предупреждения
Про что это, как считаете?
Properites files
Спросить у пользователя
Внешняя конфигурация – сервер с конфигом
Вынесем все правила бизнес-логики в конфигурацию.. В БД, например...
Получаем чуть ли не новый язык программирования, чтоб заставить программу работать
* что-то тут не так
Соблюдаем разумный баланс
Программирование через особые ситуации
(это не про эксепшны)
Новое изменение в требованиях – дописываем код, не глядя на то, что было
Рефакторингом не занимаемся
Получаем подобные паровозики Ифов
Помните, говорили про искусственную сложность?
Не про трай-кетч
Получив новое условие, проверяем, насколько оно новое – вдруг есть что-то общее с уже существующими
Меняем код как целое, адаптируем не только отдельные детали, если нужно
Вопросы?
Составляем список на доске:
Inspections
Code reviews
Metrics
Понятие технического долга – объяснить, если надо
==00:40==
То, как система спроектирована
На уровне классов – «конкретных деталей»
Принцип подстановки (замещения)
Кто-нибудь может сформулировать?
«если S является подтипом T, тогда объекты типа T в программе могут быть замещены объектами типа S без каких-либо изменений»
Барбара Лисков :)
Сигнализировать о невозможности операции
Возвращать новый тип данных (старый не меняем)
Ослабляем контракт, если возможно
Используем неизменяемые объекты
Пересматриваем иерархию (независимые классы, возможность конвертации)
Инверсия зависимости
Говорим, что провода из стены должны предоставляться в определённом виде – то есть сервис должен иметь определённый интерфейс
Тогда тем, кто его использует, достаточно знать об этом интерфейсе и зависеть уже от него
Вроде бы усложнение, но на самом деле жить становится проще
Использование объектов, не содержащих бизнес-логики (или мало)
* Пример – JavaBeansЭто плохо? Можно заметить, что паучка нет.
Тонкий приём, имеющий и достоинства, и недостатки, и то и другое надо понимать.
Давайте подробнее рассмотрим.
* Чёткое разделение данных и логики, возможность отделить данные от их обработки
* Класс -«сервис» -- воплощение «бизнес-логики», которому можно передать чистые данные, чтобы он провёл какие-то операции над ними. Объединять эти операции с данными не всегда целесообразно (напр., работа с БД)
Недостатки?
* Отход от принципов ООП (когда данные знают, как должны быть обработаны)
* Может нарушиться непротиворечивость данных (ввели дату смерти, а флаг «умер» не поставили)
* Увеличение связности (через объекты данных)
«И один, всесильный...»
Сложно поддерживать
Отход от принципа «одной ответственности»
Проблемы с тестированием
Осторожно с ...
Следуем принципу одной ответственности
Проблемы с тестированием как индикатор
Пишем утилитный объект, просто предоставляющий функционал
Наследуемся от него просто чтобы получить доступ
Нелогичная иерархия
Неожиданные побочные эффекты и особенности реализации
Теперь у машины есть функционал «собирать стряхиваемый пепел»
Не надо так!
Делегирование
Предпочитаем композицию, а не наследование
В этом помогают интерфейсы
Так-то лучше!
Теперь внутри машины есть модуль, работающий с пеплом
Загрязняет неймспейс
Не является частью API
Привязка к последовательности
Осторожно с...
Не раскрывайте детали реализации
Используйте метод-шаблон
Вопросы?
==01:00==
То, как система спроектирована
На уровне модулей, подсистем, их взаимодействий
Архитектура
Раздутое ПО
Ваши примеры?
Word (+HTML редактор, +веб-инструменты)
ICQ (смайлы, реклама, ...)
* решения: плагины
* similar AP:
Spaghetti code
Monster object
Ком грязи
(отсутствие внятной архитектуры)
Причины
Давление заказчика
Текучка кадров
Симптомы
Багфикс как основная работа
Адовая поддержка
Бесконечные улучшения, «вылизывания»
Это, если кто не разглядел, вертолёт
Решения?
* Рациональное распределение усилий
* Принцип Парето
Input kludge (непроверка входных данных)
Stovepipe system (дымоходы – каждый дом со своей системой – создание своей авторизации, например)
Database-as-IPC (interprocess communication) -- БД для межпроцессной коммуникации
==01:05==
Марш смерти
Все знают, что проект обречён, но не хотят, чтоб его закрыли
Как вариант: нереальный дедлайн, но никто не говорит вслух; ненужные переработки и т.п.
Режим супергероя
Решения
Честные оценки
Распределение задач
Не поощрять подвиги
Одинокий рыцарь
*** Отдельный работник становится незаменимым
Решения
Скорее заменить
Распределять знания, не допускать уникальных хранителей
Ревью – поощрять общение
Обучение внутри команды
Придавать слишком большое значение метрикам, метрики как самоцель
* По незнанию или намеренно
Вопрос: когда злоупотребление метриками может быть намеренным? (с какой целью?)
Когда acceptance criteria (95% покрытие кода)
Решения
Убедиться, что все понимают назначение и смысл
Метрики – средство, а не цель
Чайка-менеджмент
Прилетает
Поднимает много шума
Гадит на всех
Улетает
решение
Показать ему это определение?
…
Groupthink
Smoke and mirrors
==01:15==
Семь раз отмерь, один отрежь
Иногда измерения затягиваются...
* В разработке ПО: слишком долгие этапы...
«Разработка комитетом»
Одна голова хорошо, а две лучше
А три? А пять?
Участников много, но нет общего видения
Причины
Плохое архитектурное руководство
Самолюбие программистов, гордыня (принцип «изобретено не здесь»)
Недостаток знаний
Пренебрежение стандартами (споры вокруг того, что уже можно принять как готовое, то, с чем все согласятся)
Продолжение вложений (сверх разумного)
Примеры
Долларовый аукцион
Попытка реанимировать обречённый проект («марш смерти», ага)
Привязка к поставщику
Примеры
Привязка сим-карты
Подарочные сертификаты
Закрытый протокол ICQ – периодические проблемы у сторонных клиентов при смене протокола
Карты памяти для техники Sony
Сторонний фреймворк в вашей программе
Решение
Промежуточный слой доступа
…
Cash cow
Mushroom management
(kept in dark, covered with dung, picked up when grown big enough)
(Содержать во тьме, подкармливать навозом, срезать, как только подрастут)
==01:25==
Открывать меню по наведению, а не нажатию
И прятать, когда курсор уходит
Тренируем мелкую моторику и терпение
Какие пользователи активны?
Картинка, конечно, не совсем честна по отношению к Ворду
==01:35==
Можно заметить, что одна и та же проблема...
...На разных уровнях, слоях...
...проявляется в виде разных АП
Искусственная сложность
Монстр-объект
Раздутое ПО
Я очень надеюсь, что вы напишете свои отзывы по результатам вебинара
Буду очень рад, если вы поможете мне улучшить вебинар и напишете, что понравилось и что можно улучшить
Я очень благодарен вам за ваше время, надеюсь, мы провели его с пользой
Ещё раз спасибо, теперь я готов ответить на ваши вопросы