DEV Community

Jason C. McDonald
Jason C. McDonald

Posted on • Updated on

I've Trained Programming Interns For 6+ Years, Ask Me Anything!

I've had the marvelous privilege of running an internship program in my area through my software company. I've worked with the computer science and career service departments of our local universities to continually improve this internship, and am proud to say that we've had a dozen graduates of the program to date, most of whom went on to full-time development and IT positions.

Interns work 6 hours a week (almost always remote) on actual projects in C++ and Python. They have opportunities to participate in team leadership, hiring, and standards authoring. Although remote, we're fully collaborative, and offer the same level of administrative structure you'd find in any full-time industry job (remote or otherwise). Ours is definitely an unusual program, but it works.

Since our company has between 3-10 active employees at any given time, I wear many hats. In running this internship, I've simultaneously served as lead developer, hiring manager, trainer, mentor, technical writer, code reviewer, IT, DevOps, you name it! I've helped interns learn to manage time, handle conflicts, solve problems, ask questions, review code, write documentation...and much, much more.

I've made a lot of mistakes over the years of running this program, but it's been an adventure I've loved every minute of. I've been taking the time to look back as I get things in place for (hopefully) the next round of interns next year.

Ask me anything!


Read the article based on this AMA...

Oldest comments (131)

Collapse
 
michaeltharrington profile image
Michael Tharrington

Can you talk a bit more about the internship? I'm interested in what kinds of projects interns have worked on and how experienced the students are when you take them on. Also, do you take on folks that aren't part of the universities in your local area?

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Interns have worked on various components of our open source game engine project and its supporting libraries. They've developed data structures that beat C++'s standard library on performance, and created the C++ string class that fully supports both UTF-8 while remaining compatible with std::string. They've laid the groundwork for a programming language, an educational content engine, and a vector animation engine.

Our only prerequisite knowledge for the internship program is working proficiency in at least one programming language. Most come in with a background in Java basics, although we've had a couple of Javascripters, a MATLABer, some Pythonistas, even an Air Force IT. The one thing they have in common is that they're relatively new to the field of programming.

The most amazing part of this for me is watching first- and second-year CS majors come in with minimal knowledge of, say, Java, and become skilled C++ developers as time goes on.

We typically bring on interns from the local area because, although we're remote, I believe in the value of the team being able to meet in person from time-to-time. However, we do have a few completely remote workers. We're also an open source company, so even if someone doesn't join as a formal intern, they can still get some experience by being a regular contributor.

Also, we don't require students to come from the universities. We have good working relationships with the faculty at two of the biggest, which means we can offer college credit to their students for the internship, so most of our interns come from there. However, we've been known to bring on folks from elsewhere.

Collapse
 
jboy_oye profile image
unwanted idiot

can I apply for an internship with your company, but I don't have a CS background, but i build fairly complex web apps with javascript and python.

Thread Thread
 
codemouse92 profile image
Jason C. McDonald

You're certainly welcome to! You'll find the name/link to my company on my DEV profile. There's a section dedicated to internships, with all the information and instructions you need to apply.

Collapse
 
jmona789 profile image
Jimmy Mona

I have a ton of side projects I want to start working more on, but when I get home after 8 hours of work I'm exhausted and I feel like I don't want to do anything nevermind more coding. I'm also in a sort of long distance relationship and the only time I see my significant other is on the weekends so I don't want to spend all weekend coding. How do I manage working full time and still make progress on my side projects?

Collapse
 
simov profile image
simo

It's either one of the two .. well, unless you have energy for both right?

So it's about taking risk and following your dream. If that's what you want, then save some money to the side and quit your job.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

This definitely comes up a lot, as most of our interns are full-time students as well. Truth is, everyone gets the same 24 hours a day, and many people balance full time jobs and hobbies or side projects.

Here's a few tips:

1: Scale your expectations.

Even accomplishing four hours of work in a week on your project is progress. You don't need to put it all in at once either. An hour here, 30 minutes there, and you're still making progress.

2: Schedule your time.

I tell many interns, "time left unscheduled is time that will fill itself." You should deliberately schedule times to work on your side-project, time for family, time for housework, time for gaming or catching up on DuckTales. It is important to actually SCHEDULE both productive and relaxation times, or one will take over the other!

