Dev Notes¶
Software Types¶
Type 1
High Production Cost for the Producer
Low Maintenance Cost for the Consumer
High Maintenance Cost for the Producer
Examples: Games, Microsoft Office, Mobile Apps
Type 2
Variable Cost for the Producer
High Maintenance Cost and Production Cost for the Consumer
Examples: Majority of In-House Softwares, Software Services, Out Sourcing …
Type 3
High Production Cost for the Producer
Variable Cost for the Consumer
High Maintenance Cost for the Producer
Examples: Software as Service products
If the client is confused about Type 1 or Type 2 or Type 3 it is a fucking headache. They won’t be paying properly and their expectations are fucking skewed from the Start.
Type 1 Software is like building a “Car”. Type 2 Software is like building a “Ammonia Factory”. Type 3 Software is like building a “Mc Donalds”.
Programming¶
Programming is an activity of designing Software Applications and Interactive Media.
A Software Application is a Control System with Digital Interfaces suited for the particular Domain.
Data, Components and Flows constitute the Control System of the Software .
With research is that it often omits numbers
in favour of elegance of formulas. In engineering you show numbers
in favour of a formula.
Modularity which is mainly about the reconfigurability of the system, as in how you can take it apart and put it back.
Business = Problem + Solution + Sales + Management.
We now have sufficient stake in the digital world that purely Software workflows are a problem too.
Software can help in the following aspects of Sales
Marketing and Analytics
Customer Engagement
Customer Support
New channels for Sales
With regards to Management,
Accounting and Billing
Human Resources
Communication
And finally with respect to the Solution,
Workflows Monitoring
Automation
The common tradeoffs are,
Ease of Use
Performance
Aesthetics
Security
Dependency
Cost
Training
Maintenance
Programming is very much like being a lawyer but with lesser respect, but hopefully it will improve over time. At the present moment there are very few purely Software Companies ( excluding Service Companies). For a majority, Software runs 20% of the Business.
Platforms¶
OS/Mobile/Watch/Smart TV/Smart Device/Embedded/Browser/VR/AR
Qt / Cocoa
Java
Unix
HTML5
Facebook / Twitter Platforms
Github
DOTA/Minecraft
Tie In with platoforms vs Independance
Platform -> App
Framework -> Extension
What is illegal on platforms
Sex/Drugs/Hate
Piracy
Hacking/Spying/Malware
Competing Platforms
An App or Extention is a combination of APIs given by the Platform/Framework which solves a use case
Characteristics of Software¶
Size
Speed
Bandwidth
Memory
Scale
Complexity
Leaks
Entropy
Cascades
Uptime
Cost
Training
Deployment¶
CI
Packaging
Build
Version Control
Horizontal and Vertical Scaling
Upgrading
Backup / Restore
System Administration and setup
Performance Tuning
Logging and Auditing
Long term Data Storage
Monitoring
Network Administration and setup
Maintain a Changelog
Tuning
Testing Software¶
End User Simulation
Stress Testing
Edge Case Testing
Security Testing
Component Testing
Component Internals Testing
Tracing
Logging
Documentation
Naming Conventions¶
Data / Events Should follow structural Naming Conventions.
Components are AdjectiveVerbs
Couplings are VerbNouns
Files should be organized by
Base
Data Models
Components
Passive Components
Main Component
User Interfaces
Simulations
Analysis Skills¶
Story Gathering / User Research / Requirements Gathering
Prototyping
Estimating
Architecting / System Modelling
Designing
Data Modelling
Composing / Decomposing
Process Modelling
AB Testing
Diagrams - ER / DFD / SC
Mockups
Set Milestones and Cost
Delegating
Delivery Planning
Misc Skills¶
Scripting
Presenting
Negotiating
Writing
Reverse Engineering
Debugging
Technique is not a substitute for discipline and focus.
Feature Driven Development¶
Build feature list / requirements
Object, Action, Result
User stories
Mockups
BDD Specs
Design Data
Set Milestones and Cost
Plan and delegate to feature teams
Data Flow Diagrams
Actor Models
Couple User Interfaces to Observers and Observers to Components
Couple Components
Build by feature
Bottom up programming is a lost Art form. I’ll try to list down the principles of it.
Build Components one at a time, independently of all other components
Use the Component using a Component Shell / REPL
Test the Component using Automation.
3.1 Make Inputs / Outputs / Network / Sources / Sinks abstract
3.2 Use a Module Loader to manage Component LocationModel User Interface as Events so that they can be Simulated.
The advantages of a Component Shell / REPL are multifold
In makes Develop / Interact cycle easy
It makes Application Scripting possible from the Start
It makes Testing stupid.
Anti Patterns¶
Golden hammer*
Over engineering*
Inner Platform*
Reinventing the Square Wheel*
Gold plating
Magic Button
Shotgun
Big Ball of Mud
Buzz Words*
State¶
Never store state inside a Component. State should either be stored in Data or in transient Event objects. Object Oriented Programming encourages storing State. DO NOT FOLLOW IT. Keep important state separate and immutable.
Debugging¶
https://en.wikipedia.org/wiki/Five_Ws
https://en.wikipedia.org/wiki/5_Whys
Finding errors as quickly as possible
Keep errors from cascading
Keep errors visible
Add redundancy to avoid single point of failures
Painless replacements
Unicode¶
Character is what one would normally write on a piece of paper.
Charater set is a group of characters linked by some common property.
Encoding is the binary representation.
Glyph is the actual shape we see on the screen, variations are left to the font.
Font is what actully represents the glyph at machine level.
Code point is the number representation of each character in character set
Unicode is a 32-bit representation scheme consisting of 256x256x256x256 character points assigned to charaters
Currently about 0.1 million points have been assigned. Only ancient symbols have not been given any assignements.
Each byte represents as follows -> column x row x plane x space. Since the number is huge, all the ASCII tables have been filled on the first plane and this first plane also hosts all commercially important languages.
There is UTF-32, UTF-16. With the help of surrogate pairs that UTF-16 covers entire unicode space.
UTF-8 this is the best encoding available where 7-bit ascii is kept intact.
All encoding greater than ascii are witten from the last byte in literal hex form from right to left.
If any vacancies remain in the leftmost byte then they are made 0. The now of ones suffixed by zero in the first byte indicate the no of bytes.
Project Management¶
Typical Features¶
Profiles Blog Forums Landing Pages
Workflows Training Marketting Security Testing Analytics
Commerce Social Media
Utilities Apps Games
Marketplaces
Frontend
Backend … // extensible like apple events
Background - Tasks / Timers
Tests
Auth / Security / Type Checking / Type Conversion / Validation
Resources
System - File / Db/ Memory / Device / Sub programs
Corporate Hierarchy¶
Intern
Junior
Senior
Lead
PM
Vice President
President
Board
CEO
Startups¶
Flat
Politics¶
Conservative vs Democracy Favors Stability, Quality, Efficiency over Risky, Creative ways Favours Bureaucracy over Meritocracy
Decisions¶
Language Framework Architecture Deployment Requirements Data Collection Documentation DB UI
Vision, Mission, Goals, Outcomes, Means, Processes, Users, Stakeholders
Typical stakeholders
Marketing
Management
Engineering
User
Project Constraints
Quality
Money
Power
Human Resources
Time
Law
Environment
Competitor pricing
Previous Cycle Customer Feedback
Stocks
Money Flow
Sales Funnel
Business rules¶
If <condition(s)> Then <consequence(s)> When <condition(s)> Then <imposition(s)> Otherwise <consequence(s)>
Types of project decissions¶
Minor
Major
Decissions tied to identity
Algorithms for decision making¶
Random
Best
Best fail
Least Time
Difficulty Level
Delayed Gratification
Emotions
Values
Imitation of Past
Known Devil over Unknown
Satisfactory
Role Playing / Simulation of the end
Procrastination / Wait and Watch
Fight / Flight / Fawn
Friend / Enemy / Neutral
Fast / Cheap / Good
Aesthetics / Disgust
Risk Averse / Novelty Seeking (Failure Minimise)
Value for money / Best
Cognitive Bias via Ignorance
https://www.wikiwand.com/en/Heuristics_in_judgment_and_decision-making
https://www.wikiwand.com/en/Prospect_theory
https://www.wikiwand.com/en/Multiple-criteria_decision_analysis
https://www.wikiwand.com/en/Decision_theory
https://www.wikiwand.com/en/Decision-making
https://www.wikiwand.com/en/Decision_analysis
https://www.wikiwand.com/en/Postmortem_documentation
https://www.wikiwand.com/en/Argument_map
https://www.wikiwand.com/en/Group_decision-making
Strategy¶
Def: Plan to get more power by selecting from the current alternatives, because of the irreversibility of commitment of resources
Architecture¶
Requirements Analysis
Data Flow Diagram (BPM)
ER
Control Flow
Screens
Configuration
Module Decomposition
Function Decomposition (transforms, reactions, controllers)
New Data Structures
State transitions
Prototype¶
Ideas - 100% rule, mutually exclusive mapping, depends mapping Use Case Mockups
for feedback get a test user feedback.
Task division¶
Milestones Estimation - Optimistic / Pessimistic, Stages (Weeks) / Phases (Months) for mapping out duration
Tactics¶
Gnatt Chart and Kanban for current status
Todo
Issues
Done
Benefits, Risks, Opportunities, Threats
Gaps, Limitations, Tradeoffs, Constraints
Logging / Learning
Just-in-time Continous-Improvement Fool-proofing
Issue Management¶
Create checklist of tasks at the time of creation and post sprint meeting
Update estimates
At the time of closure summary should be updates
Capture daily conversations, internal discussions and emails in the request
Critical / High is used for production outages
Give accurate title, good commit messages and provide more context for updates for later reference and for anyone reading it
SDLC
Quarterly goals are divided into sprints
For each sprint
Meeting
Retrospective
Estimates
Planning
Development
Code Documentation
Dev Testing
Data Testing
Review
QA and Production
Typical Responsibilities¶
Example for peers in terms of knowing the domain and delivering a quality product.
Timely Presence
Motivate juniors
Manage business expectations, estimates and keep everyone in loop for delays.
Follow up other teams’s issues
Take ownership
Anticipate edge cases in development and estimates and sprint planning
Take reviews seriously
Understand data from business POV
Read company updates, team commits and mails
Discuss before committing to business
Problem Solving¶
Generalisation / Simplification / Analogy / Induction
Guess / Skepticism / Verification
What is missing ? What are the patterns ?
Edge Cases
Visualisation
Backtracing and Divide and Conquer
Multiple Hats¶
Fedora - PM / Choosing between alternatives / Todo Review Scorpio - Big Picture Yellow - UX / Empathy Red - Problem Solving / Ideas Blue - Do Task
HAT OVERVIEW TECHNIQUE BLUE “The Big Picture”
CAF; FIP
WHITE
“Facts & Information”
Information
RED
“Feelings & Emotions”
Emotions and Ego
BLACK
“Critical Judgement”
PMI; Evaluation
YELLOW
“Positive”
PMI
GREEN
“New Ideas”
Concept Challenge; Yes, No, Po
ACTIVITY
HAT SEQUENCE
Initial Ideas
Blue, White, Green, Blue
Choosing between alternatives
Blue, White, (Green), Yellow, Black, Red, Blue
Identifying Solutions
Blue, White, Black, Green, Blue
Quick Feedback
Blue, Black, Green, Blue
Strategic Planning
Blue, Yellow, Black, White, Blue, Green, Blue
Process Improvement
Blue, White, White (Other People’s Views), Yellow, Black, Green, Red, Blue
Solving Problems
Blue, White, Green, Red, Yellow, Black, Green, Blue
Performance Review
Blue, Red, White, Yellow, Black, Green, Blue
navy shoes. Navy blue is the colour of routines. We take navy blue action when we follow rules.
grey sneakers. Grey is the colour of brainwork, as in “the old grey matter”, and are put on when we need to investigate more.
brown brogues. Brown is the colour of earth and represents what is down-to-earth. Brown brogues are put on to take practical action.
orange gumboots. Orange is the colour of warning signs. This is action to avert a crisis.
pink slippers. Pink is what is comfortable, caring and understanding. We put on pink shoes when it is important to consider and respect human feelings.
purple riding boots. Purple is pomp and splendour and represents responsible thinking, what we should do.
http://www.toolkitforthinking.com/home
https://www.wikiwand.com/en/Team_Role_Inventories
https://www.teammanagementsystems.com/tms-profiles/team-managment-profile-tmp/
https://www.valuebasedmanagement.net/methods_bono_six_thinking_hats.html
https://medium.com/@flaviorump/yellow-hat-explained-the-six-thinking-hats-book-summary-5-7-730b372ab20f
https://www.retrospectivewiki.org/index.php?title=Retrospective_Plans
https://www.youtube.com/watch?v=h0gbw-Ur_do
https://en.wikipedia.org/wiki/Customer_engagement
https://www.holloway.com/g/using-twitter
https://www.wikiwand.com/en/SMART_criteria
https://en.wikipedia.org/wiki/Twelve_leverage_points
https://en.wikipedia.org/wiki/Systemantics
https://en.wikipedia.org/wiki/Marketing_plan
https://en.wikipedia.org/wiki/Strategic_management
https://www.wikiwand.com/en/Open_business
https://www.wikiwand.com/en/Open-source_governance
https://www.wikiwand.com/en/Organizational_architecture
https://www.wikiwand.com/en/Zachman_Framework
https://www.wikiwand.com/en/Business_models_for_open-source_software
https://www.wikiwand.com/en/Revenue_model
https://www.wikiwand.com/en/Business_Model_Canvas
https://www.wikiwand.com/en/Business_operations
https://www.wikiwand.com/en/Problem_structuring_methods
https://www.wikiwand.com/en/Buyer_decision_process
https://www.wikiwand.com/en/Brand_awareness
https://www.wikiwand.com/en/Consumer_behaviour
https://www.wikiwand.com/en/Brand
https://www.wikiwand.com/en/The_Design_of_Business
https://en.wiktionary.org/wiki/when_you%27re_up_to_your_neck_in_alligators,_it%27s_hard_to_remember_that_your_initial_objective_was_to_drain_the_swamp#English
https://twitter.com/andrewchen/status/1058033532029722624
Software Version¶
Program is made of Major / Minor + Features and patches
Development Trends¶
Single Page Applications with React or Vue.js
React Native
Atomic Design
CSS in JS
postcss
Reactive Programming
Flux Architecture
Progressive Web Applications
NoSQL
Isomorphic Applications
Containers and Immutable Architecture
Micro Services
Red Green Deployment
Backend as Service
Pub / Sub
End to End Encryption
IOT and Arduino
VR, AR
Bots and Natural Language Interface
Machine Learning