Software Engineering

1. Main difference between programming and software engineering

Programming is the act of writing code to solve a specific problem.
Software engineering is the systematic, disciplined, and scalable approach to designing, building, testing, deploying, and maintaining software.
👉 In short: Programming = writing code.
Software Engineering = managing the entire lifecycle of software.


---

2. What does “Hyrum’s Law” state?

Hyrum’s Law:

> “With enough users of an API, all observable behaviors of your system will eventually be depended upon, whether you documented them or not.”



Meaning: even small or unintended behaviors will become dependencies, making changes risky.


---

3. Two reasons long-term projects need continuous upgrades

1. Changing requirements: business, user needs, and laws evolve over time.


2. Technological updates: libraries, languages, security patches, and platforms change.




---

4. What is meant by “Shifting Left” in software development?

“Shift Left” means moving testing, quality checks, security reviews, and feedback earlier in the development cycle.
Goal: catch issues early → reduce cost, time, and failures.


---

5. What are trade-offs in engineering decisions?

Trade-offs mean choosing one advantage at the cost of another.
Example: Choosing faster performance may increase memory usage.
Engineers must balance speed, cost, complexity, reliability, etc.


---

6. Two challenges faced by software engineers when working in teams

1. Communication gaps – misunderstandings about requirements or tasks.


2. Integration conflicts – merging code from multiple people causes bugs or version issues.




---

7. How does knowledge sharing benefit teams?

Knowledge sharing:

Reduces dependency on any single developer

Improves team speed and problem-solving

Helps onboard new members faster

Promotes consistency in coding practices



---

8. Define the role of a team lead

A team lead:

Guides team technically

Distributes tasks

Ensures coordination and code quality

Supports junior developers

Communicates with management

Removes obstacles that block development



---

9. Why should team members admit mistakes openly?

Builds trust and psychological safety

Prevents small issues from becoming major failures

Encourages learning culture

Helps team fix problems quickly instead of hiding them



---

10. How does knowledge sharing benefit teams?

(Same as Q7 — you can repeat or summarize)
Knowledge sharing improves collaboration, resilience, productivity, and reduces risks.


---

11. Why a low Bus Factor is dangerous (with example)

Bus Factor = number of people who must leave (or be unavailable) to stall a project.
Low bus factor (1 or 2) → very risky.

Example:
If one developer knows all about the billing system and leaves the company, no one can fix bugs or make updates. The entire service may break during a payment outage.

Real-life example:
A company’s only DevOps engineer left suddenly → deployment pipelines stopped working for days.


---

12. Why is feedback culture important in software teams?

Feedback culture:

Improves performance and code quality

Encourages continuous growth

Helps catch mistakes earlier

Builds trust and healthy communication

Prevents recurring errors



---

13. What does “equity” mean in software engineering teams and why is it important?

Equity = providing fair opportunities by giving people the support and resources they uniquely need, rather than treating everyone identically.

Importance:

Creates inclusive work environments

Reduces bias in promotions and hiring

Improves diversity → leads to better problem solving

Ensures all team members can contribute effectively



---

14. Why blind hiring promotes equity?

Blind hiring hides identifying information such as:

Name

Gender

School

Age

Race

Photo


This prevents unconscious bias from affecting hiring decisions. Candidates are judged purely on skill, not personal background.


---

15. Main reason Google’s image recognition system made serious classification mistakes

The system was trained on biased and incomplete data, meaning certain groups were underrepresented in the training dataset.
Because of this, the model produced incorrect and harmful classifications.


---

16. Who discovered the mistakes? Why internal testing failed?

The mistakes were discovered by users, not Google employees.

Internal testing failed because:

Google used non-representative test data

Lack of diversity in testing groups

They didn’t consider all real-world edge cases




---

17. Explain “haunting graveyards” in code and why they are haunted

Haunting graveyards = old, abandoned, or unused parts of the codebase that everyone is afraid to delete.
They are “haunted” because:

Nobody knows what depends on them

Documentation is missing

Removing them might break something critical

The original developers have left



---

18. Short note on Tribal Knowledge

Tribal knowledge = important project information that lives only in people's heads and is not documented.
Problems caused:

New developers struggle

If key people leave, knowledge is lost

Makes project risky (low bus factor)



---

19. Explain “Googleness” in Software Development

Googleness refers to qualities Google expects from developers:

Innovation and curiosity

Working well in teams

Taking ownership

Being data-driven

Empathy and respect for users

Strong problem-solving and learning mentality



---

20. Low bus factor is a red flag — explain with real-life example

Red flag: a project collapses if 1–2 key people leave.
Example:
In 2014, the Left-Pad NPM package was unpublished by its single maintainer.
Thousands of JavaScript projects broke because they depended on one person maintaining one tiny piece of code.
This shows how dangerous low bus factor is in software ecosystems.

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.