You can (and should) still be flexible, but having a regular framework for your schedule helps you "gear up" for the next task, and makes it possible for you to guard that time proactively: "I'm sorry, I can't do X right now, I promised myself I'd spend half an hour on my side-project. I have an opening tomorrow at 6, though!"

You can also swap things around this way. If your best friend wants to meet with you for coffee at 1 pm on a Saturday, but that's when you work on your side project, find what you'd be okay giving up that day ("DuckTales can wait"), move your side-project into that slot, and go for coffee.

That reminds me, you should never answer "when can you do (...)" with "uh, iono". Have your scheduler handy. Pencil something in. It's better to reschedule or cancel (in advance) than to leave something hanging indefinitely.

3. Maximize your productivity.

Give yourself a few minutes to transition from one task to the next. Establish a dedicated workspace if you can, like a favorite nook in your living room, or the corner coffee shop. Figure out your ideal environment for working on your side-project. Use Mynoise.net or your favorite music to help you focus. Block out distractions. Shut off social media. And then just work.

4. Rethink your approach.

All that might seem pointless if you're already exhausted, but there are still things you can do:

  • Consider becoming an early bird (YES, you can do that!) and setting aside some side-project time before work! Then you can get to the office still riding the high of doing something you love.

  • Part of your lunch hour may give you time to work on your side-project. I know many developers who do this, and they find it's a great way to refresh halfway through the day.

  • Look for other ways to reduce stress at work. Do you need to set better boundaries? (Read Boundaries by Henry Cloud) Should you rethink how you structure your workday?

  • Consider whether your side-project itself is contributing stress. If it is, you may need to restructure that as well. (See The Cranky Developer Manifesto and Why Is It Taking So Long??!?).

In short, it is possible to do this, but it may require you to rethink how your life is structured...and that's okay! Side-projects can be a good opportunity to improve your time management and life boundaries.

