Dev Notes

Software Types

Type 1

  1. High Production Cost for the Producer

  2. Low Maintenance Cost for the Consumer

  3. High Maintenance Cost for the Producer

Examples: Games, Microsoft Office, Mobile Apps

Type 2

  1. Variable Cost for the Producer

  2. High Maintenance Cost and Production Cost for the Consumer

Examples: Majority of In-House Softwares, Software Services, Out Sourcing …

Type 3

  1. High Production Cost for the Producer

  2. Variable Cost for the Consumer

  3. 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

  1. Qt / Cocoa

  2. Java

  3. Unix

  4. HTML5

  5. Facebook / Twitter Platforms

  6. Github

  7. DOTA/Minecraft

Tie In with platoforms vs Independance

Platform -> App
Framework -> Extension

What is illegal on platforms

  1. Sex/Drugs/Hate

  2. Piracy

  3. Hacking/Spying/Malware

  4. 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

  1. Story Gathering / User Research / Requirements Gathering

  2. Prototyping

  3. Estimating

  4. Architecting / System Modelling

  5. Designing

  6. Data Modelling

  7. Composing / Decomposing

  8. Process Modelling

  9. AB Testing

  10. Diagrams - ER / DFD / SC

  11. Mockups

  12. Set Milestones and Cost

  13. Delegating

  14. Delivery Planning

Misc Skills

  1. Scripting

  2. Presenting

  3. Negotiating

  4. Writing

  5. Reverse Engineering

  6. 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.

  1. Build Components one at a time, independently of all other components

  2. Use the Component using a Component Shell / REPL

  3. Test the Component using Automation.
    3.1 Make Inputs / Outputs / Network / Sources / Sinks abstract
    3.2 Use a Module Loader to manage Component Location

  4. Model User Interface as Events so that they can be Simulated.

The advantages of a Component Shell / REPL are multifold

  1. In makes Develop / Interact cycle easy

  2. It makes Application Scripting possible from the Start

  3. 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

  1. Finding errors as quickly as possible

  2. Keep errors from cascading

  3. Keep errors visible

  4. Add redundancy to avoid single point of failures

  5. Painless replacements

Unicode

  1. Character is what one would normally write on a piece of paper.

  2. Charater set is a group of characters linked by some common property.

  3. Encoding is the binary representation.

  4. Glyph is the actual shape we see on the screen, variations are left to the font.

  5. Font is what actully represents the glyph at machine level.

  6. Code point is the number representation of each character in character set

  7. Unicode is a 32-bit representation scheme consisting of 256x256x256x256 character points assigned to charaters

  8. Currently about 0.1 million points have been assigned. Only ancient symbols have not been given any assignements.

  9. 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.

  10. There is UTF-32, UTF-16. With the help of surrogate pairs that UTF-16 covers entire unicode space.

  11. UTF-8 this is the best encoding available where 7-bit ascii is kept intact.

  12. 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

Team Structure

Like surgeons.

Paper : click here.

Typical Features

Profiles Blog Forums Landing Pages

Workflows Training Marketting Security Testing Analytics

Commerce Social Media

Utilities Apps Games

Marketplaces

  1. Frontend

  2. Backend … // extensible like apple events

  3. Background - Tasks / Timers

  4. Tests

  5. Auth / Security / Type Checking / Type Conversion / Validation

  6. Resources

  7. System - File / Db/ Memory / Device / Sub programs

Corporate Hierarchy

  1. Intern

  2. Junior

  3. Senior

  4. Lead

  5. PM

  6. Vice President

  7. President

  8. Board

  9. CEO

Startups

  1. 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

  1. Marketing

  2. Management

  3. Engineering

  4. 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

  1. Random

  2. Best

  3. Best fail

  4. Least Time

  5. Difficulty Level

  6. Delayed Gratification

  7. Emotions

  8. Values

  9. Imitation of Past

  10. Known Devil over Unknown

  11. Satisfactory

  12. Role Playing / Simulation of the end

  13. Procrastination / Wait and Watch

  14. Fight / Flight / Fawn

  15. Friend / Enemy / Neutral

  16. Fast / Cheap / Good

  17. Aesthetics / Disgust

  18. Risk Averse / Novelty Seeking (Failure Minimise)

  19. Value for money / Best

  20. 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

  1. Requirements Analysis

  2. Data Flow Diagram (BPM)

  3. ER

  4. Control Flow

  5. Screens

  6. Configuration

  7. Module Decomposition

  8. Function Decomposition (transforms, reactions, controllers)

  9. New Data Structures

  10. 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

  1. Todo

  2. Issues

  3. Done

  4. Benefits, Risks, Opportunities, Threats

  5. Gaps, Limitations, Tradeoffs, Constraints

  6. 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

  1. Example for peers in terms of knowing the domain and delivering a quality product.

  2. Timely Presence

  3. Motivate juniors

  4. Manage business expectations, estimates and keep everyone in loop for delays.

  5. Follow up other teams’s issues

  6. Take ownership

  7. Anticipate edge cases in development and estimates and sprint planning

  8. Take reviews seriously

  9. Understand data from business POV

  10. Read company updates, team commits and mails

  11. Discuss before committing to business

Problem Solving

  1. Generalisation / Simplification / Analogy / Induction

  2. Guess / Skepticism / Verification

  3. What is missing ? What are the patterns ?

  4. Edge Cases

  5. Visualisation

  6. Backtracing and Divide and Conquer

http://www.problem-solving-techniques.com

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