periram
Joined 15 years ago
Joined 15 years ago
Let me explain.
Imagine you have a team that grows from say 4 to 40 over time. All the initial programmers, business managers etc. have left. One fine day, you get a call from the client saying "The feed has not arrived today, fix it in the next 2 hours or we are going elsewhere (or can you please please please fix it ASAP) ..."
What do you do? How do you prevent this from happening in the first place? What procedures / software do you need to have in place to even know what went wrong etc.
Now let me give examples that these tools help you handle.
1. You need to view all the jobs that run on a daily basis across 400 of your servers. 2. You want to make sure that no changes to anything in production can happen without at least 1 more programmer and 1 more business person signing off on it. 3. A job / script fails partially, how do you assess the impact and move forward (you are not even aware of the existence of this script). 4. You have a backup script / job that needs to run on demand. You want to let your support folks run it or even the business folks, without any programmer intervention (you don't want to get a call every time someone in Japan wants to run this report).
Coming to CI/CD systems, some of their goals are
A. Codify the knowledge into scripts / configs and do not rely in tribal knowledge. B. Ensure that your code is always in a "buildable" state with the new changes (i.e. don't even let bad code in) C. When a build fails, notify the programmers who introduced the bug immediately D. Once a build is complete, send it to other systems for stress testing. ...
Yeah large businesses can have very intricate and complex needs. They rely on generic and configurable software (proven and tested by other large organizations) to meet their operational needs. Also, given that you can hire people that are proficient in these tools, you can focus on the business needs rather then reinventing these tools.
Would be quite interested to learn how this was achieved.
Then you can offer to provide the raw underlying data. It would be great if one can browse the aggregate numbers and compare them to say other zip codes / other factors.
The approach would be (writing it from memory, will revise it if there is any feedback):
First master the basic data structures and be able to manipulate them rather quickly. We will write many small programs to ensure that a one can perform most of the common operations on a given data structure straight from memory.
Then we will write transformations, i.e. being able to convert one data structure into another.
Next up with be problems that requires a combination of data structures.
We will spend a good about of time in graph problems, the usual data structures used to store / manipulate them and understand some of the basic graph algorithms ( MST, Traversal, Shortest Path, etc.)
We will briefly spend some time on sliding window problems.
Dynamic programming, Greedy and divide and conquer techniques are rather simple, but we need to distill it down to a science so that we can code them eyes closed :-)
Order complexity, how to think about it by looking at an intermediate step and calculating how many operations are needed to get to next step. We will dig a little into the mathematical aspect of it.
Catchup with family, send texts/emails. Plan your day/week/year/vacation. Self development (communication skills, new skills, reading, meditation) Self entertainment (watch movies/shows or read books, anything that makes you happy without bothering others)
Time will eventually become the most scarce commodity in your life, make good use of it while you have plenty of it.
My 2 cents: Please be open to suggestions. Please involve more people, who you feel comfortable working with. You have solved multiple independent problems of decentralized trust, voting etc. Please try to be agnostic to a specific solution.
I used a very similar idea with my many clients when I was running a startup. Since my domain was e-commerce, I also used google spreadsheet to manage inventory, images, products etc.
I will recommend that you provide immediate feedback to the user with pre-canned JIRA agile - kanban charts. It is very important that the user feels that they have created a lot of value, otherwise they will not be able to see the value of this extra step.