I myself run two companies, write both fiction and non-fiction books, and am a frequent fixture here on DEV.to and Freenode IRC. I also play music, volunteer with my church, and take care of the house (yep, I'm fully domesticated). Yet my life is typically in pretty good balance. I use these tactics myself.

Collapse
 
artisanasad profile image
Asad Shahbaz

Well I was in the same situation as you are but I have figured a way for myself.

Here is the thing, I always keep my work in a container and never let it flow outside it. Like when I am at the office, my focus is completely there not on the side projects and vice versa.
This helps me to keep my mind clear and focused.

Secondly I sleep early and gets up early to work on my side projects before going to work. By early I mean 4am ☺

Also keep in mind: never to get scared by the workload, because if you do you will loose focus in everything.

Good luck! 👍

Collapse
 
fyodorio profile image
Fyodor

What are the main problems your interns usually face in their work? I guess theoretical knowledge is not a problem, so what bothers them the most in a practical sense?

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

One of the roughest parts of the transition from the classroom to the workforce is the realization of how elusive good code can be. In a learning environment, all the examples are well-defined and neatly contained; very little of the natural weirdness of real-world software projects leaks into that safe little sandbox.

This is one of the reasons I have all new hires read Dreaming in Code by Scott Rosenberg.

The second difficulty they encounter is in moving from the essentially micro-managed environment of the classroom to the somewhat self-managed environment of the workplace. While interns have access to myself and the rest of the staff if they have any questions, and while I meet with them 1-on-1 regularly, the responsibility for asking for help rests solely on them. They are assigned a task in a real project, and must figure out how to complete it. Having that much autonomy is often a shock to the system if all you've ever known of coding was the undergrad college environment.

I have a saying for myself: It is better to let someone dig themselves out of their own hole, than for them to have to dig themselves out of a hole I dug for them. Typically, it's easier to recover from, and learn from, a disaster of one's own making, rather than the results of bad management advice.

Incidentally, the difference between a successful intern and one who doesn't complete the program often comes down to whether they can ask for help. That approach is necessary if they're going to learn to make it in the industry, and it's one of the reasons why our internship graduates have made such a smooth transition into full-time development jobs elsewhere.

The third difficulty is ironically in understanding the concept of a "need-to-know" basis. In college, you can usually see the purpose of an assignment right off the bat, but in the workplace, you may not fully understand the depths of a project, or why your piece is needed.

I answer some of those questions, but I don't spell out all the logic behind my decisions, partly because the individual wouldn't be able to handle it all, and partly because one has to learn how to let go of understanding many things "above their paygrade" (often just for purposes one's own personal sanity!)

Going hand-in-hand with that is in learning to respect the autonomy of other coworkers as well. Collaborating and providing feedback without micromanaging or meddling can be a difficult balance, especially when "group projects" are one's only exposure to teams.

And then there's the good old-fashioned "learning how to take directions." No further comment necessary on that.

Collapse
 
codemouse92 profile image
Jason C. McDonald

Oh, sure, and I'd put part of the blame on colleges for perpetuating Shiny Object Syndrome.

C++ is still a major player in the programming world! Yet most developers with only a passing familiarity with C++ are afraid of it. This is mostly a combination of the popular misconceptions about the language, paired with classic Hating On Languages You Don't Use, all poured over a serious case of suppressed imposter syndrome. In fact, nearly all of my interns started out afraid of C++, and wound up being avid fans of the language, just through reguarly working in it.

Of course, not everyone is going to like C++, and that's fine. It's still an important language to know, as so much important code is written in it. A lot of the skills can be carried over into other ALGOL-like languages, but more importantly, the habits developed in it of thinking about data type suitability, memory allocation and ownership, reliability, and algorithmic efficiency, are some of the foundational concepts for becoming an expert in ANY language.

In the end, I think my interns walk away with an appreciation for the concept that suitability, not popularity, is all that matters in a language. That understanding alone is the best safeguard against Shiny Object Syndrome.

Collapse
 
justaguy profile image
^.^ • Edited

Oh man, im so excited that found that article, that even wont be using google translate for that massage. Just because im so afraid to lost a time.

Look, im really a new guy in programming. Know nothing about it. But always wanted!

So i started using Khan Academy, Brilliant.org and tutor to gain some knowledge in math, in order to have much better comprehension about programming later.

But now, when time is coming, i still cant find any really good starting point. You know, just like Khan Academy for my math.

So please, if you can, share with me and maybe other guys who are also interested links on the sites where we could find complete programming courses or at least something that will help us to start.

Thank you a lot:3

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

There are hundreds of great books and courses available for learning how to program. Here's a few I recommend:

Collapse
 
poweruser64 profile image
Blake North • Edited

How old should I be and what kind of experience should I try to get while I'm in college to get an internship? (I'm going into my senior year of highschool.)

Thanks in advance

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

It really depends on the internship. As for us, we've had interns as young as 19, and we only require some basic working proficiency in a programming language, along with essential familiarity with either the object-oriented, functional, or generic programming paradigms.

In other words, if you're (1) 18 years of age or older and (2) have written at least some tiny project in any language, you're probably eligible for an internship.

A good programming internship should be all about learning how to develop software in the real world, and is intended as an "on-ramp" to the industry. It shouldn't require prior programming employment history.

Collapse
 
poweruser64 profile image
Blake North • Edited

Thanks for your response

I have a few more questions:
How do I go about getting a internship? Are there websites that I look on? Should I reach out to the company that I want to get an internship at, or will they reach out to me? Or should I talk to people I know who work at companies that I want to get an internship at? I live in Seattle, so I am friends with lots of people who work at Google, Microsoft, and Amazon.

Sorry for bombarding you with all these questions 😁

Thanks again

Thread Thread
 
codemouse92 profile image
Jason C. McDonald • Edited

From what I know, it never hurts to reach out to companies you're interested in interning at, either directly or through contacts (although you're likely to have the best chances with the latter.) Companies will virtually never reach out to you first.

You can also check job boards for internships. If you're a student or alumni of a college or university, their career services department would be able to point you in the right direction.

However, whatever you do, you should make sure the internship you take is legitimate:

  • According to US Labor Law, internships should almost always be paid at least minimum wage. (The same is true in other countries.) There are very specific regulations for unpaid internships, so you should look up your country's laws regarding this. (P.S. Ours can legally be unpaid because our company has no income yet, and even I'm not getting paid; we're just building FOSS.)

  • Whether paid or unpaid, an internship should never cost you money, either up front or "if you don't finish." There are a number of (legal) scams that claim to offer internships, but require you to pay them back if you don't fit some criteria. These are never okay.

  • Any internship should have you working on a real project alongside actual developers! There should also be training involved. An internship should be the same as a junior development position, but with more on-the-job training.

  • ...it should not involve you fetching coffee, sweeping floors, or doing any other menial jobs shuffled off on you by more senior devs. Contrary to popular belief, interns are NOT gofers. Any internship that treats you like one should be shunned.

In short, programming internships are real development jobs, and should be treated as such, both by you and your employer. You should ask questions about internship you're thinking about applying for. Find out what you'll be working on, who you'll be working with, what the training is like, who you'll report to, what the expectations are, and yes, if it's paid (and how much) or unpaid.

Collapse
 
sahajranipa1 profile image
sahaj ranipa

Sir please give me suggestions regarding how can I think like programmer and please suggest me some Android development books for my career and also suggest me some programming related books and what should be my roadmap for good programer who can think differently and work like some good programmer.

Collapse
 
codemouse92 profile image
Jason C. McDonald

I don't know anything about Android development, unfortunately, but I did post a list of recommended books in reply to @justaguy on this article, so I'd recommend checking those out.

You may especially be interested in "Think Like A Programmer" and "Dreaming In Code".

There's no cut-and-dry "roadmap" for becoming a good programmer, other than to say Just Start Writing Code! Read books, take courses, talk to other developers, and apply all that knowledge to the code you write. Lather, rinse, repeat. If you keep doing that long enough, someday you'll look back and realize with some astonishment that you're not a newbie anymore.

Collapse
 
sahajranipa1 profile image
sahaj ranipa

Sir please suggest some books about design patterns, data structures and algorithms.

Thread Thread
 
codemouse92 profile image
Jason C. McDonald

Replied on your other comment. ;)

Collapse
 
sahajranipa1 profile image
sahaj ranipa

And my second question is that how can I learn some good algorithms and concepts about data structures?.please suggest some content about those

Collapse
 
codemouse92 profile image
Jason C. McDonald

"Game Programming Patterns" and "Computational Fairy Tales" on that list I posted to @justaguy are both quite good.

However, I think the best explanations I've ever seen are right here on DEV.to!! The BaseCS video series by @vaidehijoshi is absolutely incredible:

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Pointers are definitely high on the list, along with references, addresses, memory management, and segmentation faults. At this point, I plan to write a "Memory Management For Mere Mortals" series here on DEV.to soon, and then point (pun intended) interns to it.

Templates are also quite high on the list of things that confuse newcomers, especially those coming from Java and its ill-conceived generics system. Yet, once they're understood, templates are one of the biggest reasons why C++ devs love this language!

Surprisingly, OOP is usually only confusing to interns coming from Java, and that's mainly because many of the bad habits that language allows, and even encourages at times, become more clearly bad as soon as they're implemented in C++ (with all warnings enabled).

And then there's my personal pet peeve I have to break almost every intern of: don't use double where a float will do! (That wastes sooooo much memory.)

Collapse
 
autoferrit profile image
Shawn McElroy

I am taking a side job with a local bootcamp that does courses for teens and adults to learn programming. Ive only taught other programmers different tools.

What tips would you have for being newer to teaching teens/adults these new skills?

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

I have a few guidelines I follow in training interns:

1: Learn to put yourself in the mind of a beginner. Put effort into recalling those feelings of confusion, fear, and bewilderment you first experienced. Go over those memories often, and draw from them to help you empathize with your students. You can also build on this by actively answering questions in an online community where beginners frequent (such as DEV.to.) Learn to spot patterns in questions beginners ask.

2: Be patient. Expect to explain things multiple times, and in multiple ways. Asking the person to explain a concept back to you is a great way to check their understanding. Never belittle anyone for not knowing something, especially something that seems "obvious."

3: Learn to say "I don't know, but let's find out together." You'd be amazed how often you'll be asked questions that you've never thought to answer! A major part of teaching is in demonstrating to your students how to learn. Help them find the resources, "grok" the material yourself, and then walk them through it if necessary. (This makes for a great opportunity to teach a student how to read the documentation or use StackOverflow.)

4: Don't be afraid to say "I was wrong." I've stuck my foot in it more than once, and it always hurts my pride to admit I misunderstood something. I always have that lurking fear that my credibility will be harmed, but in fact, admitting I made a mistake builds credibility, rather than destroying it! It tells the student "you're safe with me."

5: Don't stop your students from making mistakes! Be available to answer questions and to help if asked. Make it clear from the start (and remind often) that the student needs only ask, but resist the urge to rescue them if they don't. It is better to let your student dig themselves out of their own hole, rather than one you dug for them.

Collapse
 
autoferrit profile image
Shawn McElroy

Great tips! That will help a lot thanks. One thing I realized I need to do is setup a notebook (I use notion.so) for tracking students (non identifiable), the course, and any other notes.

Thread Thread
 
codemouse92 profile image
Jason C. McDonald • Edited

That could work, although real notebooks are worth considering too. (I'm drooling over the TUL discbound notebook system.)

As you teach, you'll notice some topics come up a lot. When I notice these patterns, I like to write down the essentials of a difficult topic in an article and publish it here on DEV.to. Then, I can refer the intern right to the article, and I've saved myself 30-45 minutes per student. (They can always ask additional questions after reading the article.)

Thread Thread
 
autoferrit profile image
Shawn McElroy

Oh writing is great too. I do bullet a journal too.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

What is your favourite colour?

No but seriously, how do I finish a side project before starting a new one?

Collapse
 
codemouse92 profile image
Jason C. McDonald

Wait, I'm supposed to finish one first?

Honestly, I don't know that there's a rule that says you can only have one open project at a time. For me, I usually have about a dozen projects going at a time (just my personality), and I work on whichever I have the necessary resources and interest to work on that day. (Actual deadlines may shift priorities of course.)

And yes, I've finished multiple projects that way.

Don't be afraid to set aside a project that you're stuck on or bored with and start another. Often, something you learn in one project will get you unstuck in another.

The only time you should really be concerned is if you never actually make progress on anything, at which point you should take a hard look at your own work habits and expectations for what happens when things get difficult.

P.S. I like them all, but blue is especially nice.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

I've seen sooooooo much entitlement in interviewing candidates for the internship program.

One 19-yr-old, who bragged he had built half an app in C# (the whole extent of his coding career thus far), actually sat and lectured my most senior developers on everything he thought they were doing wrong in our project...much to everyone's amusement.

I burst his bubble when I described the rather auspicious achievements of said devs.

In our hiring annals, we refer to him only as "wonder boy".

Collapse
 
mortoray profile image
edA‑qa mort‑ora‑y

How many, in your imagination, have you thrown out the window?

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Only about half of the interns we hire actually complete the program, which is apparently a pretty good completion rate all things considered. A lot of people like the idea of coding, but don't want to really put in the hard work necessary in practice.

We also only hire about half of those we interview, and only interview about half those who apply.

All that math to say, only about one-eighth of people who apply for our internship program actually make through to completion, but those who do are well-prepared for the industry!

But how many interns have I imagined throwing out the window? None, really.

Collapse
 
ozyosterman profile image
Felix Tso

How did you get into the role of a mentor?

How do you build enough knowledge to be confident enough to mentor or teach?

I find that I have a good amount of knowledge to share with other developers but not enough to take on a leadership role.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

I wound up in the role of a mentor somewhat unintentionally. I'd been planning to start an internship program through my company, but I was originally afraid I'd have nothing to offer. It was my computer science professor who assured me that I already knew plenty enough to mentor, and I'd learn the rest on the way.

I've learned that there are really only two rules about whether you're ready to be a mentor:

  1. You can only take people as far as you yourself have gone.

  2. If you keep learning more, you'll always be at least one step ahead.

Starting out, I knew how to write production-quality code and complete a project by a deadline, but that was about it. I learned a lot through mentoring...at least as much as my interns did!...and I made a lot of mistakes along the way. The trick was, I was willing to admit to my interns when I made a mistake, to listen to feedback, and to continually grow as a leader. As long as you learn from your mistakes, you can only grow in your leadership and mentoring skills.

I think Doctor Who (11th, if you're keeping track) unintentionally sums up the primary secret to leadership when he says to his companions...

Hang on tight and pretend there's a plan!

It works out surprisingly well.

Collapse
 
laserblue profile image
laserblue

Have you recorded what you have learned in some type of ASK system or ExTRA (Experts Telling Relevant Advice) system that junior programmers and developers could consult when they need help after office hours?
I'm looking for something better than YouTube subscriptions to numerous videos I am not interested in at the moment. socraticarts.com/solutions/technol...

Thread Thread
 
codemouse92 profile image
Jason C. McDonald • Edited

I share most of my insights in my articles here on DEV, so I'd recommend through my profile.

In-house, we use Phabricator Ponder (which functions like a mini-StackOverflow) for asking and answering questions. I try to encourage interns to use that instead of email when they have a question, so the answers are available to other (and future) interns. There's not as much information on there as I'd like, but we're working on it.

We also maintain extensive documentation of our processes and workflows, including detailed setup and debugging instructions.

Thread Thread
 
laserblue profile image
laserblue

Would you say that your articles are well indexed on DEV? Can students easily find the specific information or advice you give that they need ASAP?

Thread Thread
 
codemouse92 profile image
Jason C. McDonald • Edited

I'm not sure what you mean. In the context of DEV alone, one could probably browse my profile and search for specific tags, and some of my articles are series with proper topic lists, but I never intended my articles to be any sort of properly-indexed reference guide.

If you're talking about, in the context of my own interns, I do maintain an internal wiki page with a number of articles, some of them mine, organized by topic.

Of course, I don't really consider my own writing to be that important. I'd rather students and interns learn how to use search tools and do their own research. DEV's tags and search bar are quite good for that.

Collapse
 
heatherldoughty profile image
Heather Doughty

Do you have any any advice for remote collaboration and leadership for Jr Engineers? I’m interested in how you provide the “administrative structure” and guidance needed.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

I've figured a lot of this out by trial and error, but our current system is surprisingly polished and effective!

  1. I put a lot of work into the collaborative development platform. We use Phabricator, Jenkins, and Nextcloud (plus a few other pieces) all fine-tuned to work smoothly and effectively.

  2. We have extensive, clear, well-organized written documentation for the setup process and workflows.

  3. Teams meet over video chat at least once a week. Text-based chat is no replacement for human interaction! The agenda is simple: the leader gives announcements, each person shares what they did over the past week (with opportunities for feedback), and then each person describes what they'll be doing over the next week. Meetings can be as short as 15 minutes, or as long as an hour (we moderate to keep it below that), depending on the needs of the team that week. Everyone looks forward to the weekly meetings!

  4. Interns are assigned an Internship Supervisor (so far, always me) whom they meet with 1-on-1 regularly over video chat. As they move along through the program, they need to meet less and less.

  5. The programming workflow includes mandatory code reviews, CI/testing, and documentation requirements.

  6. We have a complete Employee Handbook and proper forms for all administrative functions. We require these for things like leaves of absence, promotions, and disciplinary reports.

  7. Time must be reported using the dedicated hours tracking tool. Because everything on Phabricator has a code (tasks, PRs, commits, events, etc.), all reported time must include the codes for the work completed. (This has allowed us to catch deceptive over-reporting.)

  8. We have regular performance reviews; however, these are structured in a way that requires the supervisor (me) to hand-write a statement about each point. Then, I meet with each intern to discuss the review.

  9. Interns in the second half of the year-long program, and graduates of the internship program, can serve on the Standards Board, or be appointed as an Assistant Lead Developer or Team Lead. These are designed not to be considered "promotions," but rather a voluntary peer leadership position. It provides valuable management experience to interns, and makes my job a lot easier. (These roles typically cycle each year as graduates get jobs, or just want to give other interns a turn. It's a beautifully peaceful hand-off.)

Point 9 is especially interesting because, when interns know they have leadership opportunities, they become more invested in the maintaining and upholding the structure.